summaryrefslogtreecommitdiffstats
path: root/src/plugins/cdp/cdp_node.c
diff options
context:
space:
mode:
authorDave Barach <dave@barachs.net>2018-09-16 11:03:04 -0400
committerFlorin Coras <florin.coras@gmail.com>2018-09-16 23:35:03 +0000
commit40ea3f59dca497e5f4b5a8440a9c8c2e37396701 (patch)
treebe080d38b01ef4b56ff422efdadc00a4a95b94ed /src/plugins/cdp/cdp_node.c
parentb023d59d4c67a69e559f265aff3d103207b247ce (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.c48
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;