MPLS Mcast
[vpp.git] / src / vnet / dpo / lookup_dpo.h
index ff28338..7dfd038 100644 (file)
@@ -46,6 +46,19 @@ typedef enum lookup_table_t_ {
     [LOOKUP_INPUT_DST_ADDR] = "table-configured",         \
 }
 
+/**
+ * Switch to use the packet's source or destination address for lookup
+ */
+typedef enum lookup_cast_t_ {
+    LOOKUP_UNICAST,
+    LOOKUP_MULTICAST,
+} __attribute__ ((packed)) lookup_cast_t;
+
+#define LOOKUP_CASTS {                 \
+    [LOOKUP_UNICAST]   = "unicast",    \
+    [LOOKUP_MULTICAST] = "multicast",  \
+}
+
 /**
  * A representation of an MPLS label for imposition in the data-path
  */
@@ -73,6 +86,11 @@ typedef struct lookup_dpo_t
      */
     lookup_table_t lkd_table;
 
+    /**
+     * Unicast of rmulticast FIB lookup
+     */
+    lookup_cast_t lkd_cast;
+
     /**
      * Number of locks
      */
@@ -81,11 +99,13 @@ typedef struct lookup_dpo_t
 
 extern void lookup_dpo_add_or_lock_w_fib_index(fib_node_index_t fib_index,
                                                dpo_proto_t proto,
+                                               lookup_cast_t cast,
                                                lookup_input_t input,
                                                lookup_table_t table,
                                                dpo_id_t *dpo);
 extern void lookup_dpo_add_or_lock_w_table_id(u32 table_id,
                                               dpo_proto_t proto,
+                                              lookup_cast_t cast,
                                               lookup_input_t input,
                                               lookup_table_t table,
                                               dpo_id_t *dpo);