ipip: Multi-point interface
[vpp.git] / src / vnet / adj / adj_midchain.c
index f8a3949..33da0ed 100644 (file)
@@ -69,22 +69,13 @@ adj_midchain_tx_inline (vlib_main_t * vm,
 
        while (n_left_from >= 8 && n_left_to_next > 4)
        {
+           const ip_adjacency_t *adj0, *adj1, *adj2, *adj3;
+           const dpo_id_t *dpo0, *dpo1, *dpo2, *dpo3;
+           vlib_buffer_t * b0, *b1, *b2, *b3;
            u32 bi0, adj_index0, next0;
-           const ip_adjacency_t * adj0;
-           const dpo_id_t *dpo0;
-           vlib_buffer_t * b0;
            u32 bi1, adj_index1, next1;
-           const ip_adjacency_t * adj1;
-           const dpo_id_t *dpo1;
-           vlib_buffer_t * b1;
            u32 bi2, adj_index2, next2;
-           const ip_adjacency_t * adj2;
-           const dpo_id_t *dpo2;
-           vlib_buffer_t * b2;
            u32 bi3, adj_index3, next3;
-           const ip_adjacency_t * adj3;
-           const dpo_id_t *dpo3;
-           vlib_buffer_t * b3;
 
            /* Prefetch next iteration. */
            {
@@ -522,16 +513,11 @@ adj_nbr_midchain_update_rewrite (adj_index_t adj_index,
      * one time only update. since we don't support changing the tunnel
      * src,dst, this is all we need.
      */
-    ASSERT((adj->lookup_next_index == IP_LOOKUP_NEXT_ARP) ||
-           (adj->lookup_next_index == IP_LOOKUP_NEXT_GLEAN) ||
-           (adj->lookup_next_index == IP_LOOKUP_NEXT_BCAST));
-
-    /*
-     * tunnels can always provide a rewrite.
-     */
-    ASSERT(NULL != rewrite);
-
-    adj_midchain_setup(adj_index, fixup, fixup_data, flags);
+    if (adj->lookup_next_index != IP_LOOKUP_NEXT_MIDCHAIN ||
+        adj->lookup_next_index != IP_LOOKUP_NEXT_MCAST_MIDCHAIN)
+    {
+        adj_midchain_setup(adj_index, fixup, fixup_data, flags);
+    }
 
     /*
      * update the rewrite with the workers paused.
@@ -704,6 +690,8 @@ format_adj_midchain (u8* s, va_list *ap)
     ip_adjacency_t * adj = adj_get(index);
 
     s = format (s, "%U", format_vnet_link, adj->ia_link);
+    if (adj->rewrite_header.flags & VNET_REWRITE_HAS_FEATURES)
+        s = format(s, " [features]");
     s = format (s, " via %U",
                format_ip46_address, &adj->sub_type.nbr.next_hop,
                adj_proto_to_46(adj->ia_nh_proto));