diff options
author | Neale Ranns <nranns@cisco.com> | 2019-09-30 10:53:31 +0000 |
---|---|---|
committer | Ole Trøan <otroan@employees.org> | 2019-12-17 10:56:20 +0000 |
commit | cbe25aab3be72154f2c706c39eeba6a77f34450f (patch) | |
tree | 131fb53b5ec973be045ffb9e2eb797af01d112a0 /src/plugins/mactime | |
parent | 96453fd2417ebd1d69354a7fb692976129cea80e (diff) |
ip: Protocol Independent IP Neighbors
Type: feature
- ip-neighbour: generic neighbour handling; APIs, DBs, event handling,
aging
- arp: ARP protocol implementation
- ip6-nd; IPv6 neighbor discovery implementation; separate ND,
MLD, RA
- ip6-link; manage link-local addresses
- l2-arp-term; events separated from IP neighbours, since they are not
the same.
vnet retains just enough education to perform ND/ARP packet
construction.
arp and ip6-nd to be moved to plugins soon.
Change-Id: I88dedd0006b299344f4c7024a0aa5baa6b9a8bbe
Signed-off-by: Neale Ranns <nranns@cisco.com>
Diffstat (limited to 'src/plugins/mactime')
-rw-r--r-- | src/plugins/mactime/builtins.c | 28 | ||||
-rw-r--r-- | src/plugins/mactime/mactime.c | 40 | ||||
-rw-r--r-- | src/plugins/mactime/mactime.h | 4 | ||||
-rw-r--r-- | src/plugins/mactime/test/test_mactime.py | 2 |
4 files changed, 48 insertions, 26 deletions
diff --git a/src/plugins/mactime/builtins.c b/src/plugins/mactime/builtins.c index 906164e6a0d..e90ac661a13 100644 --- a/src/plugins/mactime/builtins.c +++ b/src/plugins/mactime/builtins.c @@ -3,6 +3,17 @@ #include <http_static/http_static.h> #include <mactime/mactime.h> #include <vlib/unix/plugin.h> +#include <vnet/ip-neighbor/ip_neighbor.h> + +static walk_rc_t +mactime_ip_neighbor_copy (index_t ipni, void *ctx) +{ + mactime_main_t *mm = ctx; + + vec_add1 (mm->arp_cache_copy, ipni); + + return (WALK_CONTINUE); +} static int handle_get_mactime (http_builtin_method_type_t reqtype, @@ -17,17 +28,14 @@ handle_get_mactime (http_builtin_method_type_t reqtype, int i, j; f64 now; vlib_counter_t allow, drop; - ethernet_arp_ip4_entry_t *n, *pool; + ip_neighbor_t *n; char *q = "\""; u8 *s = 0; int need_comma = 0; + /* Walk all ip4 neighbours on all interfaces */ vec_reset_length (mm->arp_cache_copy); - pool = ip4_neighbors_pool (); - - /* *INDENT-OFF* */ - pool_foreach (n, pool, ({ vec_add1 (mm->arp_cache_copy, n[0]);})); - /* *INDENT-ON* */ + ip_neighbor_walk (IP46_TYPE_IP4, ~0, mactime_ip_neighbor_copy, mm); now = clib_timebase_now (&mm->timebase); @@ -124,11 +132,13 @@ handle_get_mactime (http_builtin_method_type_t reqtype, for (j = 0; j < vec_len (mm->arp_cache_copy); j++) { - n = mm->arp_cache_copy + j; - if (!memcmp (dp->mac_address, n->mac.bytes, sizeof (n->mac))) + n = ip_neighbor_get (mm->arp_cache_copy[j]); + if (!memcmp (dp->mac_address, + ip_neighbor_get_mac (n), sizeof (mac_address_t))) { s = format (s, ", %sip4_address%s: %s%U%s", q, q, - q, format_ip4_address, &n->ip4_address, q); + q, format_ip46_address, + ip_neighbor_get_ip (n), IP46_TYPE_IP4, q); break; } } diff --git a/src/plugins/mactime/mactime.c b/src/plugins/mactime/mactime.c index 9192a26ac23..e7dcb0389cc 100644 --- a/src/plugins/mactime/mactime.c +++ b/src/plugins/mactime/mactime.c @@ -33,6 +33,8 @@ #define REPLY_MSG_ID_BASE mm->msg_id_base #include <vlibapi/api_helper_macros.h> +#include <vnet/ip-neighbor/ip_neighbor.h> + mactime_main_t mactime_main; /** \file time-base src-mac filter device-input feature arc implementation @@ -425,7 +427,12 @@ mactime_init (vlib_main_t * vm) return 0; } -VLIB_INIT_FUNCTION (mactime_init); +/* *INDENT-OFF* */ +VLIB_INIT_FUNCTION (mactime_init) = +{ + .runs_after = VLIB_INITS("ip_neighbor_init"), +}; +/* *INDENT-ON* */ static clib_error_t * mactime_config (vlib_main_t * vm, unformat_input_t * input) @@ -519,6 +526,16 @@ format_bytes_with_width (u8 * s, va_list * va) return s; } +static walk_rc_t +mactime_ip_neighbor_copy (index_t ipni, void *ctx) +{ + mactime_main_t *mm = ctx; + + vec_add1 (mm->arp_cache_copy, ipni); + + return (WALK_CONTINUE); +} + static clib_error_t * show_mactime_command_fn (vlib_main_t * vm, unformat_input_t * input, vlib_cli_command_t * cmd) @@ -533,17 +550,11 @@ show_mactime_command_fn (vlib_main_t * vm, int i, j; f64 now; vlib_counter_t allow, drop; - ethernet_arp_ip4_entry_t *n, *pool; + ip_neighbor_t *ipn; vec_reset_length (mm->arp_cache_copy); - pool = ip4_neighbors_pool (); - - /* *INDENT-OFF* */ - pool_foreach (n, pool, - ({ - vec_add1 (mm->arp_cache_copy, n[0]); - })); - /* *INDENT-ON* */ + /* Walk all ip4 neighbours on all interfaces */ + ip_neighbor_walk (IP46_TYPE_IP4, ~0, mactime_ip_neighbor_copy, mm); now = clib_timebase_now (&mm->timebase); @@ -660,11 +671,12 @@ show_mactime_command_fn (vlib_main_t * vm, /* This is really only good for small N... */ for (j = 0; j < vec_len (mm->arp_cache_copy); j++) { - n = mm->arp_cache_copy + j; - if (!memcmp (dp->mac_address, n->mac.bytes, sizeof (n->mac))) + ipn = ip_neighbor_get (mm->arp_cache_copy[j]); + if (!memcmp + (dp->mac_address, ipn->ipn_mac.bytes, sizeof (ipn->ipn_mac))) { - vlib_cli_output (vm, "%17s%U", " ", format_ip4_address, - &n->ip4_address); + vlib_cli_output (vm, "%17s%U", " ", format_ip46_address, + ip_neighbor_get_ip (ipn), IP46_TYPE_IP4); } } } diff --git a/src/plugins/mactime/mactime.h b/src/plugins/mactime/mactime.h index 61160f87fd0..b6313ea12bc 100644 --- a/src/plugins/mactime/mactime.h +++ b/src/plugins/mactime/mactime.h @@ -21,7 +21,7 @@ #include <vnet/vnet.h> #include <vnet/ip/ip.h> #include <vnet/ethernet/ethernet.h> -#include <vnet/ethernet/arp.h> +//#include <vnet/ethernet/arp.h> #include <vlib/counter.h> #include <vppinfra/hash.h> @@ -71,7 +71,7 @@ typedef struct int feature_initialized; /* arp cache copy, for "show mactime" */ - ethernet_arp_ip4_entry_t *arp_cache_copy; + index_t *arp_cache_copy; /* convenience */ vlib_main_t *vlib_main; diff --git a/src/plugins/mactime/test/test_mactime.py b/src/plugins/mactime/test/test_mactime.py index eb28002c829..fa9516cbe87 100644 --- a/src/plugins/mactime/test/test_mactime.py +++ b/src/plugins/mactime/test/test_mactime.py @@ -44,7 +44,7 @@ class TestMactime(VppTestCase): "bin mactime_enable_disable sw_if_index 1", "set interface state loop0 up", "clear mactime", - "set ip arp loop0 192.168.1.1 00:d0:2d:5e:86:85", + "set ip neighbor loop0 192.168.1.1 00:d0:2d:5e:86:85", "bin mactime_add_del_range name sallow " "mac 00:d0:2d:5e:86:85 allow-static del", "bin mactime_add_del_range name sallow " |