LCOV - code coverage report
Current view: top level - vnet/teib - teib_cli.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 3 63 4.8 %
Date: 2023-07-05 22:20:52 Functions: 6 10 60.0 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2019 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/teib/teib.h>
      17             : 
      18             : static clib_error_t *
      19           0 : teib_add (vlib_main_t * vm,
      20             :           unformat_input_t * input, vlib_cli_command_t * cmd)
      21             : {
      22           0 :   unformat_input_t _line_input, *line_input = &_line_input;
      23           0 :   ip_address_t peer = ip_address_initializer;
      24           0 :   ip_address_t nh = ip_address_initializer;
      25             :   u32 sw_if_index, nh_table_id;
      26           0 :   clib_error_t *error = NULL;
      27             :   int rv;
      28             : 
      29           0 :   sw_if_index = ~0;
      30           0 :   nh_table_id = 0;
      31             : 
      32             :   /* Get a line of input. */
      33           0 :   if (!unformat_user (input, unformat_line_input, line_input))
      34           0 :     return 0;
      35             : 
      36           0 :   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
      37             :     {
      38           0 :       if (unformat (line_input, "%U", unformat_vnet_sw_interface,
      39             :                     vnet_get_main (), &sw_if_index))
      40             :         ;
      41           0 :       else if (unformat (line_input, "peer %U", unformat_ip_address, &peer))
      42             :         ;
      43           0 :       else if (unformat (line_input, "nh-table-id %d", &nh_table_id))
      44             :         ;
      45           0 :       else if (unformat (line_input, "nh %U", unformat_ip_address, &nh))
      46             :         ;
      47             :       else
      48             :         {
      49           0 :           error = clib_error_return (0, "unknown input `%U'",
      50             :                                      format_unformat_error, line_input);
      51           0 :           goto done;
      52             :         }
      53             :     }
      54             : 
      55           0 :   if (~0 == sw_if_index)
      56             :     {
      57           0 :       error = clib_error_return (0, "interface required'",
      58             :                                  format_unformat_error, line_input);
      59           0 :       goto done;
      60             :     }
      61           0 :   if (ip_address_is_zero (&peer))
      62             :     {
      63           0 :       error = clib_error_return (0, "peer required'",
      64             :                                  format_unformat_error, line_input);
      65           0 :       goto done;
      66             :     }
      67           0 :   if (ip_address_is_zero (&nh))
      68             :     {
      69           0 :       error = clib_error_return (0, "next-hop required'",
      70             :                                  format_unformat_error, line_input);
      71           0 :       goto done;
      72             :     }
      73             : 
      74           0 :   rv = teib_entry_add (sw_if_index, &peer, nh_table_id, &nh);
      75             : 
      76           0 :   if (rv)
      77             :     {
      78           0 :       error = clib_error_return_code (NULL, rv, 0, "TEIB error",
      79             :                                       format_unformat_error, line_input);
      80             :     }
      81             : 
      82           0 : done:
      83           0 :   unformat_free (line_input);
      84             : 
      85           0 :   return error;
      86             : }
      87             : 
      88             : /* *INDENT-OFF* */
      89      272887 : VLIB_CLI_COMMAND (teib_create_command, static) = {
      90             :   .path = "create teib",
      91             :   .short_help = "create teib <interface> peer <addr> nh <addr> [nh-table-id <ID>]",
      92             :   .function = teib_add,
      93             : };
      94             : /* *INDENT-ON* */
      95             : 
      96             : static clib_error_t *
      97           0 : teib_del (vlib_main_t * vm,
      98             :           unformat_input_t * input, vlib_cli_command_t * cmd)
      99             : {
     100           0 :   unformat_input_t _line_input, *line_input = &_line_input;
     101           0 :   ip_address_t peer = ip_address_initializer;
     102           0 :   clib_error_t *error = NULL;
     103             :   u32 sw_if_index;
     104             :   int rv;
     105             : 
     106           0 :   sw_if_index = ~0;
     107             : 
     108             :   /* Get a line of input. */
     109           0 :   if (!unformat_user (input, unformat_line_input, line_input))
     110           0 :     return 0;
     111             : 
     112           0 :   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     113             :     {
     114           0 :       if (unformat (line_input, "%U", unformat_vnet_sw_interface,
     115             :                     vnet_get_main (), &sw_if_index))
     116             :         ;
     117           0 :       else if (unformat (line_input, "peer %U", unformat_ip_address, &peer))
     118             :         ;
     119             :       else
     120             :         {
     121           0 :           error = clib_error_return (0, "unknown input `%U'",
     122             :                                      format_unformat_error, line_input);
     123           0 :           goto done;
     124             :         }
     125             :     }
     126             : 
     127           0 :   if (~0 == sw_if_index)
     128             :     {
     129           0 :       error = clib_error_return (0, "interface required'",
     130             :                                  format_unformat_error, line_input);
     131             :     }
     132           0 :   if (ip_address_is_zero (&peer))
     133             :     {
     134           0 :       error = clib_error_return (0, "peer required'",
     135             :                                  format_unformat_error, line_input);
     136           0 :       goto done;
     137             :     }
     138             : 
     139           0 :   rv = teib_entry_del (sw_if_index, &peer);
     140             : 
     141           0 :   if (rv)
     142             :     {
     143           0 :       error = clib_error_return_code (NULL, rv, 0, "TEIB error",
     144             :                                       format_unformat_error, line_input);
     145             :     }
     146             : 
     147           0 : done:
     148           0 :   unformat_free (line_input);
     149             : 
     150           0 :   return error;
     151             : }
     152             : 
     153             : /* *INDENT-OFF* */
     154      272887 : VLIB_CLI_COMMAND (teib_delete_command, static) = {
     155             :   .path = "delete teib",
     156             :   .short_help = "delete teib <interface> peer <addr>",
     157             :   .function = teib_del,
     158             : };
     159             : /* *INDENT-ON* */
     160             : 
     161             : static walk_rc_t
     162           0 : teib_show_one (index_t nei, void *ctx)
     163             : {
     164           0 :   vlib_cli_output (ctx, "%U", format_teib_entry, nei);
     165             : 
     166           0 :   return (WALK_CONTINUE);
     167             : }
     168             : 
     169             : 
     170             : static clib_error_t *
     171           0 : teib_show (vlib_main_t * vm,
     172             :            unformat_input_t * input, vlib_cli_command_t * cmd)
     173             : {
     174           0 :   teib_walk (teib_show_one, vm);
     175           0 :   return (NULL);
     176             : }
     177             : 
     178             : /* *INDENT-OFF* */
     179      272887 : VLIB_CLI_COMMAND (teib_show_command, static) = {
     180             :   .path = "show teib",
     181             :   .short_help = "show teib",
     182             :   .function = teib_show,
     183             : };
     184             : /* *INDENT-ON* */
     185             : 
     186             : /*
     187             :  * fd.io coding-style-patch-verification: ON
     188             :  *
     189             :  * Local Variables:
     190             :  * eval: (c-set-style "gnu")
     191             :  * End:
     192             :  */

Generated by: LCOV version 1.14