From 9b3c3af8bee2f7c055a7d89d95fbbc577fb0739d Mon Sep 17 00:00:00 2001
From: Hongjun Ni <hongjun.ni@intel.com>
Date: Sun, 27 Aug 2017 14:58:24 +0800
Subject: NSH Plugin crashes VPP. NSHSFC-34

Change-Id: If7a3c3ebbbdc00a4ad351a056ebaacf9a9c237be
Signed-off-by: Hongjun Ni <hongjun.ni@intel.com>
---
 nsh-plugin/nsh/nsh.h        |  6 ++++++
 nsh-plugin/nsh/nsh_output.c | 24 +++++++++++++++++++++++-
 2 files changed, 29 insertions(+), 1 deletion(-)

(limited to 'nsh-plugin/nsh')

diff --git a/nsh-plugin/nsh/nsh.h b/nsh-plugin/nsh/nsh.h
index ea4e192..8605fc7 100644
--- a/nsh-plugin/nsh/nsh.h
+++ b/nsh-plugin/nsh/nsh.h
@@ -255,4 +255,10 @@ nsh_md2_register_option (u16 class,
                                        nsh_tlv_header_t * opt),
                       u8 * trace (u8 * s,
                                   nsh_tlv_header_t * opt));
+
+typedef struct _nsh_main_dummy
+{
+  u8 output_feature_arc_index;
+} nsh_main_dummy_t;
+
 #endif /* included_nsh_h */
diff --git a/nsh-plugin/nsh/nsh_output.c b/nsh-plugin/nsh/nsh_output.c
index c104ee7..5671463 100644
--- a/nsh-plugin/nsh/nsh_output.c
+++ b/nsh-plugin/nsh/nsh_output.c
@@ -315,6 +315,10 @@ nsh_output_inline (vlib_main_t * vm,
   return from_frame->n_vectors;
 }
 
+typedef enum nsh_midchain_next_t_
+{
+    NSH_MIDCHAIN_NEXT_DROP,
+} nsh_midchain_next_t;
 
 static inline uword
 nsh_eth_output (vlib_main_t * vm,
@@ -354,7 +358,10 @@ VLIB_REGISTER_NODE (nsh_midchain_node) = {
   .name = "nsh-midchain",
   .vector_size = sizeof (u32),
   .format_trace = format_nsh_output_trace,
-  .sibling_of = "nsh-eth-output",
+  .n_next_nodes = 1,
+  .next_nodes = {
+      [NSH_MIDCHAIN_NEXT_DROP] = "error-drop",
+  },
 };
 
 VLIB_NODE_FUNCTION_MULTIARCH (nsh_midchain_node, nsh_midchain)
@@ -366,6 +373,21 @@ VNET_FEATURE_INIT (nsh_interface_output, static) = {
   .runs_before = 0, /* not before any other features */
 };
 
+/* Built-in ip4 tx feature path definition */
+/* *INDENT-OFF* */
+VNET_FEATURE_ARC_INIT (nsh_eth_output, static) =
+{
+  .arc_name  = "nsh-eth-output",
+  .start_nodes = VNET_FEATURES ("nsh-midchain"),
+};
+
+VNET_FEATURE_INIT (nsh_eth_tx_drop, static) =
+{
+  .arc_name = "nsh-eth-output",
+  .node_name = "error-drop",
+  .runs_before = 0,     /* not before any other features */
+};
+/* *INDENT-ON* */
 /**
  * @brief Next index values from the NSH incomplete adj node
  */
-- 
cgit