X-Git-Url: https://gerrit.fd.io/r/gitweb?a=blobdiff_plain;f=src%2Fvnet%2Fdpo%2Fdpo.h;h=3290a5d239ea258c15b26077446e0e4d29c00811;hb=f051072f8518097cbce1a8a20510c4e43cb7167c;hp=5aa4e2d2165ebf5fed57ed5ea845415160be0bfc;hpb=0f26c5a0138ac86d7ebd197c31a09d8d624c35fe;p=vpp.git diff --git a/src/vnet/dpo/dpo.h b/src/vnet/dpo/dpo.h index 5aa4e2d2165..3290a5d239e 100644 --- a/src/vnet/dpo/dpo.h +++ b/src/vnet/dpo/dpo.h @@ -59,14 +59,11 @@ typedef u32 index_t; */ typedef enum dpo_proto_t_ { -#if CLIB_DEBUG > 0 - DPO_PROTO_IP4 = 1, -#else DPO_PROTO_IP4 = 0, -#endif DPO_PROTO_IP6, - DPO_PROTO_ETHERNET, DPO_PROTO_MPLS, + DPO_PROTO_ETHERNET, + DPO_PROTO_BIER, DPO_PROTO_NSH, } __attribute__((packed)) dpo_proto_t; @@ -79,6 +76,7 @@ typedef enum dpo_proto_t_ [DPO_PROTO_ETHERNET] = "ethernet", \ [DPO_PROTO_MPLS] = "mpls", \ [DPO_PROTO_NSH] = "nsh", \ + [DPO_PROTO_BIER] = "bier", \ } #define FOR_EACH_DPO_PROTO(_proto) \ @@ -116,7 +114,15 @@ typedef enum dpo_type_t_ { DPO_MPLS_LABEL, DPO_MPLS_DISPOSITION, DPO_MFIB_ENTRY, - DPO_INTERFACE, + DPO_INTERFACE_RX, + DPO_INTERFACE_TX, + DPO_DVR, + DPO_L3_PROXY, + DPO_BIER_TABLE, + DPO_BIER_FMASK, + DPO_BIER_IMP, + DPO_BIER_DISP_TABLE, + DPO_BIER_DISP_ENTRY, DPO_LAST, } __attribute__((packed)) dpo_type_t; @@ -141,8 +147,16 @@ typedef enum dpo_type_t_ { [DPO_CLASSIFY] = "dpo-classify", \ [DPO_MPLS_LABEL] = "dpo-mpls-label", \ [DPO_MPLS_DISPOSITION] = "dpo-mpls-diposition", \ - [DPO_MFIB_ENTRY] = "dpo-mfib_entry", \ - [DPO_INTERFACE] = "dpo-interface" \ + [DPO_MFIB_ENTRY] = "dpo-mfib-entry", \ + [DPO_INTERFACE_RX] = "dpo-interface-rx", \ + [DPO_INTERFACE_TX] = "dpo-interface-tx", \ + [DPO_DVR] = "dpo-dvr", \ + [DPO_L3_PROXY] = "dpo-l3-proxy", \ + [DPO_BIER_TABLE] = "bier-table", \ + [DPO_BIER_FMASK] = "bier-fmask", \ + [DPO_BIER_IMP] = "bier-imposition", \ + [DPO_BIER_DISP_ENTRY] = "bier-disp-entry", \ + [DPO_BIER_DISP_TABLE] = "bier-disp-table", \ } /** @@ -272,6 +286,11 @@ extern u8 *format_dpo_type(u8 * s, va_list * args); */ extern u8 *format_dpo_proto(u8 * s, va_list * args); +/** + * @brief format a DPO protocol + */ +extern vnet_link_t dpo_proto_to_link(dpo_proto_t dp); + /** * @brief * Set and stack a DPO. @@ -305,16 +324,26 @@ extern void dpo_stack(dpo_type_t child_type, * @param child_node * The VLIB grpah node index to create an arc from to the parent * - * @parem dpo + * @param dpo * This is the DPO to stack and set. * - * @paren parent_dpo + * @param parent_dpo * The parent DPO to stack onto. */ extern void dpo_stack_from_node(u32 child_node, dpo_id_t *dpo, const dpo_id_t *parent); +/** + * Get a uRPF interface for the DPO + * + * @param dpo + * The DPO from which to get the uRPF interface + * + * @return valid SW interface index or ~0 + */ +extern u32 dpo_get_urpf(const dpo_id_t *dpo); + /** * @brief A lock function registered for a DPO type */ @@ -330,6 +359,18 @@ typedef void (*dpo_unlock_fn_t)(dpo_id_t *dpo); */ typedef void (*dpo_mem_show_t)(void); +/** + * @brief Given a DPO instance return a vector of node indices that + * the type/instance will use. + */ +typedef u32* (*dpo_get_next_node_t)(const dpo_id_t *dpo); + +/** + * @brief Given a DPO instance return an interface that can + * be used in an uRPF check + */ +typedef u32 (*dpo_get_urpf_t)(const dpo_id_t *dpo); + /** * @brief A virtual function table regisitered for a DPO type */ @@ -351,6 +392,17 @@ typedef struct dpo_vft_t_ * A show memory usage function */ dpo_mem_show_t dv_mem_show; + /** + * A function to get the next VLIB node given an instance + * of the DPO. If this is null, then the node's name MUST be + * retreiveable from the nodes names array passed in the register + * function + */ + dpo_get_next_node_t dv_get_next_node; + /** + * Get uRPF interface + */ + dpo_get_urpf_t dv_get_urpf; } dpo_vft_t;