&& ((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)
+{
+ dst->as_u64[0] = src->as_u64[0];
+ dst->as_u64[1] = src->as_u64[1];
+}
+
+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)
{
{
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));
&& 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. */