Adj Delegates; don't store raw pointers
[vpp.git] / src / vnet / adj / adj.h
index 32997c9..bcf6c04 100644 (file)
@@ -81,6 +81,10 @@ typedef enum
   /** Multicast Adjacency. */
   IP_LOOKUP_NEXT_MCAST,
 
+  /** Multicast Midchain Adjacency. An Adjacency for sending macst packets
+   *  on a tunnel/virtual interface */
+  IP_LOOKUP_NEXT_MCAST_MIDCHAIN,
+
   IP_LOOKUP_N_NEXT,
 } __attribute__ ((packed)) ip_lookup_next_t;
 
@@ -107,6 +111,7 @@ typedef enum
     [IP_LOOKUP_NEXT_REWRITE] = "ip4-rewrite",                  \
     [IP_LOOKUP_NEXT_MCAST] = "ip4-rewrite-mcast",              \
     [IP_LOOKUP_NEXT_MIDCHAIN] = "ip4-midchain",                        \
+    [IP_LOOKUP_NEXT_MCAST_MIDCHAIN] = "ip4-mcast-midchain",     \
     [IP_LOOKUP_NEXT_ICMP_ERROR] = "ip4-icmp-error",            \
 }
 
@@ -119,6 +124,7 @@ typedef enum
     [IP_LOOKUP_NEXT_REWRITE] = "ip6-rewrite",                  \
     [IP_LOOKUP_NEXT_MCAST] = "ip6-rewrite-mcast",              \
     [IP_LOOKUP_NEXT_MIDCHAIN] = "ip6-midchain",                        \
+    [IP_LOOKUP_NEXT_MCAST_MIDCHAIN] = "ip6-mcast-midchain",     \
     [IP_LOOKUP_NEXT_ICMP_ERROR] = "ip6-icmp-error",            \
     [IP6_LOOKUP_NEXT_HOP_BY_HOP] = "ip6-hop-by-hop",           \
     [IP6_LOOKUP_NEXT_ADD_HOP_BY_HOP] = "ip6-add-hop-by-hop",   \
@@ -135,7 +141,8 @@ struct ip_adjacency_t_;
  */
 typedef void (*adj_midchain_fixup_t) (vlib_main_t * vm,
                                      struct ip_adjacency_t_ * adj,
-                                     vlib_buffer_t * b0);
+                                     vlib_buffer_t * b0,
+                                      const void *data);
 
 /**
  * @brief Flags on an IP adjacency
@@ -236,6 +243,10 @@ typedef struct ip_adjacency_t_
        * A function to perform the post-rewrite fixup
        */
       adj_midchain_fixup_t fixup_func;
+      /**
+       * Fixup data passed back to the client in the fixup function
+       */
+      const void *fixup_data;
     } midchain;
     /**
      * IP_LOOKUP_NEXT_GLEAN
@@ -333,6 +344,12 @@ extern const u8* adj_get_rewrite (adj_index_t ai);
  */
 extern void adj_feature_update (u32 sw_if_index, u8 arc_index, u8 is_enable);
 
+/**
+ * @brief Notify the adjacency subsystem that the MTU settings for
+ * an HW interface have changed
+ */
+extern void adj_mtu_update (u32 hw_if_index);
+
 /**
  * @brief
  * The global adjacnecy pool. Exposed for fast/inline data-plane access