X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fmactime%2Fmactime.c;h=e7dcb0389ccc2448d973465b52814b6e44e66166;hb=cbe25aab3be72154f2c706c39eeba6a77f34450f;hp=9192a26ac23ce2599f81a60f28b364cc9ed6f910;hpb=96453fd2417ebd1d69354a7fb692976129cea80e;p=vpp.git 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 +#include + 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); } } }