X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip6_packet.h;h=015dd01f8aa53ee4dbf199840d21e12617d2b90e;hb=4d5b917;hp=620740061c1b0d72f72d6527e3ba8c80aeb16d0a;hpb=c0a93143412b4be7bba087bf633855aeeaee7c56;p=vpp.git diff --git a/src/vnet/ip/ip6_packet.h b/src/vnet/ip/ip6_packet.h index 620740061c1..015dd01f8aa 100644 --- a/src/vnet/ip/ip6_packet.h +++ b/src/vnet/ip/ip6_packet.h @@ -93,6 +93,8 @@ typedef CLIB_PACKED (union { #define ip46_address_is_zero(ip46) (((ip46)->as_u64[0] == 0) && ((ip46)->as_u64[1] == 0)) #define ip46_address_is_equal(a1, a2) (((a1)->as_u64[0] == (a2)->as_u64[0]) \ && ((a1)->as_u64[1] == (a2)->as_u64[1])) +#define ip46_address_initializer {{{ 0 }}} + static_always_inline void ip46_address_copy (ip46_address_t * dst, const ip46_address_t * src) { @@ -100,7 +102,12 @@ ip46_address_copy (ip46_address_t * dst, const ip46_address_t * src) dst->as_u64[1] = src->as_u64[1]; } -#define ip46_address_initializer {{{ 0 }}} +static_always_inline void +ip46_address_set_ip6 (ip46_address_t * dst, const ip6_address_t * src) +{ + dst->as_u64[0] = src->as_u64[0]; + dst->as_u64[1] = src->as_u64[1]; +} always_inline ip46_address_t to_ip46 (u32 is_ipv6, u8 * buf) @@ -273,7 +280,7 @@ ip6_address_mask_from_width (ip6_address_t * a, u32 width) { int i, byte, bit, bitnum; ASSERT (width <= 128); - memset (a, 0, sizeof (a[0])); + clib_memset (a, 0, sizeof (a[0])); for (i = 0; i < width; i++) { bitnum = (7 - (i & 7)); @@ -340,6 +347,18 @@ ip6_is_solicited_node_multicast_address (const ip6_address_t * a) && a->as_u8[12] == 0xff); } +always_inline u32 +ip6_address_hash_to_u32 (const ip6_address_t * a) +{ + return (a->as_u32[0] ^ a->as_u32[1] ^ a->as_u32[2] ^ a->as_u32[3]); +} + +always_inline u64 +ip6_address_hash_to_u64 (const ip6_address_t * a) +{ + return (a->as_u64[0] ^ a->as_u64[1]); +} + typedef struct { /* 4 bit version, 8 bit traffic class and 20 bit flow label. */