X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fl2%2Fl2_fib.c;h=99d99c57f730e0c9553bfe505f1ad02be80f537c;hb=e23c99ec0061991cf3904122979ac755fe1b78ca;hp=66bb8e3f3c7b743c9015f0ec07bacc1c5a7cecc4;hpb=e86a8edd3c14fb41ace2a12efd17bc7772bf623f;p=vpp.git diff --git a/src/vnet/l2/l2_fib.c b/src/vnet/l2/l2_fib.c index 66bb8e3f3c7..99d99c57f73 100644 --- 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; - svm_queue_t *q = 0; + vl_api_registration_t *reg = 0; 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++) @@ -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 (q && (q->cursize < q->maxsize)) + if (reg && vl_api_can_send_msg (reg)) { 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 { - if (q) + if (reg) 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); - 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); - /* clear event bit and update mac entry */ + /* clear event bits and update mac entry */ result.fields.lrn_evt = 0; + result.fields.lrn_mov = 0; 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); - 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++; @@ -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) { - if (q && (q->cursize < q->maxsize)) + if (reg && vl_api_can_send_msg (reg)) { mp->n_macs = htonl (evt_idx); - vl_msg_api_send_shmem (q, (u8 *) & mp); + vl_api_send_msg (reg, (u8 *) mp); } 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);