diff options
author | Dave Barach <dave@barachs.net> | 2018-09-16 11:03:04 -0400 |
---|---|---|
committer | Florin Coras <florin.coras@gmail.com> | 2018-09-16 23:35:03 +0000 |
commit | 40ea3f59dca497e5f4b5a8440a9c8c2e37396701 (patch) | |
tree | be080d38b01ef4b56ff422efdadc00a4a95b94ed /src/plugins/cdp/cdp_node.c | |
parent | b023d59d4c67a69e559f265aff3d103207b247ce (diff) |
Register cdp_input when enabled for the first time
Graceful handling of unknown tlv types
Change-Id: Idbc9ed524fc8b865c8e12571813cc73548bde480
Signed-off-by: Dave Barach <dave@barachs.net>
Diffstat (limited to 'src/plugins/cdp/cdp_node.c')
-rw-r--r-- | src/plugins/cdp/cdp_node.c | 48 |
1 files changed, 29 insertions, 19 deletions
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; |