diff options
Diffstat (limited to 'vnet/vnet/lisp-cp/lisp_cp_dpo.c')
-rw-r--r-- | vnet/vnet/lisp-cp/lisp_cp_dpo.c | 100 |
1 files changed, 62 insertions, 38 deletions
diff --git a/vnet/vnet/lisp-cp/lisp_cp_dpo.c b/vnet/vnet/lisp-cp/lisp_cp_dpo.c index 0bb8098d6fc..185b07a2c1b 100644 --- a/vnet/vnet/lisp-cp/lisp_cp_dpo.c +++ b/vnet/vnet/lisp-cp/lisp_cp_dpo.c @@ -17,40 +17,44 @@ #include <vnet/lisp-gpe/lisp_gpe.h> #include <vnet/lisp-cp/control.h> -index_t -lisp_cp_dpo_get (fib_protocol_t proto) +/** + * The static array of LISP punt DPOs + */ +static dpo_id_t lisp_cp_dpos[DPO_PROTO_NUM]; + +const dpo_id_t * +lisp_cp_dpo_get (dpo_proto_t proto) { - /* - * there are only two instances of this DPO type. - * we can use the protocol as the index - */ - return (proto); + /* + * there are only two instances of this DPO type. + * we can use the protocol as the index + */ + return (&lisp_cp_dpos[proto]); } -static u8* -format_lisp_cp_dpo (u8 *s, va_list *args) +static u8 * +format_lisp_cp_dpo (u8 * s, va_list * args) { - index_t index = va_arg (*args, index_t); - CLIB_UNUSED(u32 indent) = va_arg (*args, u32); + index_t index = va_arg (*args, index_t); + CLIB_UNUSED (u32 indent) = va_arg (*args, u32); - return (format(s, "lisp-cp-punt-%U", - format_fib_protocol, index)); + return (format (s, "lisp-cp-punt-%U", format_dpo_proto, index)); } static void -lisp_cp_dpo_lock (dpo_id_t *dpo) +lisp_cp_dpo_lock (dpo_id_t * dpo) { } static void -lisp_cp_dpo_unlock (dpo_id_t *dpo) +lisp_cp_dpo_unlock (dpo_id_t * dpo) { } const static dpo_vft_t lisp_cp_vft = { - .dv_lock = lisp_cp_dpo_lock, - .dv_unlock = lisp_cp_dpo_unlock, - .dv_format = format_lisp_cp_dpo, + .dv_lock = lisp_cp_dpo_lock, + .dv_unlock = lisp_cp_dpo_unlock, + .dv_format = format_lisp_cp_dpo, }; /** @@ -60,34 +64,54 @@ const static dpo_vft_t lisp_cp_vft = { * this means that these graph nodes are ones from which a LISP-CP is the * parent object in the DPO-graph. */ -const static char* const lisp_cp_ip4_nodes[] = -{ - "lisp-cp-lookup-ip4", - NULL, +const static char *const lisp_cp_ip4_nodes[] = { + "lisp-cp-lookup-ip4", + NULL, }; -const static char* const lisp_cp_ip6_nodes[] = -{ - "lisp-cp-lookup-ip6", - NULL, + +const static char *const lisp_cp_ip6_nodes[] = { + "lisp-cp-lookup-ip6", + NULL, }; -const static char* const * const lisp_cp_nodes[DPO_PROTO_NUM] = -{ - [DPO_PROTO_IP4] = lisp_cp_ip4_nodes, - [DPO_PROTO_IP6] = lisp_cp_ip6_nodes, - [DPO_PROTO_MPLS] = NULL, +const static char *const lisp_cp_ethernet_nodes[] = { + "lisp-cp-lookup-l2", + NULL, +}; + + +const static char *const *const lisp_cp_nodes[DPO_PROTO_NUM] = { + [DPO_PROTO_IP4] = lisp_cp_ip4_nodes, + [DPO_PROTO_IP6] = lisp_cp_ip6_nodes, + [DPO_PROTO_ETHERNET] = lisp_cp_ethernet_nodes, + [DPO_PROTO_MPLS] = NULL, }; clib_error_t * lisp_cp_dpo_module_init (vlib_main_t * vm) { - /* - * there are no exit arcs from the LIS-CP VLIB node, so we - * pass NULL as said node array. - */ - dpo_register(DPO_LISP_CP, &lisp_cp_vft, lisp_cp_nodes); + dpo_proto_t dproto; + + /* + * there are no exit arcs from the LIS-CP VLIB node, so we + * pass NULL as said node array. + */ + dpo_register (DPO_LISP_CP, &lisp_cp_vft, lisp_cp_nodes); + + FOR_EACH_DPO_PROTO (dproto) + { + dpo_set (&lisp_cp_dpos[dproto], DPO_LISP_CP, dproto, dproto); + } - return (NULL); + return (NULL); } -VLIB_INIT_FUNCTION(lisp_cp_dpo_module_init); +VLIB_INIT_FUNCTION (lisp_cp_dpo_module_init); + +/* + * fd.io coding-style-patch-verification: ON + * + * Local Variables: + * eval: (c-set-style "gnu") + * End: + */ |