Add IPSec interface FIB index for TX packet
[vpp.git] / src / vnet / ipsec / ipsec_input.c
index 6d5b2dc..ef4113a 100644 (file)
@@ -44,6 +44,7 @@ static char *ipsec_input_error_strings[] = {
 
 typedef struct
 {
+  u32 spd;
   u32 sa_id;
   u32 spi;
   u32 seq;
@@ -65,11 +66,14 @@ format_ipsec_input_trace (u8 * s, va_list * args)
 
   if (t->sa_id != 0)
     {
-      s = format (s, "esp: sa_id %u spi %u seq %u", t->sa_id, t->spi, t->seq);
+      s =
+       format (s, "esp: sa_id %u spd %u spi %u seq %u", t->sa_id, t->spd,
+               t->spi, t->seq);
     }
   else
     {
-      s = format (s, "esp: no sa spi %u seq %u", t->spi, t->seq);
+      s =
+       format (s, "esp: no sa spd %u spi %u seq %u", t->spd, t->spi, t->seq);
     }
   return s;
 }
@@ -170,9 +174,9 @@ ipsec6_input_protect_policy_match (ipsec_spd_t * spd,
 
 static vlib_node_registration_t ipsec4_input_node;
 
-static uword
-ipsec4_input_node_fn (vlib_main_t * vm,
-                     vlib_node_runtime_t * node, vlib_frame_t * from_frame)
+VLIB_NODE_FN (ipsec4_input_node) (vlib_main_t * vm,
+                                 vlib_node_runtime_t * node,
+                                 vlib_frame_t * from_frame)
 {
   u32 n_left_from, *from, next_index, *to_next;
   ipsec_main_t *im = &ipsec_main;
@@ -269,6 +273,7 @@ ipsec4_input_node_fn (vlib_main_t * vm,
                        tr->sa_id = p0->sa_id;
                      tr->spi = clib_host_to_net_u32 (esp0->spi);
                      tr->seq = clib_host_to_net_u32 (esp0->seq);
+                     tr->spd = spd0->id;
                    }
                }
 
@@ -309,6 +314,7 @@ ipsec4_input_node_fn (vlib_main_t * vm,
                        tr->sa_id = p0->sa_id;
                      tr->spi = clib_host_to_net_u32 (ah0->spi);
                      tr->seq = clib_host_to_net_u32 (ah0->seq_no);
+                     tr->spd = spd0->id;
                    }
                }
            }
@@ -329,7 +335,6 @@ ipsec4_input_node_fn (vlib_main_t * vm,
 
 /* *INDENT-OFF* */
 VLIB_REGISTER_NODE (ipsec4_input_node,static) = {
-  .function = ipsec4_input_node_fn,
   .name = "ipsec4-input",
   .vector_size = sizeof (u32),
   .format_trace = format_ipsec_input_trace,
@@ -347,13 +352,12 @@ VLIB_REGISTER_NODE (ipsec4_input_node,static) = {
 };
 /* *INDENT-ON* */
 
-VLIB_NODE_FUNCTION_MULTIARCH (ipsec4_input_node, ipsec4_input_node_fn);
-
 static vlib_node_registration_t ipsec6_input_node;
 
-static uword
-ipsec6_input_node_fn (vlib_main_t * vm,
-                     vlib_node_runtime_t * node, vlib_frame_t * from_frame)
+
+VLIB_NODE_FN (ipsec6_input_node) (vlib_main_t * vm,
+                                 vlib_node_runtime_t * node,
+                                 vlib_frame_t * from_frame)
 {
   u32 n_left_from, *from, next_index, *to_next;
   ipsec_main_t *im = &ipsec_main;
@@ -459,6 +463,7 @@ ipsec6_input_node_fn (vlib_main_t * vm,
                    tr->sa_id = p0->sa_id;
                  tr->spi = clib_host_to_net_u32 (esp0->spi);
                  tr->seq = clib_host_to_net_u32 (esp0->seq);
+                 tr->spd = spd0->id;
                }
            }
 
@@ -477,7 +482,6 @@ ipsec6_input_node_fn (vlib_main_t * vm,
 
 /* *INDENT-OFF* */
 VLIB_REGISTER_NODE (ipsec6_input_node,static) = {
-  .function = ipsec6_input_node_fn,
   .name = "ipsec6-input",
   .vector_size = sizeof (u32),
   .format_trace = format_ipsec_input_trace,
@@ -490,7 +494,6 @@ VLIB_REGISTER_NODE (ipsec6_input_node,static) = {
 };
 /* *INDENT-ON* */
 
-VLIB_NODE_FUNCTION_MULTIARCH (ipsec6_input_node, ipsec6_input_node_fn);
 /*
  * fd.io coding-style-patch-verification: ON
  *