LCOV - code coverage report
Current view: top level - plugins/lisp/lisp-cp - lisp_cp_dpo.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 12 16 75.0 %
Date: 2023-10-26 01:39:38 Functions: 6 7 85.7 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2016 Cisco and/or its affiliates.
       3             :  * Licensed under the Apache License, Version 2.0 (the "License");
       4             :  * you may not use this file except in compliance with the License.
       5             :  * You may obtain a copy of the License at:
       6             :  *
       7             :  *     http://www.apache.org/licenses/LICENSE-2.0
       8             :  *
       9             :  * Unless required by applicable law or agreed to in writing, software
      10             :  * distributed under the License is distributed on an "AS IS" BASIS,
      11             :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      12             :  * See the License for the specific language governing permissions and
      13             :  * limitations under the License.
      14             :  */
      15             : 
      16             : #include <vnet/dpo/dpo.h>
      17             : #include <lisp/lisp-gpe/lisp_gpe.h>
      18             : #include <lisp/lisp-cp/control.h>
      19             : 
      20             : /**
      21             :  * The static array of LISP punt DPOs
      22             :  */
      23             : static dpo_id_t lisp_cp_dpos[DPO_PROTO_NUM];
      24             : 
      25             : const dpo_id_t *
      26        1152 : lisp_cp_dpo_get (dpo_proto_t proto)
      27             : {
      28             :   /*
      29             :    * there are only two instances of this DPO type.
      30             :    * we can use the protocol as the index
      31             :    */
      32        1152 :   return (&lisp_cp_dpos[proto]);
      33             : }
      34             : 
      35             : static u8 *
      36           0 : format_lisp_cp_dpo (u8 * s, va_list * args)
      37             : {
      38           0 :   index_t index = va_arg (*args, index_t);
      39           0 :   CLIB_UNUSED (u32 indent) = va_arg (*args, u32);
      40             : 
      41           0 :   return (format (s, "lisp-cp-punt-%U", format_dpo_proto, index));
      42             : }
      43             : 
      44             : static void
      45        4610 : lisp_cp_dpo_lock (dpo_id_t * dpo)
      46             : {
      47        4610 : }
      48             : 
      49             : static void
      50         579 : lisp_cp_dpo_unlock (dpo_id_t * dpo)
      51             : {
      52         579 : }
      53             : 
      54             : const static dpo_vft_t lisp_cp_vft = {
      55             :   .dv_lock = lisp_cp_dpo_lock,
      56             :   .dv_unlock = lisp_cp_dpo_unlock,
      57             :   .dv_format = format_lisp_cp_dpo,
      58             : };
      59             : 
      60             : /**
      61             :  * @brief The per-protocol VLIB graph nodes that are assigned to a LISP-CP
      62             :  *        object.
      63             :  *
      64             :  * this means that these graph nodes are ones from which a LISP-CP is the
      65             :  * parent object in the DPO-graph.
      66             :  */
      67             : const static char *const lisp_cp_ip4_nodes[] = {
      68             :   "lisp-cp-lookup-ip4",
      69             :   NULL,
      70             : };
      71             : 
      72             : const static char *const lisp_cp_ip6_nodes[] = {
      73             :   "lisp-cp-lookup-ip6",
      74             :   NULL,
      75             : };
      76             : 
      77             : const static char *const lisp_cp_ethernet_nodes[] = {
      78             :   "lisp-cp-lookup-l2",
      79             :   NULL,
      80             : };
      81             : 
      82             : const static char *const lisp_cp_nsh_nodes[] = {
      83             :   "lisp-cp-lookup-nsh",
      84             :   NULL,
      85             : };
      86             : 
      87             : const static char *const *const lisp_cp_nodes[DPO_PROTO_NUM] = {
      88             :   [DPO_PROTO_IP4] = lisp_cp_ip4_nodes,
      89             :   [DPO_PROTO_IP6] = lisp_cp_ip6_nodes,
      90             :   [DPO_PROTO_ETHERNET] = lisp_cp_ethernet_nodes,
      91             :   [DPO_PROTO_MPLS] = NULL,
      92             :   [DPO_PROTO_NSH] = lisp_cp_nsh_nodes,
      93             : };
      94             : 
      95             : clib_error_t *
      96         575 : lisp_cp_dpo_module_init (vlib_main_t * vm)
      97             : {
      98             :   dpo_proto_t dproto;
      99             : 
     100             :   /*
     101             :    * there are no exit arcs from the LIS-CP VLIB node, so we
     102             :    * pass NULL as said node array.
     103             :    */
     104         575 :   dpo_register (DPO_LISP_CP, &lisp_cp_vft, lisp_cp_nodes);
     105             : 
     106        4025 :   FOR_EACH_DPO_PROTO (dproto)
     107             :   {
     108        3450 :     dpo_set (&lisp_cp_dpos[dproto], DPO_LISP_CP, dproto, dproto);
     109             :   }
     110             : 
     111         575 :   return (NULL);
     112             : }
     113             : 
     114        1151 : VLIB_INIT_FUNCTION (lisp_cp_dpo_module_init);
     115             : 
     116             : /*
     117             :  * fd.io coding-style-patch-verification: ON
     118             :  *
     119             :  * Local Variables:
     120             :  * eval: (c-set-style "gnu")
     121             :  * End:
     122             :  */

Generated by: LCOV version 1.14