LCOV - code coverage report
Current view: top level - vnet/ethernet - p2p_ethernet_api.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 23 29 79.3 %
Date: 2023-10-26 01:39:38 Functions: 5 5 100.0 %

          Line data    Source code
       1             : /*
       2             :  *------------------------------------------------------------------
       3             :  * p2p_ethernet_api.c - p2p ethernet api
       4             :  *
       5             :  * Copyright (c) 2016 Cisco and/or its affiliates.
       6             :  * Licensed under the Apache License, Version 2.0 (the "License");
       7             :  * you may not use this file except in compliance with the License.
       8             :  * You may obtain a copy of the License at:
       9             :  *
      10             :  *     http://www.apache.org/licenses/LICENSE-2.0
      11             :  *
      12             :  * Unless required by applicable law or agreed to in writing, software
      13             :  * distributed under the License is distributed on an "AS IS" BASIS,
      14             :  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      15             :  * See the License for the specific language governing permissions and
      16             :  * limitations under the License.
      17             :  *------------------------------------------------------------------
      18             :  */
      19             : 
      20             : #include <vnet/vnet.h>
      21             : #include <vlibmemory/api.h>
      22             : #include <vnet/ethernet/p2p_ethernet.h>
      23             : 
      24             : #include <vnet/format_fns.h>
      25             : #include <vnet/ethernet/p2p_ethernet.api_enum.h>
      26             : #include <vnet/ethernet/p2p_ethernet.api_types.h>
      27             : 
      28             : #define REPLY_MSG_ID_BASE p2p_main.msg_id_base
      29             : #include <vlibapi/api_helper_macros.h>
      30             : 
      31             : void
      32        1023 : vl_api_p2p_ethernet_add_t_handler (vl_api_p2p_ethernet_add_t * mp)
      33             : {
      34             :   vl_api_p2p_ethernet_add_reply_t *rmp;
      35        1023 :   vlib_main_t *vm = vlib_get_main ();
      36             :   int rv;
      37             : 
      38        1023 :   u32 parent_if_index = htonl (mp->parent_if_index);
      39        1023 :   u32 sub_id = htonl (mp->subif_id);
      40        1023 :   u32 p2pe_if_index = ~0;
      41             :   u8 remote_mac[6];
      42             : 
      43        1023 :   if (!vnet_sw_if_index_is_api_valid (parent_if_index))
      44             :     {
      45           0 :       rv = VNET_API_ERROR_INVALID_SW_IF_INDEX;
      46           0 :       goto bad_sw_if_index;
      47             :     }
      48        1023 :   if (!vnet_sw_if_index_is_api_valid (sub_id))
      49             :     {
      50           0 :       rv = VNET_API_ERROR_INVALID_SW_IF_INDEX_2;
      51           0 :       goto bad_sw_if_index;
      52             :     }
      53             : 
      54        1023 :   clib_memcpy (remote_mac, mp->remote_mac, 6);
      55             :   rv =
      56        1023 :     p2p_ethernet_add_del (vm, parent_if_index, remote_mac, sub_id, 1,
      57             :                           &p2pe_if_index);
      58             : 
      59        1023 :   BAD_SW_IF_INDEX_LABEL;
      60             : 
      61             :   /* *INDENT-OFF* */
      62        1023 :   REPLY_MACRO2(VL_API_P2P_ETHERNET_ADD_REPLY,
      63             :   ({
      64             :     rmp->sw_if_index = htonl(p2pe_if_index);
      65             :   }));
      66             : 
      67             : 
      68             :   /* *INDENT-ON* */
      69             : }
      70             : 
      71             : void
      72          21 : vl_api_p2p_ethernet_del_t_handler (vl_api_p2p_ethernet_del_t * mp)
      73             : {
      74             :   vl_api_p2p_ethernet_del_reply_t *rmp;
      75          21 :   vlib_main_t *vm = vlib_get_main ();
      76             :   int rv;
      77             : 
      78          21 :   u32 parent_if_index = htonl (mp->parent_if_index);
      79             :   u8 remote_mac[6];
      80             : 
      81          21 :   if (!vnet_sw_if_index_is_api_valid (parent_if_index))
      82             :     {
      83           0 :       rv = VNET_API_ERROR_INVALID_SW_IF_INDEX;
      84           0 :       goto bad_sw_if_index;
      85             :     }
      86             : 
      87          21 :   clib_memcpy (remote_mac, mp->remote_mac, 6);
      88          21 :   rv = p2p_ethernet_add_del (vm, parent_if_index, remote_mac, ~0, 0, 0);
      89             : 
      90          21 :   BAD_SW_IF_INDEX_LABEL;
      91          21 :   REPLY_MACRO (VL_API_P2P_ETHERNET_DEL_REPLY);
      92             : }
      93             : 
      94             : #include <vnet/ethernet/p2p_ethernet.api.c>
      95             : static clib_error_t *
      96         575 : p2p_ethernet_api_hookup (vlib_main_t * vm)
      97             : {
      98             :   /*
      99             :    * Set up the (msg_name, crc, message-id) table
     100             :    */
     101         575 :   REPLY_MSG_ID_BASE = setup_message_id_table ();
     102             : 
     103         575 :   return 0;
     104             : }
     105             : 
     106        2879 : VLIB_API_INIT_FUNCTION (p2p_ethernet_api_hookup);
     107             : 
     108             : /*
     109             :  * fd.io coding-style-patch-verification: ON
     110             :  *
     111             :  * Local Variables:
     112             :  * eval: (c-set-style "gnu")
     113             :  * End:
     114             :  */

Generated by: LCOV version 1.14