bonding: support custom interface IDs
[vpp.git] / src / vnet / ip / ip4_forward.c
index 1ca4f93..1a1b7e5 100644 (file)
@@ -754,13 +754,13 @@ VNET_FEATURE_INIT (ip4_policer_classify, static) =
 {
   .arc_name = "ip4-unicast",
   .node_name = "ip4-policer-classify",
-  .runs_before = VNET_FEATURES ("ipsec4-input"),
+  .runs_before = VNET_FEATURES ("ipsec4-input-feature"),
 };
 
 VNET_FEATURE_INIT (ip4_ipsec, static) =
 {
   .arc_name = "ip4-unicast",
-  .node_name = "ipsec4-input",
+  .node_name = "ipsec4-input-feature",
   .runs_before = VNET_FEATURES ("vpath-input-ip4"),
 };
 
@@ -842,13 +842,13 @@ VNET_FEATURE_INIT (ip4_outacl, static) =
 {
   .arc_name = "ip4-output",
   .node_name = "ip4-outacl",
-  .runs_before = VNET_FEATURES ("ipsec4-output"),
+  .runs_before = VNET_FEATURES ("ipsec4-output-feature"),
 };
 
 VNET_FEATURE_INIT (ip4_ipsec_output, static) =
 {
   .arc_name = "ip4-output",
-  .node_name = "ipsec4-output",
+  .node_name = "ipsec4-output-feature",
   .runs_before = VNET_FEATURES ("interface-output"),
 };
 
@@ -1854,6 +1854,10 @@ ip4_arp_inline (vlib_main_t * vm,
            vlib_packet_template_get_packet (vm,
                                             &im->ip4_arp_request_packet_template,
                                             &bi0);
+         b0 = vlib_get_buffer (vm, bi0);
+
+         /* copy the persistent fields from the original */
+         clib_memcpy_fast (b0->opaque2, p0->opaque2, sizeof (p0->opaque2));
 
          /* Seems we're out of buffers */
          if (PREDICT_FALSE (!h0))
@@ -1894,7 +1898,6 @@ ip4_arp_inline (vlib_main_t * vm,
          p0->error = node->errors[IP4_ARP_ERROR_REQUEST_SENT];
 
          vlib_buffer_copy_trace_flag (vm, p0, bi0);
-         b0 = vlib_get_buffer (vm, bi0);
          VLIB_BUFFER_TRACE_TRAJECTORY_INIT (b0);
          vnet_buffer (b0)->sw_if_index[VLIB_TX] = sw_if_index0;
 
@@ -2348,7 +2351,7 @@ ip4_rewrite_inline (vlib_main_t * vm,
          adj0->sub_type.midchain.fixup_func
            (vm, adj0, b[0], adj0->sub_type.midchain.fixup_data);
          adj1->sub_type.midchain.fixup_func
-           (vm, adj1, b[1], adj0->sub_type.midchain.fixup_data);
+           (vm, adj1, b[1], adj1->sub_type.midchain.fixup_data);
        }
 
       if (is_mcast)
@@ -2360,7 +2363,7 @@ ip4_rewrite_inline (vlib_main_t * vm,
                                      adj0->rewrite_header.dst_mcast_offset,
                                      &ip0->dst_address.as_u32, (u8 *) ip0);
          vnet_ip_mcast_fixup_header (IP4_MCAST_ADDR_MASK,
-                                     adj0->rewrite_header.dst_mcast_offset,
+                                     adj1->rewrite_header.dst_mcast_offset,
                                      &ip1->dst_address.as_u32, (u8 *) ip1);
        }