These will have callers later. Signed-off-by: Justin Pettit <jpet...@ovn.org> --- lib/packets.c | 38 ++++++++++++++++++++++++++++++++++++++ lib/packets.h | 3 +++ 2 files changed, 41 insertions(+)
diff --git a/lib/packets.c b/lib/packets.c index 9e4d0e7..9b34961 100644 --- a/lib/packets.c +++ b/lib/packets.c @@ -693,6 +693,44 @@ struct in6_addr ipv6_addr_bitand(const struct in6_addr *a, return dst; } +struct in6_addr ipv6_addr_bitxor(const struct in6_addr *a, + const struct in6_addr *b) +{ + int i; + struct in6_addr dst; + +#ifdef s6_addr32 + for (i=0; i<4; i++) { + dst.s6_addr32[i] = a->s6_addr32[i] ^ b->s6_addr32[i]; + } +#else + for (i=0; i<16; i++) { + dst.s6_addr[i] = a->s6_addr[i] ^ b->s6_addr[i]; + } +#endif + + return dst; +} + +bool ipv6_is_zero(const struct in6_addr *a) +{ +#ifdef s6_addr32 + for (int i = 0; i < 4; i++) { + if (a->s6_addr32[i]) { + return false; + } + } +#else + for (int i = 0; i < 16; i++) { + if (a->s6_addr[i]) { + return false; + } + } +#endif + + return true; +} + /* Returns an in6_addr consisting of 'mask' high-order 1-bits and 128-N * low-order 0-bits. */ struct in6_addr diff --git a/lib/packets.h b/lib/packets.h index 06166de..2043175 100644 --- a/lib/packets.h +++ b/lib/packets.h @@ -1027,6 +1027,9 @@ void ipv6_format_masked(const struct in6_addr *addr, const char * ipv6_string_mapped(char *addr_str, const struct in6_addr *addr); struct in6_addr ipv6_addr_bitand(const struct in6_addr *src, const struct in6_addr *mask); +struct in6_addr ipv6_addr_bitxor(const struct in6_addr *a, + const struct in6_addr *b); +bool ipv6_is_zero(const struct in6_addr *a); struct in6_addr ipv6_create_mask(int mask); int ipv6_count_cidr_bits(const struct in6_addr *netmask); bool ipv6_is_cidr(const struct in6_addr *netmask); -- 1.9.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev