- /* change learn limit and flush all learned MACs */
- if (learn_limit && (learn_limit < L2LEARN_DEFAULT_LIMIT))
- lm->global_learn_limit = learn_limit;
- else
+ lm->client_pid = pid;
+ lm->client_index = mp->client_index;
+ l2fib_flush_all_mac (vlib_get_main ());
+ }
+ else if (lm->client_pid != pid)
+ {
+ rv = VNET_API_ERROR_L2_MACS_EVENT_CLINET_PRESENT;
+ goto exit;
+ }
+ }
+ else if (lm->client_pid)
+ {
+ lm->client_pid = 0;
+ lm->client_index = 0;
+ }
+
+exit:
+ REPLY_MACRO (VL_API_WANT_L2_MACS_EVENTS2_REPLY);
+}
+
+static void
+vl_api_want_l2_macs_events_t_handler (vl_api_want_l2_macs_events_t *mp)
+{
+ int rv = 0;
+ vl_api_want_l2_macs_events_reply_t *rmp;
+ l2learn_main_t *lm = &l2learn_main;
+ l2fib_main_t *fm = &l2fib_main;
+ u32 pid = ntohl (mp->pid);
+ u32 learn_limit = ntohl (mp->learn_limit);
+
+ if (mp->enable_disable)
+ {
+ if ((lm->client_pid == 0) || (lm->client_pid == pid))
+ {
+ if ((mp->max_macs_in_event == 0) || (mp->scan_delay == 0) ||
+ (learn_limit == 0) || (learn_limit > L2LEARN_DEFAULT_LIMIT))