Code Review
/
vpp.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
review
|
tree
raw
|
inline
| side by side
Improve l2_macs_events API to provide MAC move information
[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
4a78447
..
99d99c5
100644
(file)
--- a/
src/vnet/l2/l2_fib.c
+++ b/
src/vnet/l2/l2_fib.c
@@
-962,12
+962,12
@@
l2fib_scan (vlib_main_t * vm, f64 start_time, u8 event_only)
u32 client = lm->client_pid;
u32 cl_idx = lm->client_index;
vl_api_l2_macs_event_t *mp = 0;
u32 client = lm->client_pid;
u32 cl_idx = lm->client_index;
vl_api_l2_macs_event_t *mp = 0;
-
unix_shared_memory_queue_t *q
= 0;
+
vl_api_registration_t *reg
= 0;
if (client)
{
mp = allocate_mac_evt_buf (client, cl_idx);
if (client)
{
mp = allocate_mac_evt_buf (client, cl_idx);
-
q = vl_api_client_index_to_input_queue
(lm->client_index);
+
reg = vl_api_client_index_to_registration
(lm->client_index);
}
for (i = 0; i < h->nbuckets; i++)
}
for (i = 0; i < h->nbuckets; i++)
@@
-1016,15
+1016,15
@@
l2fib_scan (vlib_main_t * vm, f64 start_time, u8 event_only)
if (PREDICT_FALSE (evt_idx >= fm->max_macs_in_event))
{
/* event message full, send it and start a new one */
if (PREDICT_FALSE (evt_idx >= fm->max_macs_in_event))
{
/* event message full, send it and start a new one */
- if (
q && (q->cursize < q->maxsize
))
+ if (
reg && vl_api_can_send_msg (reg
))
{
mp->n_macs = htonl (evt_idx);
{
mp->n_macs = htonl (evt_idx);
- vl_
msg_api_send_shmem (q, (u8 *) &
mp);
+ vl_
api_send_msg (reg, (u8 *)
mp);
mp = allocate_mac_evt_buf (client, cl_idx);
}
else
{
mp = allocate_mac_evt_buf (client, cl_idx);
}
else
{
- if (
q
)
+ if (
reg
)
clib_warning ("MAC event to pid %d queue stuffed!"
" %d MAC entries lost", client,
evt_idx);
clib_warning ("MAC event to pid %d queue stuffed!"
" %d MAC entries lost", client,
evt_idx);
@@
-1037,11
+1037,13
@@
l2fib_scan (vlib_main_t * vm, f64 start_time, u8 event_only)
/* copy mac entry to event msg */
clib_memcpy (mp->mac[evt_idx].mac_addr, key.fields.mac,
6);
/* copy mac entry to event msg */
clib_memcpy (mp->mac[evt_idx].mac_addr, key.fields.mac,
6);
- mp->mac[evt_idx].is_del = 0;
+ mp->mac[evt_idx].action = result.fields.lrn_mov ?
+ MAC_EVENT_ACTION_MOVE : MAC_EVENT_ACTION_ADD;
mp->mac[evt_idx].sw_if_index =
htonl (result.fields.sw_if_index);
mp->mac[evt_idx].sw_if_index =
htonl (result.fields.sw_if_index);
- /* clear event bit and update mac entry */
+ /* clear event bit
s
and update mac entry */
result.fields.lrn_evt = 0;
result.fields.lrn_evt = 0;
+ result.fields.lrn_mov = 0;
BVT (clib_bihash_kv) kv;
kv.key = key.raw;
kv.value = result.raw;
BVT (clib_bihash_kv) kv;
kv.key = key.raw;
kv.value = result.raw;
@@
-1078,7
+1080,7
@@
l2fib_scan (vlib_main_t * vm, f64 start_time, u8 event_only)
{
/* copy mac entry to event msg */
clib_memcpy (mp->mac[evt_idx].mac_addr, key.fields.mac, 6);
{
/* copy mac entry to event msg */
clib_memcpy (mp->mac[evt_idx].mac_addr, key.fields.mac, 6);
- mp->mac[evt_idx].
is_del = 1
;
+ mp->mac[evt_idx].
action = MAC_EVENT_ACTION_DELETE
;
mp->mac[evt_idx].sw_if_index =
htonl (result.fields.sw_if_index);
evt_idx++;
mp->mac[evt_idx].sw_if_index =
htonl (result.fields.sw_if_index);
evt_idx++;
@@
-1101,14
+1103,14
@@
l2fib_scan (vlib_main_t * vm, f64 start_time, u8 event_only)
/* send any outstanding mac event message else free message buffer */
if (evt_idx)
{
/* send any outstanding mac event message else free message buffer */
if (evt_idx)
{
- if (
q && (q->cursize < q->maxsize
))
+ if (
reg && vl_api_can_send_msg (reg
))
{
mp->n_macs = htonl (evt_idx);
{
mp->n_macs = htonl (evt_idx);
- vl_
msg_api_send_shmem (q, (u8 *) &
mp);
+ vl_
api_send_msg (reg, (u8 *)
mp);
}
else
{
}
else
{
- if (
q
)
+ if (
reg
)
clib_warning ("MAC event to pid %d queue stuffed!"
" %d MAC entries lost", client, evt_idx);
vl_msg_api_free (mp);
clib_warning ("MAC event to pid %d queue stuffed!"
" %d MAC entries lost", client, evt_idx);
vl_msg_api_free (mp);