X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fl2%2Fl2_fib.c;h=918700b2129f8feab8a9b7803a24dadd5bebd1d2;hb=7f358b3;hp=9e095d236cfd09828c9012a03363220458b4e03a;hpb=57938f63cc6743193c76d4fa89ad3250a5f76b56;p=vpp.git diff --git a/src/vnet/l2/l2_fib.c b/src/vnet/l2/l2_fib.c index 9e095d236cf..918700b2129 100644 --- a/src/vnet/l2/l2_fib.c +++ b/src/vnet/l2/l2_fib.c @@ -407,7 +407,6 @@ l2fib_add (vlib_main_t * vm, u32 bd_id; u32 bd_index; u32 sw_if_index = ~0; - u32 filter_mac = 0; u32 static_mac = 0; u32 bvi_mac = 0; uword *p; @@ -436,29 +435,25 @@ l2fib_add (vlib_main_t * vm, if (unformat (input, "filter")) { - filter_mac = 1; - static_mac = 1; - + l2fib_add_filter_entry (mac, bd_index); + return 0; } - else + + if (!unformat_user (input, unformat_vnet_sw_interface, vnm, &sw_if_index)) { + error = clib_error_return (0, "unknown interface `%U'", + format_unformat_error, input); + goto done; + } - if (!unformat_user - (input, unformat_vnet_sw_interface, vnm, &sw_if_index)) - { - error = clib_error_return (0, "unknown interface `%U'", - format_unformat_error, input); - goto done; - } - if (unformat (input, "static")) - { - static_mac = 1; - } - else if (unformat (input, "bvi")) - { - bvi_mac = 1; - static_mac = 1; - } + if (unformat (input, "static")) + { + static_mac = 1; + } + else if (unformat (input, "bvi")) + { + bvi_mac = 1; + static_mac = 1; } if (vec_len (l2input_main.configs) <= sw_if_index) @@ -468,10 +463,7 @@ l2fib_add (vlib_main_t * vm, goto done; } - if (filter_mac) - l2fib_add_filter_entry (mac, bd_index); - else - l2fib_add_fwd_entry (mac, bd_index, sw_if_index, static_mac, bvi_mac); + l2fib_add_fwd_entry (mac, bd_index, sw_if_index, static_mac, bvi_mac); done: return error; @@ -970,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; - unix_shared_memory_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++) @@ -1024,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); @@ -1045,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; @@ -1086,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++; @@ -1109,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); @@ -1128,9 +1122,6 @@ l2fib_scan (vlib_main_t * vm, f64 start_time, u8 event_only) return delta_t + accum_t; } -/* Maximum f64 value */ -#define TIME_MAX (1.7976931348623157e+308) - static uword l2fib_mac_age_scanner_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f) @@ -1139,7 +1130,7 @@ l2fib_mac_age_scanner_process (vlib_main_t * vm, vlib_node_runtime_t * rt, l2fib_main_t *fm = &l2fib_main; l2learn_main_t *lm = &l2learn_main; bool enabled = 0; - f64 start_time, next_age_scan_time = TIME_MAX; + f64 start_time, next_age_scan_time = CLIB_TIME_MAX; while (1) { @@ -1198,7 +1189,7 @@ l2fib_mac_age_scanner_process (vlib_main_t * vm, vlib_node_runtime_t * rt, if (enabled) next_age_scan_time = start_time + L2FIB_AGE_SCAN_INTERVAL; else - next_age_scan_time = TIME_MAX; + next_age_scan_time = CLIB_TIME_MAX; } } return 0;