MPLS Mcast
[vpp.git] / src / vnet / adj / adj.h
index af7730f..ed5eb1f 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",   \
@@ -255,6 +261,15 @@ typedef struct ip_adjacency_t_
 
   /* Rewrite in second/third cache lines */
   vnet_declare_rewrite (VLIB_BUFFER_PRE_DATA_SIZE);
+
+  /**
+   * more control plane members that do not fit on the first cacheline
+   */
+  /**
+   * A sorted vector of delegates
+   */
+  struct adj_delegate_t_ *ia_delegates;
+
 } ip_adjacency_t;
 
 STATIC_ASSERT ((STRUCT_OFFSET_OF (ip_adjacency_t, cacheline0) == 0),
@@ -307,6 +322,12 @@ extern vnet_link_t adj_get_link_type (adj_index_t ai);
  */
 extern u32 adj_get_sw_if_index (adj_index_t ai);
 
+/**
+ * @brief Return true if the adjacency is 'UP', i.e. can be used for forwarding.
+ * 0 is down, !0 is up.
+ */
+extern int adj_is_up (adj_index_t ai);
+
 /**
  * @brief Return the link type of the adjacency
  */