diff options
author | Neale Ranns <nranns@cisco.com> | 2019-12-16 00:53:11 +0000 |
---|---|---|
committer | Damjan Marion <dmarion@me.com> | 2020-02-21 09:54:19 +0000 |
commit | 282872127bbeee6ae59ab3f885c09bad601ee0cc (patch) | |
tree | 4f1ef8243b194ca8bf6f1acd62ba4a7d688d371e /src/vnet/ip/ip_types.c | |
parent | d057625d499525625d60d2207665eaeb755e380e (diff) |
ipsec: IPSec protection for multi-point tunnel interfaces
Type: feature
Signed-off-by: Neale Ranns <nranns@cisco.com>
Change-Id: Iaba2ab11bfaa1c8db4023434e3043ac39500f938
Diffstat (limited to 'src/vnet/ip/ip_types.c')
-rw-r--r-- | src/vnet/ip/ip_types.c | 49 |
1 files changed, 43 insertions, 6 deletions
diff --git a/src/vnet/ip/ip_types.c b/src/vnet/ip/ip_types.c index 3378da6625d..83228da3330 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,13 +170,14 @@ ip_address_set (ip_address_t * dst, const void *src, u8 version) ip_addr_version (dst) = version; } -void -ip_address_to_46 (const ip_address_t * addr, - ip46_address_t * a, fib_protocol_t * proto) +fib_protocol_t +ip_address_to_46 (const ip_address_t * addr, ip46_address_t * a) { - *proto = (AF_IP4 == ip_addr_version (addr) ? - FIB_PROTOCOL_IP4 : FIB_PROTOCOL_IP6); - switch (*proto) + fib_protocol_t proto; + + proto = (AF_IP4 == ip_addr_version (addr) ? + FIB_PROTOCOL_IP4 : FIB_PROTOCOL_IP6); + switch (proto) { case FIB_PROTOCOL_IP4: ip46_address_set_ip4 (a, &addr->ip.v4); @@ -173,6 +189,27 @@ ip_address_to_46 (const ip_address_t * addr, ASSERT (0); break; } + + return (proto); +} + +void +ip_address_from_46 (const ip46_address_t * nh, + fib_protocol_t fproto, ip_address_t * ip) +{ + switch (fproto) + { + case FIB_PROTOCOL_IP4: + clib_memset (ip, 0, sizeof (*ip)); + ip_address_set (ip, &nh->ip4, AF_IP4); + break; + case FIB_PROTOCOL_IP6: + ip_address_set (ip, &nh->ip6, AF_IP6); + break; + default: + ASSERT (0); + break; + } } static void |