Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
vppinfra: bihash walk cb typedef and continue/stop controls
[vpp.git]
/
src
/
vnet
/
l2
/
l2_fib.c
diff --git
a/src/vnet/l2/l2_fib.c
b/src/vnet/l2/l2_fib.c
index
48be42e
..
3e71f77
100644
(file)
--- a/
src/vnet/l2/l2_fib.c
+++ b/
src/vnet/l2/l2_fib.c
@@
-83,7
+83,7
@@
incr_mac_address (u8 * mac)
tmp += 1 << 16; /* skip unused (least significant) octets */
tmp = clib_host_to_net_u64 (tmp);
tmp += 1 << 16; /* skip unused (least significant) octets */
tmp = clib_host_to_net_u64 (tmp);
- clib_memcpy (mac, &tmp, 6);
+ clib_memcpy
_fast
(mac, &tmp, 6);
}
/** Format sw_if_index. If the value is ~0, use the text "N/A" */
}
/** Format sw_if_index. If the value is ~0, use the text "N/A" */
@@
-95,12
+95,13
@@
format_vnet_sw_if_index_name_with_NA (u8 * s, va_list * args)
if (sw_if_index == ~0)
return format (s, "N/A");
if (sw_if_index == ~0)
return format (s, "N/A");
- vnet_sw_interface_t *swif = vnet_get_sw_interface_safe (vnm, sw_if_index);
+ vnet_sw_interface_t *swif =
+ vnet_get_sw_interface_or_null (vnm, sw_if_index);
if (!swif)
return format (s, "Stale");
return format (s, "%U", format_vnet_sw_interface_name, vnm,
if (!swif)
return format (s, "Stale");
return format (s, "%U", format_vnet_sw_interface_name, vnm,
- vnet_get_sw_interface_
safe
(vnm, sw_if_index));
+ vnet_get_sw_interface_
or_null
(vnm, sw_if_index));
}
typedef struct l2fib_dump_walk_ctx_t_
}
typedef struct l2fib_dump_walk_ctx_t_
@@
-110,7
+111,7
@@
typedef struct l2fib_dump_walk_ctx_t_
l2fib_entry_result_t *l2fe_res;
} l2fib_dump_walk_ctx_t;
l2fib_entry_result_t *l2fe_res;
} l2fib_dump_walk_ctx_t;
-static
void
+static
int
l2fib_dump_walk_cb (BVT (clib_bihash_kv) * kvp, void *arg)
{
l2fib_dump_walk_ctx_t *ctx = arg;
l2fib_dump_walk_cb (BVT (clib_bihash_kv) * kvp, void *arg)
{
l2fib_dump_walk_ctx_t *ctx = arg;
@@
-125,6
+126,8
@@
l2fib_dump_walk_cb (BVT (clib_bihash_kv) * kvp, void *arg)
vec_add1 (ctx->l2fe_key, key);
vec_add1 (ctx->l2fe_res, result);
}
vec_add1 (ctx->l2fe_key, key);
vec_add1 (ctx->l2fe_res, result);
}
+
+ return (BIHASH_WALK_CONTINUE);
}
void
}
void
@@
-157,7
+160,7
@@
typedef struct l2fib_show_walk_ctx_t_
u8 now;
} l2fib_show_walk_ctx_t;
u8 now;
} l2fib_show_walk_ctx_t;
-static
void
+static
int
l2fib_show_walk_cb (BVT (clib_bihash_kv) * kvp, void *arg)
{
l2fib_show_walk_ctx_t *ctx = arg;
l2fib_show_walk_cb (BVT (clib_bihash_kv) * kvp, void *arg)
{
l2fib_show_walk_ctx_t *ctx = arg;
@@
-185,10
+188,10
@@
l2fib_show_walk_cb (BVT (clib_bihash_kv) * kvp, void *arg)
u8 *s = NULL;
if (ctx->learn && l2fib_entry_result_is_set_AGE_NOT (&result))
u8 *s = NULL;
if (ctx->learn && l2fib_entry_result_is_set_AGE_NOT (&result))
- return
;
/* skip provisioned macs */
+ return
(BIHASH_WALK_CONTINUE);
/* skip provisioned macs */
if (ctx->add && !l2fib_entry_result_is_set_AGE_NOT (&result))
if (ctx->add && !l2fib_entry_result_is_set_AGE_NOT (&result))
- return
;
/* skip learned macs */
+ return
(BIHASH_WALK_CONTINUE);
/* skip learned macs */
bd_config = vec_elt_at_index (l2input_main.bd_configs,
key.fields.bd_index);
bd_config = vec_elt_at_index (l2input_main.bd_configs,
key.fields.bd_index);
@@
-218,6
+221,8
@@
l2fib_show_walk_cb (BVT (clib_bihash_kv) * kvp, void *arg)
ctx->vnm, result.fields.sw_if_index);
vec_free (s);
}
ctx->vnm, result.fields.sw_if_index);
vec_free (s);
}
+
+ return (BIHASH_WALK_CONTINUE);
}
/** Display the contents of the l2fib. */
}
/** Display the contents of the l2fib. */
@@
-584,7
+589,7
@@
l2fib_test_command_fn (vlib_main_t * vm,
return clib_error_return (0,
"noop: pick at least one of (add,del,check)");
return clib_error_return (0,
"noop: pick at least one of (add,del,check)");
- clib_memcpy (save_mac, mac, 6);
+ clib_memcpy
_fast
(save_mac, mac, 6);
if (is_add)
{
if (is_add)
{
@@
-601,7
+606,7
@@
l2fib_test_command_fn (vlib_main_t * vm,
BVT (clib_bihash_kv) kv;
l2fib_main_t *mp = &l2fib_main;
BVT (clib_bihash_kv) kv;
l2fib_main_t *mp = &l2fib_main;
- clib_memcpy (mac, save_mac, 6);
+ clib_memcpy
_fast
(mac, save_mac, 6);
for (i = 0; i < count; i++)
{
for (i = 0; i < count; i++)
{
@@
-617,7
+622,7
@@
l2fib_test_command_fn (vlib_main_t * vm,
if (is_del)
{
if (is_del)
{
- clib_memcpy (mac, save_mac, 6);
+ clib_memcpy
_fast
(mac, save_mac, 6);
for (i = 0; i < count; i++)
{
for (i = 0; i < count; i++)
{
@@
-1000,6
+1005,10
@@
l2fib_scan (vlib_main_t * vm, f64 start_time, u8 event_only)
vl_api_l2_macs_event_t *mp = 0;
vl_api_registration_t *reg = 0;
vl_api_l2_macs_event_t *mp = 0;
vl_api_registration_t *reg = 0;
+ /* Don't scan the l2 fib if it hasn't been instantiated yet */
+ if (alloc_arena (h) == 0)
+ return 0.0;
+
if (client)
{
mp = allocate_mac_evt_buf (client, cl_idx);
if (client)
{
mp = allocate_mac_evt_buf (client, cl_idx);
@@
-1071,8
+1080,8
@@
l2fib_scan (vlib_main_t * vm, f64 start_time, u8 event_only)
if (l2fib_entry_result_is_set_LRN_EVT (&result))
{
/* copy mac entry to event msg */
if (l2fib_entry_result_is_set_LRN_EVT (&result))
{
/* copy mac entry to event msg */
- clib_memcpy
(mp->mac[evt_idx].mac_addr, key.fields.mac
,
- 6);
+ clib_memcpy
_fast (mp->mac[evt_idx].mac_addr
,
+
key.fields.mac,
6);
mp->mac[evt_idx].action =
l2fib_entry_result_is_set_LRN_MOV (&result) ?
MAC_EVENT_ACTION_MOVE : MAC_EVENT_ACTION_ADD;
mp->mac[evt_idx].action =
l2fib_entry_result_is_set_LRN_MOV (&result) ?
MAC_EVENT_ACTION_MOVE : MAC_EVENT_ACTION_ADD;
@@
-1116,7
+1125,8
@@
l2fib_scan (vlib_main_t * vm, f64 start_time, u8 event_only)
if (client)
{
/* copy mac entry to event msg */
if (client)
{
/* copy mac entry to event msg */
- clib_memcpy (mp->mac[evt_idx].mac_addr, key.fields.mac, 6);
+ clib_memcpy_fast (mp->mac[evt_idx].mac_addr, key.fields.mac,
+ 6);
mp->mac[evt_idx].action = MAC_EVENT_ACTION_DELETE;
mp->mac[evt_idx].sw_if_index =
htonl (result.fields.sw_if_index);
mp->mac[evt_idx].action = MAC_EVENT_ACTION_DELETE;
mp->mac[evt_idx].sw_if_index =
htonl (result.fields.sw_if_index);