X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip_types.c;h=9659ca503b47fdad7996a08d61e8fc0bbf265f8e;hb=297d288ed653abac9d719013c4ead5215230e7da;hp=3378da6625d0dc350911dbdb53051442fe1347a9;hpb=ea93e48cf6e918937422638cb574964b88a146b6;p=vpp.git diff --git a/src/vnet/ip/ip_types.c b/src/vnet/ip/ip_types.c index 3378da6625d..9659ca503b4 100644 --- a/src/vnet/ip/ip_types.c +++ b/src/vnet/ip/ip_types.c @@ -94,6 +94,21 @@ ip_address_size (const ip_address_t * a) return 0; } +bool +ip_address_is_zero (const ip_address_t * ip) +{ + switch (ip_addr_version (ip)) + { + case AF_IP4: + return (ip_addr_v4 (ip).as_u32 == 0); + case AF_IP6: + return (ip_addr_v6 (ip).as_u64[0] == 0 && + ip_addr_v6 (ip).as_u64[1] == 0); + break; + } + return false; +} + int ip_address_cmp (const ip_address_t * ip1, const ip_address_t * ip2) { @@ -155,19 +170,37 @@ ip_address_set (ip_address_t * dst, const void *src, u8 version) ip_addr_version (dst) = version; } +fib_protocol_t +ip_address_to_46 (const ip_address_t * addr, ip46_address_t * a) +{ + fib_protocol_t proto = FIB_PROTOCOL_IP4; + + switch (ip_addr_version (addr)) + { + case AF_IP4: + ip46_address_set_ip4 (a, &addr->ip.v4); + break; + case AF_IP6: + proto = FIB_PROTOCOL_IP6; + a->ip6 = addr->ip.v6; + break; + } + + return (proto); +} + void -ip_address_to_46 (const ip_address_t * addr, - ip46_address_t * a, fib_protocol_t * proto) +ip_address_from_46 (const ip46_address_t * nh, + fib_protocol_t fproto, ip_address_t * ip) { - *proto = (AF_IP4 == ip_addr_version (addr) ? - FIB_PROTOCOL_IP4 : FIB_PROTOCOL_IP6); - switch (*proto) + switch (fproto) { case FIB_PROTOCOL_IP4: - ip46_address_set_ip4 (a, &addr->ip.v4); + clib_memset (ip, 0, sizeof (*ip)); + ip_address_set (ip, &nh->ip4, AF_IP4); break; case FIB_PROTOCOL_IP6: - a->ip6 = addr->ip.v6; + ip_address_set (ip, &nh->ip6, AF_IP6); break; default: ASSERT (0);