X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fplugins%2Fcdp%2Fcdp_node.c;h=ac7e7642dae98078d10d6a34a9e852d890ec43e7;hb=40ea3f59dca497e5f4b5a8440a9c8c2e37396701;hp=1336c567287b396282d16c56f4f364fce3265dc8;hpb=aaacfbc5b15b0653489ad2e80db48151a4375ece;p=vpp.git diff --git a/src/plugins/cdp/cdp_node.c b/src/plugins/cdp/cdp_node.c index 1336c567287..ac7e7642dae 100644 --- a/src/plugins/cdp/cdp_node.c +++ b/src/plugins/cdp/cdp_node.c @@ -132,25 +132,7 @@ cdp_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f) /* So we can send events to the cdp process */ cm->cdp_process_node_index = cdp_process_node.index; - /* Dynamically register the cdp input node with the snap classifier */ - snap_register_input_protocol (vm, "cdp-input", 0xC /* ieee_oui, Cisco */ , - 0x2000 /* protocol CDP */ , - cdp_input_node.index); - - snap_register_input_protocol (vm, "cdp-input", 0xC /* ieee_oui, Cisco */ , - 0x2004 /* protocol CDP */ , - cdp_input_node.index); - -#if 0 /* retain for reference */ - /* with the hdlc classifier */ - hdlc_register_input_protocol (vm, HDLC_PROTOCOL_cdp, cdp_input_node.index); -#endif - - /* with ethernet input (for SRP) */ - ethernet_register_input_type (vm, ETHERNET_TYPE_CDP /* CDP */ , - cdp_input_node.index); - - /* Start w/ cdp effectively disabled */ + /* Start w/ cdp disabled */ poll_time_remaining = 86400.0; while (1) @@ -166,6 +148,34 @@ cdp_process (vlib_main_t * vm, vlib_node_runtime_t * rt, vlib_frame_t * f) break; case CDP_EVENT_ENABLE: + if (!cm->cdp_protocol_registered) + { + /* + * Dynamically register the cdp input node + * with the snap classifier + */ + snap_register_input_protocol (vm, "cdp-input", + 0xC /* ieee_oui, Cisco */ , + 0x2000 /* protocol CDP */ , + cdp_input_node.index); + + snap_register_input_protocol (vm, "cdp-input", + 0xC /* ieee_oui, Cisco */ , + 0x2004 /* protocol CDP */ , + cdp_input_node.index); +#if 0 + /* + * Keep this code for reference... + * Register with the hdlc classifier + */ + hdlc_register_input_protocol (vm, HDLC_PROTOCOL_cdp, + cdp_input_node.index); +#endif + /* with ethernet input (for SRP) */ + ethernet_register_input_type (vm, ETHERNET_TYPE_CDP /* CDP */ , + cdp_input_node.index); + cm->cdp_protocol_registered = 1; + } poll_time_remaining = 10.0; break;