IP directed broadcast
[vpp.git] / src / vnet / adj / adj.h
index 32997c9..18a2e1d 100644 (file)
@@ -81,6 +81,13 @@ typedef enum
   /** Multicast Adjacency. */
   IP_LOOKUP_NEXT_MCAST,
 
+  /** Broadcasr Adjacency. */
+  IP_LOOKUP_NEXT_BCAST,
+
+  /** 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;
 
@@ -106,7 +113,9 @@ typedef enum
     [IP_LOOKUP_NEXT_GLEAN] = "ip4-glean",                      \
     [IP_LOOKUP_NEXT_REWRITE] = "ip4-rewrite",                  \
     [IP_LOOKUP_NEXT_MCAST] = "ip4-rewrite-mcast",              \
+    [IP_LOOKUP_NEXT_BCAST] = "ip4-rewrite-bcast",               \
     [IP_LOOKUP_NEXT_MIDCHAIN] = "ip4-midchain",                        \
+    [IP_LOOKUP_NEXT_MCAST_MIDCHAIN] = "ip4-mcast-midchain",     \
     [IP_LOOKUP_NEXT_ICMP_ERROR] = "ip4-icmp-error",            \
 }
 
@@ -117,14 +126,21 @@ typedef enum
     [IP_LOOKUP_NEXT_ARP] = "ip6-discover-neighbor",            \
     [IP_LOOKUP_NEXT_GLEAN] = "ip6-glean",                      \
     [IP_LOOKUP_NEXT_REWRITE] = "ip6-rewrite",                  \
+    [IP_LOOKUP_NEXT_BCAST] = "ip6-rewrite-bcast",              \
     [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",   \
     [IP6_LOOKUP_NEXT_POP_HOP_BY_HOP] = "ip6-pop-hop-by-hop",   \
 }
 
+/**
+ * The special broadcast address (to construct a broadcast adjacency
+ */
+extern const ip46_address_t ADJ_BCAST_ADDR;
+
 /**
  * Forward delcartion
  */
@@ -135,7 +151,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 +253,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