- struct pipeline_passthrough *p_pt = arg;
- uint32_t key_offset_rd = p_pt->key_offset_rd;
- uint32_t key_offset_wr = p_pt->key_offset_wr;
- uint32_t hash_offset = p_pt->hash_offset;
-
- uint64_t *key_rd0 = RTE_MBUF_METADATA_UINT64_PTR(pkt[0], key_offset_rd);
- uint64_t *key_wr0 = RTE_MBUF_METADATA_UINT64_PTR(pkt[0], key_offset_wr);
- uint32_t *hash0 = RTE_MBUF_METADATA_UINT32_PTR(pkt[0], hash_offset);
-
- uint64_t *key_rd1 = RTE_MBUF_METADATA_UINT64_PTR(pkt[1], key_offset_rd);
- uint64_t *key_wr1 = RTE_MBUF_METADATA_UINT64_PTR(pkt[1], key_offset_wr);
- uint32_t *hash1 = RTE_MBUF_METADATA_UINT32_PTR(pkt[1], hash_offset);
-
- uint64_t *key_rd2 = RTE_MBUF_METADATA_UINT64_PTR(pkt[2], key_offset_rd);
- uint64_t *key_wr2 = RTE_MBUF_METADATA_UINT64_PTR(pkt[2], key_offset_wr);
- uint32_t *hash2 = RTE_MBUF_METADATA_UINT32_PTR(pkt[2], hash_offset);
-
- uint64_t *key_rd3 = RTE_MBUF_METADATA_UINT64_PTR(pkt[3], key_offset_rd);
- uint64_t *key_wr3 = RTE_MBUF_METADATA_UINT64_PTR(pkt[3], key_offset_wr);
- uint32_t *hash3 = RTE_MBUF_METADATA_UINT32_PTR(pkt[3], hash_offset);
-
- uint64_t key_ipv6_0[8];
- uint64_t key_ipv6_1[8];
- uint64_t key_ipv6_2[8];
- uint64_t key_ipv6_3[8];
-
- uint32_t hash_ipv6_0;
- uint32_t hash_ipv6_1;
- uint32_t hash_ipv6_2;
- uint32_t hash_ipv6_3;
-
- /* Read */
- key_ipv6_0[0] = key_rd0[0] & rte_bswap64(0x0000FF00FFFFFFFFLLU);
- key_ipv6_1[0] = key_rd1[0] & rte_bswap64(0x0000FF00FFFFFFFFLLU);
- key_ipv6_2[0] = key_rd2[0] & rte_bswap64(0x0000FF00FFFFFFFFLLU);
- key_ipv6_3[0] = key_rd3[0] & rte_bswap64(0x0000FF00FFFFFFFFLLU);
-
- key_ipv6_0[1] = key_rd0[1];
- key_ipv6_1[1] = key_rd1[1];
- key_ipv6_2[1] = key_rd2[1];
- key_ipv6_3[1] = key_rd3[1];
-
- key_ipv6_0[2] = key_rd0[2];
- key_ipv6_1[2] = key_rd1[2];
- key_ipv6_2[2] = key_rd2[2];
- key_ipv6_3[2] = key_rd3[2];
-
- key_ipv6_0[3] = key_rd0[3];
- key_ipv6_1[3] = key_rd1[3];
- key_ipv6_2[3] = key_rd2[3];
- key_ipv6_3[3] = key_rd3[3];
-
- key_ipv6_0[4] = key_rd0[4];
- key_ipv6_1[4] = key_rd1[4];
- key_ipv6_2[4] = key_rd2[4];
- key_ipv6_3[4] = key_rd3[4];
-
- key_ipv6_0[5] = 0;
- key_ipv6_1[5] = 0;
- key_ipv6_2[5] = 0;
- key_ipv6_3[5] = 0;
-
- key_ipv6_0[6] = 0;
- key_ipv6_1[6] = 0;
- key_ipv6_2[6] = 0;
- key_ipv6_3[6] = 0;
-
- key_ipv6_0[7] = 0;
- key_ipv6_1[7] = 0;
- key_ipv6_2[7] = 0;
- key_ipv6_3[7] = 0;
-
- /* Compute */
- hash_ipv6_0 = p_pt->f_hash(key_ipv6_0, 64, 0);
- hash_ipv6_1 = p_pt->f_hash(key_ipv6_1, 64, 0);
- hash_ipv6_2 = p_pt->f_hash(key_ipv6_2, 64, 0);
- hash_ipv6_3 = p_pt->f_hash(key_ipv6_3, 64, 0);
-
- /* Write */
- key_wr0[0] = key_ipv6_0[0];
- key_wr1[0] = key_ipv6_1[0];
- key_wr2[0] = key_ipv6_2[0];
- key_wr3[0] = key_ipv6_3[0];
-
- key_wr0[1] = key_ipv6_0[1];
- key_wr1[1] = key_ipv6_1[1];
- key_wr2[1] = key_ipv6_2[1];
- key_wr3[1] = key_ipv6_3[1];
-
- key_wr0[2] = key_ipv6_0[2];
- key_wr1[2] = key_ipv6_1[2];
- key_wr2[2] = key_ipv6_2[2];
- key_wr3[2] = key_ipv6_3[2];
-
- key_wr0[3] = key_ipv6_0[3];
- key_wr1[3] = key_ipv6_1[3];
- key_wr2[3] = key_ipv6_2[3];
- key_wr3[3] = key_ipv6_3[3];
-
- key_wr0[4] = key_ipv6_0[4];
- key_wr1[4] = key_ipv6_1[4];
- key_wr2[4] = key_ipv6_2[4];
- key_wr3[4] = key_ipv6_3[4];
-
- key_wr0[5] = 0;
- key_wr0[5] = 0;
- key_wr0[5] = 0;
- key_wr0[5] = 0;
-
- key_wr0[6] = 0;
- key_wr0[6] = 0;
- key_wr0[6] = 0;
- key_wr0[6] = 0;
-
- key_wr0[7] = 0;
- key_wr0[7] = 0;
- key_wr0[7] = 0;
- key_wr0[7] = 0;
-
- *hash0 = hash_ipv6_0;
- *hash1 = hash_ipv6_1;
- *hash2 = hash_ipv6_2;
- *hash3 = hash_ipv6_3;
-}