MCPcopy Create free account
hub / github.com/F-Stack/f-stack / rte_thash_load_v6_addrs

Function rte_thash_load_v6_addrs

dpdk/lib/hash/rte_thash.h:137–162  ·  view source on GitHub ↗

* Prepare and load IPv6 addresses (src and dst) * into target tuple * @param orig * Pointer to ipv6 header of the original packet * @param targ * Pointer to rte_ipv6_tuple structure */

Source from the content-addressed store, hash-verified

135 * Pointer to rte_ipv6_tuple structure
136 */
137static inline void
138rte_thash_load_v6_addrs(const struct rte_ipv6_hdr *orig,
139 union rte_thash_tuple *targ)
140{
141#ifdef RTE_ARCH_X86
142 __m128i ipv6 = _mm_loadu_si128((const __m128i *)orig->src_addr);
143 *(__m128i *)targ->v6.src_addr =
144 _mm_shuffle_epi8(ipv6, rte_thash_ipv6_bswap_mask);
145 ipv6 = _mm_loadu_si128((const __m128i *)orig->dst_addr);
146 *(__m128i *)targ->v6.dst_addr =
147 _mm_shuffle_epi8(ipv6, rte_thash_ipv6_bswap_mask);
148#elif defined(__ARM_NEON)
149 uint8x16_t ipv6 = vld1q_u8((uint8_t const *)orig->src_addr);
150 vst1q_u8((uint8_t *)targ->v6.src_addr, vrev32q_u8(ipv6));
151 ipv6 = vld1q_u8((uint8_t const *)orig->dst_addr);
152 vst1q_u8((uint8_t *)targ->v6.dst_addr, vrev32q_u8(ipv6));
153#else
154 int i;
155 for (i = 0; i < 4; i++) {
156 *((uint32_t *)targ->v6.src_addr + i) =
157 rte_be_to_cpu_32(*((const uint32_t *)orig->src_addr + i));
158 *((uint32_t *)targ->v6.dst_addr + i) =
159 rte_be_to_cpu_32(*((const uint32_t *)orig->dst_addr + i));
160 }
161#endif
162}
163
164/**
165 * Generic implementation. Can be used with original rss_key

Callers 2

rxa_do_softrssFunction · 0.85
test_toeplitz_hash_calcFunction · 0.85

Calls

no outgoing calls

Tested by 1

test_toeplitz_hash_calcFunction · 0.68