X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fip%2Fip_neighbor.c;h=ef61dde0e0567251f2035f96db7feb245fc1e177;hb=96453fd2417ebd1d69354a7fb692976129cea80e;hp=7d1998d25b85a1caa2f2a14afdb945aa217c61bc;hpb=b7b929931a07fbb27b43d5cd105f366c3e29807e;p=vpp.git diff --git a/src/vnet/ip/ip_neighbor.c b/src/vnet/ip/ip_neighbor.c index 7d1998d25b8..ef61dde0e05 100644 --- a/src/vnet/ip/ip_neighbor.c +++ b/src/vnet/ip/ip_neighbor.c @@ -1,5 +1,5 @@ /* - * src/vnet/ip/ip_neighboor.c: ip neighbor generic handling + * src/vnet/ip/ip_neighbor.c: ip neighbor generic handling * * Copyright (c) 2018 Cisco and/or its affiliates. * Licensed under the Apache License, Version 2.0 (the "License"); @@ -27,7 +27,7 @@ * - Max processing allowed per run : 20 usec * - Max probe/delete operations per run : 10 * - Scan interrupt delay to resume scan : 1 msec - * - Neighbor stale threashold : 4 x scan-interval + * - Neighbor stale threshold : 4 x scan-interval */ #define IP_NEIGHBOR_DEF_SCAN_INTERVAL (60.0) #define IP_NEIGHBOR_DEF_MAX_PROC_TIME (20e-6) @@ -47,10 +47,27 @@ typedef struct static ip_neighbor_scan_config_t ip_neighbor_scan_conf; +u8 * +format_ip_neighbor_flags (u8 * s, va_list * args) +{ + const ip_neighbor_flags_t flags = va_arg (*args, int); + + if (flags & IP_NEIGHBOR_FLAG_STATIC) + s = format (s, "S"); + + if (flags & IP_NEIGHBOR_FLAG_DYNAMIC) + s = format (s, "D"); + + if (flags & IP_NEIGHBOR_FLAG_NO_FIB_ENTRY) + s = format (s, "N"); + + return s; +} + int ip_neighbor_add (const ip46_address_t * ip, - u8 is_ip6, - const u8 * mac, + ip46_type_t type, + const mac_address_t * mac, u32 sw_if_index, ip_neighbor_flags_t flags, u32 * stats_index) { @@ -63,13 +80,10 @@ ip_neighbor_add (const ip46_address_t * ip, * The expectation is that the FIB will ensure that nothing bad * will come of adding bogus entries. */ - if (is_ip6) + if (IP46_TYPE_IP6 == type) { rv = vnet_set_ip6_ethernet_neighbor (vlib_get_main (), - sw_if_index, &ip->ip6, mac, 6, - (flags & IP_NEIGHBOR_FLAG_STATIC), - (flags & - IP_NEIGHBOR_FLAG_NO_ADJ_FIB)); + sw_if_index, &ip->ip6, mac, flags); fproto = FIB_PROTOCOL_IP6; linkt = VNET_LINK_IP6; } @@ -77,16 +91,12 @@ ip_neighbor_add (const ip46_address_t * ip, { ethernet_arp_ip4_over_ethernet_address_t a = { .ip4 = ip->ip4, + .mac = *mac, }; - clib_memcpy (&a.ethernet, mac, 6); - - rv = vnet_arp_set_ip4_over_ethernet (vnet_get_main (), - sw_if_index, - &a, - (flags & IP_NEIGHBOR_FLAG_STATIC), - (flags & - IP_NEIGHBOR_FLAG_NO_ADJ_FIB)); + rv = + vnet_arp_set_ip4_over_ethernet (vnet_get_main (), sw_if_index, &a, + flags); fproto = FIB_PROTOCOL_IP4; linkt = VNET_LINK_IP4; } @@ -98,11 +108,11 @@ ip_neighbor_add (const ip46_address_t * ip, } int -ip_neighbor_del (const ip46_address_t * ip, u8 is_ip6, u32 sw_if_index) +ip_neighbor_del (const ip46_address_t * ip, ip46_type_t type, u32 sw_if_index) { int rv; - if (is_ip6) + if (IP46_TYPE_IP6 == type) { rv = vnet_unset_ip6_ethernet_neighbor (vlib_get_main (), sw_if_index, &ip->ip6); @@ -180,14 +190,14 @@ ip_neighbor_scan (vlib_main_t * vm, f64 start_time, u32 start_idx, if (!is_ip6) { n4 = pool_elt_at_index (np4, curr_idx); - if (n4->flags & ETHERNET_ARP_IP4_ENTRY_FLAG_STATIC) + if (n4->flags & IP_NEIGHBOR_FLAG_STATIC) goto next_neighbor; update_time = n4->time_last_updated; } else { n6 = pool_elt_at_index (np6, curr_idx); - if (n6->flags & IP6_NEIGHBOR_FLAG_STATIC) + if (n6->flags & IP_NEIGHBOR_FLAG_STATIC) goto next_neighbor; update_time = n6->time_last_updated; } @@ -199,9 +209,11 @@ ip_neighbor_scan (vlib_main_t * vm, f64 start_time, u32 start_idx, /* delete stale neighbor */ if (!is_ip6) { - ethernet_arp_ip4_over_ethernet_address_t delme; - clib_memcpy (&delme.ethernet, n4->ethernet_address, 6); - delme.ip4.as_u32 = n4->ip4_address.as_u32; + ethernet_arp_ip4_over_ethernet_address_t delme = { + .ip4.as_u32 = n4->ip4_address.as_u32, + .mac = n4->mac, + }; + vnet_arp_unset_ip4_over_ethernet (vnm, n4->sw_if_index, &delme); } else @@ -395,11 +407,11 @@ done: /*? * The 'ip scan-neighbor' command can be used to enable and disable - * periodic IP neighbor scan and change various scan parameneters. + * periodic IP neighbor scan and change various scan parameters. * * @note The default parameters used for IP neighbor scan should work fine * under normal conditions. They should not be changed from the default unless - * properly tested to work as desied. + * properly tested to work as desired. * * @cliexpar * Example of enabling IP neighbor scan: