LCOV - code coverage report
Current view: top level - plugins/nat/det44 - det44_cli.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 50 228 21.9 %
Date: 2023-10-26 01:39:38 Functions: 28 36 77.8 %

          Line data    Source code
       1             : /*
       2             :  * Copyright (c) 2020 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             :  * @file
      17             :  * @brief DET44 CLI
      18             :  */
      19             : #include <nat/det44/det44.h>
      20             : 
      21             : #define DET44_EXPECTED_ARGUMENT "expected required argument(s)"
      22             : 
      23             : static clib_error_t *
      24           0 : det44_map_command_fn (vlib_main_t * vm, unformat_input_t * input,
      25             :                       vlib_cli_command_t * cmd)
      26             : {
      27           0 :   unformat_input_t _line_input, *line_input = &_line_input;
      28             :   ip4_address_t in_addr, out_addr;
      29             :   u32 in_plen, out_plen;
      30           0 :   int is_add = 1, rv;
      31           0 :   clib_error_t *error = 0;
      32             : 
      33           0 :   if (!unformat_user (input, unformat_line_input, line_input))
      34           0 :     return clib_error_return (0, DET44_EXPECTED_ARGUMENT);
      35             : 
      36           0 :   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
      37             :     {
      38           0 :       if (unformat
      39             :           (line_input, "in %U/%u", unformat_ip4_address, &in_addr, &in_plen))
      40             :         ;
      41             :       else
      42           0 :         if (unformat
      43             :             (line_input, "out %U/%u", unformat_ip4_address, &out_addr,
      44             :              &out_plen))
      45             :         ;
      46           0 :       else if (unformat (line_input, "del"))
      47           0 :         is_add = 0;
      48             :       else
      49             :         {
      50           0 :           error = clib_error_return (0, "unknown input '%U'",
      51             :                                      format_unformat_error, line_input);
      52           0 :           goto done;
      53             :         }
      54             :     }
      55             : 
      56           0 :   rv = snat_det_add_map (&in_addr, (u8) in_plen, &out_addr, (u8) out_plen,
      57             :                          is_add);
      58             : 
      59           0 :   if (rv)
      60             :     {
      61           0 :       error = clib_error_return (0, "snat_det_add_map return %d", rv);
      62           0 :       goto done;
      63             :     }
      64             : 
      65           0 : done:
      66           0 :   unformat_free (line_input);
      67             : 
      68           0 :   return error;
      69             : }
      70             : 
      71             : static clib_error_t *
      72           7 : det44_show_mappings_command_fn (vlib_main_t * vm,
      73             :                                 unformat_input_t * input,
      74             :                                 vlib_cli_command_t * cmd)
      75             : {
      76           7 :   det44_main_t *dm = &det44_main;
      77             :   snat_det_map_t *mp;
      78           7 :   vlib_cli_output (vm, "NAT44 deterministic mappings:");
      79          13 :   pool_foreach (mp, dm->det_maps)
      80             :    {
      81           6 :     vlib_cli_output (vm, " in %U/%d out %U/%d\n",
      82           6 :                      format_ip4_address, &mp->in_addr, mp->in_plen,
      83           6 :                      format_ip4_address, &mp->out_addr, mp->out_plen);
      84           6 :     vlib_cli_output (vm, "  outside address sharing ratio: %d\n",
      85             :                      mp->sharing_ratio);
      86           6 :     vlib_cli_output (vm, "  number of ports per inside host: %d\n",
      87           6 :                      mp->ports_per_host);
      88           6 :     vlib_cli_output (vm, "  sessions number: %d\n", mp->ses_num);
      89             :   }
      90           7 :   return 0;
      91             : }
      92             : 
      93             : static clib_error_t *
      94           0 : det44_forward_command_fn (vlib_main_t * vm,
      95             :                           unformat_input_t * input, vlib_cli_command_t * cmd)
      96             : {
      97           0 :   unformat_input_t _line_input, *line_input = &_line_input;
      98             :   ip4_address_t in_addr, out_addr;
      99             :   u16 lo_port;
     100             :   snat_det_map_t *mp;
     101           0 :   clib_error_t *error = 0;
     102             : 
     103           0 :   if (!unformat_user (input, unformat_line_input, line_input))
     104           0 :     return clib_error_return (0, DET44_EXPECTED_ARGUMENT);
     105             : 
     106           0 :   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     107             :     {
     108           0 :       if (unformat (line_input, "%U", unformat_ip4_address, &in_addr))
     109             :         ;
     110             :       else
     111             :         {
     112           0 :           error = clib_error_return (0, "unknown input '%U'",
     113             :                                      format_unformat_error, line_input);
     114           0 :           goto done;
     115             :         }
     116             :     }
     117             : 
     118           0 :   mp = snat_det_map_by_user (&in_addr);
     119           0 :   if (!mp)
     120           0 :     vlib_cli_output (vm, "no match");
     121             :   else
     122             :     {
     123           0 :       snat_det_forward (mp, &in_addr, &out_addr, &lo_port);
     124           0 :       vlib_cli_output (vm, "%U:<%d-%d>", format_ip4_address, &out_addr,
     125           0 :                        lo_port, lo_port + mp->ports_per_host - 1);
     126             :     }
     127             : 
     128           0 : done:
     129           0 :   unformat_free (line_input);
     130             : 
     131           0 :   return error;
     132             : }
     133             : 
     134             : static clib_error_t *
     135           0 : det44_reverse_command_fn (vlib_main_t * vm,
     136             :                           unformat_input_t * input, vlib_cli_command_t * cmd)
     137             : {
     138           0 :   unformat_input_t _line_input, *line_input = &_line_input;
     139             :   ip4_address_t in_addr, out_addr;
     140           0 :   clib_error_t *error = 0;
     141             :   snat_det_map_t *mp;
     142             :   u32 out_port;
     143             : 
     144           0 :   if (!unformat_user (input, unformat_line_input, line_input))
     145           0 :     return clib_error_return (0, DET44_EXPECTED_ARGUMENT);
     146             : 
     147           0 :   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     148             :     {
     149           0 :       if (unformat
     150             :           (line_input, "%U:%d", unformat_ip4_address, &out_addr, &out_port))
     151             :         ;
     152             :       else
     153             :         {
     154           0 :           error = clib_error_return (0, "unknown input '%U'",
     155             :                                      format_unformat_error, line_input);
     156           0 :           goto done;
     157             :         }
     158             :     }
     159             : 
     160           0 :   if (out_port < 1024 || out_port > 65535)
     161             :     {
     162           0 :       error = clib_error_return (0, "wrong port, must be <1024-65535>");
     163           0 :       goto done;
     164             :     }
     165             : 
     166           0 :   mp = snat_det_map_by_out (&out_addr);
     167           0 :   if (!mp)
     168           0 :     vlib_cli_output (vm, "no match");
     169             :   else
     170             :     {
     171           0 :       snat_det_reverse (mp, &out_addr, (u16) out_port, &in_addr);
     172           0 :       vlib_cli_output (vm, "%U", format_ip4_address, &in_addr);
     173             :     }
     174             : 
     175           0 : done:
     176           0 :   unformat_free (line_input);
     177             : 
     178           0 :   return error;
     179             : }
     180             : 
     181             : static clib_error_t *
     182           7 : det44_show_sessions_command_fn (vlib_main_t * vm,
     183             :                                 unformat_input_t * input,
     184             :                                 vlib_cli_command_t * cmd)
     185             : {
     186           7 :   det44_main_t *dm = &det44_main;
     187             :   snat_det_session_t *ses;
     188             :   snat_det_map_t *mp;
     189           7 :   vlib_cli_output (vm, "NAT44 deterministic sessions:");
     190          13 :   pool_foreach (mp, dm->det_maps)
     191             :    {
     192             :     int i;
     193      516006 :     vec_foreach_index (i, mp->sessions)
     194             :       {
     195      516000 :         ses = vec_elt_at_index (mp->sessions, i);
     196      516000 :         if (ses->in_port)
     197           3 :           vlib_cli_output (vm, "  %U", format_det_map_ses, mp, ses, &i);
     198             :       }
     199             :   }
     200           7 :   return 0;
     201             : }
     202             : 
     203             : static clib_error_t *
     204           0 : det44_close_session_out_fn (vlib_main_t * vm,
     205             :                             unformat_input_t * input,
     206             :                             vlib_cli_command_t * cmd)
     207             : {
     208           0 :   unformat_input_t _line_input, *line_input = &_line_input;
     209             :   ip4_address_t out_addr, ext_addr, in_addr;
     210             :   u32 out_port, ext_port;
     211             :   snat_det_map_t *mp;
     212             :   snat_det_session_t *ses;
     213             :   snat_det_out_key_t key;
     214           0 :   clib_error_t *error = 0;
     215             : 
     216           0 :   if (!unformat_user (input, unformat_line_input, line_input))
     217           0 :     return clib_error_return (0, DET44_EXPECTED_ARGUMENT);
     218             : 
     219           0 :   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     220             :     {
     221           0 :       if (unformat (line_input, "%U:%d %U:%d",
     222             :                     unformat_ip4_address, &out_addr, &out_port,
     223             :                     unformat_ip4_address, &ext_addr, &ext_port))
     224             :         ;
     225             :       else
     226             :         {
     227           0 :           error = clib_error_return (0, "unknown input '%U'",
     228             :                                      format_unformat_error, line_input);
     229           0 :           goto done;
     230             :         }
     231             :     }
     232             : 
     233           0 :   unformat_free (line_input);
     234             : 
     235           0 :   mp = snat_det_map_by_out (&out_addr);
     236           0 :   if (!mp)
     237           0 :     vlib_cli_output (vm, "no match");
     238             :   else
     239             :     {
     240           0 :       snat_det_reverse (mp, &ext_addr, (u16) out_port, &in_addr);
     241           0 :       key.ext_host_addr = out_addr;
     242           0 :       key.ext_host_port = ntohs ((u16) ext_port);
     243           0 :       key.out_port = ntohs ((u16) out_port);
     244           0 :       ses = snat_det_get_ses_by_out (mp, &out_addr, key.as_u64);
     245           0 :       if (!ses)
     246           0 :         vlib_cli_output (vm, "no match");
     247             :       else
     248           0 :         snat_det_ses_close (mp, ses);
     249             :     }
     250             : 
     251           0 : done:
     252           0 :   unformat_free (line_input);
     253             : 
     254           0 :   return error;
     255             : }
     256             : 
     257             : static clib_error_t *
     258           0 : det44_close_session_in_fn (vlib_main_t * vm,
     259             :                            unformat_input_t * input, vlib_cli_command_t * cmd)
     260             : {
     261           0 :   unformat_input_t _line_input, *line_input = &_line_input;
     262             :   ip4_address_t in_addr, ext_addr;
     263             :   u32 in_port, ext_port;
     264             :   snat_det_map_t *mp;
     265             :   snat_det_session_t *ses;
     266             :   snat_det_out_key_t key;
     267           0 :   clib_error_t *error = 0;
     268             : 
     269           0 :   if (!unformat_user (input, unformat_line_input, line_input))
     270           0 :     return clib_error_return (0, DET44_EXPECTED_ARGUMENT);
     271             : 
     272           0 :   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     273             :     {
     274           0 :       if (unformat (line_input, "%U:%d %U:%d",
     275             :                     unformat_ip4_address, &in_addr, &in_port,
     276             :                     unformat_ip4_address, &ext_addr, &ext_port))
     277             :         ;
     278             :       else
     279             :         {
     280           0 :           error = clib_error_return (0, "unknown input '%U'",
     281             :                                      format_unformat_error, line_input);
     282           0 :           goto done;
     283             :         }
     284             :     }
     285             : 
     286           0 :   unformat_free (line_input);
     287             : 
     288           0 :   mp = snat_det_map_by_user (&in_addr);
     289           0 :   if (!mp)
     290           0 :     vlib_cli_output (vm, "no match");
     291             :   else
     292             :     {
     293           0 :       key.ext_host_addr = ext_addr;
     294           0 :       key.ext_host_port = ntohs ((u16) ext_port);
     295             :       ses =
     296           0 :         snat_det_find_ses_by_in (mp, &in_addr, ntohs ((u16) in_port), key);
     297           0 :       if (!ses)
     298           0 :         vlib_cli_output (vm, "no match");
     299             :       else
     300           0 :         snat_det_ses_close (mp, ses);
     301             :     }
     302             : 
     303           0 : done:
     304           0 :   unformat_free (line_input);
     305             : 
     306           0 :   return error;
     307             : }
     308             : 
     309             : static clib_error_t *
     310           0 : det44_set_timeouts_command_fn (vlib_main_t * vm,
     311             :                                unformat_input_t * input,
     312             :                                vlib_cli_command_t * cmd)
     313             : {
     314           0 :   unformat_input_t _line_input, *line_input = &_line_input;
     315           0 :   nat_timeouts_t timeouts = { 0 };
     316           0 :   clib_error_t *error = 0;
     317           0 :   u8 reset = 0;
     318             : 
     319           0 :   if (!unformat_user (input, unformat_line_input, line_input))
     320           0 :     return clib_error_return (0, DET44_EXPECTED_ARGUMENT);
     321             : 
     322           0 :   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     323             :     {
     324           0 :       if (unformat (line_input, "udp %u", &timeouts.udp));
     325           0 :       else if (unformat (line_input, "tcp established %u",
     326             :                          &timeouts.tcp.established));
     327           0 :       else if (unformat (line_input, "tcp transitory %u",
     328             :                          &timeouts.tcp.transitory));
     329           0 :       else if (unformat (line_input, "icmp %u", &timeouts.icmp));
     330           0 :       else if (unformat (line_input, "reset"))
     331           0 :         reset = 1;
     332             :       else
     333             :         {
     334           0 :           error = clib_error_return (0, "unknown input '%U'",
     335             :                                      format_unformat_error, line_input);
     336           0 :           goto done;
     337             :         }
     338             :     }
     339             : 
     340           0 :   if (!reset)
     341             :     {
     342           0 :       if (det44_set_timeouts (&timeouts))
     343             :         {
     344           0 :           error = clib_error_return (0, "error configuring timeouts");
     345             :         }
     346             :     }
     347             :   else
     348           0 :     det44_reset_timeouts ();
     349           0 : done:
     350           0 :   unformat_free (line_input);
     351           0 :   return error;
     352             : }
     353             : 
     354             : static clib_error_t *
     355           7 : det44_show_timeouts_command_fn (vlib_main_t * vm,
     356             :                                 unformat_input_t * input,
     357             :                                 vlib_cli_command_t * cmd)
     358             : {
     359             :   nat_timeouts_t timeouts;
     360           7 :   timeouts = det44_get_timeouts ();
     361           7 :   vlib_cli_output (vm, "udp timeout: %dsec", timeouts.udp);
     362           7 :   vlib_cli_output (vm, "tcp established timeout: %dsec",
     363             :                    timeouts.tcp.established);
     364           7 :   vlib_cli_output (vm, "tcp transitory timeout: %dsec",
     365             :                    timeouts.tcp.transitory);
     366           7 :   vlib_cli_output (vm, "icmp timeout: %dsec", timeouts.icmp);
     367           7 :   return 0;
     368             : }
     369             : 
     370             : static clib_error_t *
     371           0 : det44_plugin_enable_disable_command_fn (vlib_main_t * vm,
     372             :                                         unformat_input_t * input,
     373             :                                         vlib_cli_command_t * cmd)
     374             : {
     375           0 :   unformat_input_t _line_input, *line_input = &_line_input;
     376           0 :   u8 enable = 0, is_set = 0;
     377           0 :   clib_error_t *error = 0;
     378           0 :   det44_config_t c = { 0 };
     379             : 
     380           0 :   if (!unformat_user (input, unformat_line_input, line_input))
     381           0 :     return clib_error_return (0, DET44_EXPECTED_ARGUMENT);
     382             : 
     383           0 :   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     384             :     {
     385           0 :       if (!is_set && unformat (line_input, "enable"))
     386             :         {
     387           0 :           unformat (line_input, "inside vrf %u", &c.inside_vrf_id);
     388           0 :           unformat (line_input, "outside vrf %u", &c.outside_vrf_id);
     389           0 :           enable = 1;
     390             :         }
     391           0 :       else if (!is_set && unformat (line_input, "disable"));
     392             :       else
     393             :         {
     394           0 :           error = clib_error_return (0, "unknown input '%U'",
     395             :                                      format_unformat_error, line_input);
     396           0 :           goto done;
     397             :         }
     398           0 :       is_set = 1;
     399             :     }
     400             : 
     401           0 :   if (enable)
     402             :     {
     403           0 :       if (det44_plugin_enable (c))
     404           0 :         error = clib_error_return (0, "plugin enable failed");
     405             :     }
     406             :   else
     407             :     {
     408           0 :       if (det44_plugin_disable ())
     409           0 :         error = clib_error_return (0, "plugin disable failed");
     410             :     }
     411           0 : done:
     412           0 :   unformat_free (line_input);
     413           0 :   return error;
     414             : }
     415             : 
     416             : typedef struct
     417             : {
     418             :   u32 sw_if_index;
     419             :   u8 is_inside;
     420             : } sw_if_indices_t;
     421             : 
     422             : static clib_error_t *
     423           0 : det44_feature_command_fn (vlib_main_t * vm,
     424             :                           unformat_input_t * input, vlib_cli_command_t * cmd)
     425             : {
     426           0 :   unformat_input_t _line_input, *line_input = &_line_input;
     427           0 :   sw_if_indices_t *sw_if_indices = 0, *p, e;
     428           0 :   vnet_main_t *vnm = vnet_get_main ();
     429           0 :   clib_error_t *error = 0;
     430           0 :   u8 is_del = 0;
     431             : 
     432           0 :   if (!unformat_user (input, unformat_line_input, line_input))
     433           0 :     return clib_error_return (0, DET44_EXPECTED_ARGUMENT);
     434             : 
     435           0 :   while (unformat_check_input (line_input) != UNFORMAT_END_OF_INPUT)
     436             :     {
     437           0 :       if (unformat (line_input, "inside %U", unformat_vnet_sw_interface,
     438             :                     vnm, &e.sw_if_index))
     439             :         {
     440           0 :           e.is_inside = 1;
     441           0 :           vec_add1 (sw_if_indices, e);
     442             :         }
     443           0 :       else if (unformat (line_input, "outside %U", unformat_vnet_sw_interface,
     444             :                          vnm, &e.sw_if_index))
     445             :         {
     446           0 :           e.is_inside = 0;
     447           0 :           vec_add1 (sw_if_indices, e);
     448             :         }
     449           0 :       else if (unformat (line_input, "del"))
     450           0 :         is_del = 1;
     451             :       else
     452             :         {
     453           0 :           error = clib_error_return (0, "unknown input '%U'",
     454             :                                      format_unformat_error, line_input);
     455           0 :           goto done;
     456             :         }
     457             :     }
     458             : 
     459           0 :   vec_foreach (p, sw_if_indices)
     460             :     {
     461           0 :       if (det44_interface_add_del (p->sw_if_index, p->is_inside, is_del))
     462             :         {
     463           0 :           error = clib_error_return (0, "%s %s %U failed",
     464             :                                      is_del ? "del" : "add",
     465             :                                      p->is_inside ? "inside" : "outside",
     466             :                                      format_vnet_sw_if_index_name,
     467             :                                      vnm, p->sw_if_index);
     468           0 :           break;
     469             :         }
     470             :     }
     471           0 : done:
     472           0 :   unformat_free (line_input);
     473           0 :   vec_free (sw_if_indices);
     474           0 :   return error;
     475             : }
     476             : 
     477             : static clib_error_t *
     478           7 : det44_show_interfaces_command_fn (vlib_main_t * vm, unformat_input_t * input,
     479             :                                   vlib_cli_command_t * cmd)
     480             : {
     481           7 :   vnet_main_t *vnm = vnet_get_main ();
     482           7 :   det44_main_t *dm = &det44_main;
     483             :   det44_interface_t *i;
     484           7 :   vlib_cli_output (vm, "DET44 interfaces:");
     485          17 :   pool_foreach (i, dm->interfaces)
     486             :    {
     487          10 :     vlib_cli_output (vm, " %U %s", format_vnet_sw_if_index_name, vnm,
     488             :                      i->sw_if_index,
     489          10 :                      (det44_interface_is_inside(i) &&
     490           5 :                       det44_interface_is_outside(i)) ? "in out" :
     491          10 :                      (det44_interface_is_inside(i) ? "in" : "out"));
     492             :   }
     493           7 :   return 0;
     494             : }
     495             : 
     496             : /*?
     497             :  * @cliexpar
     498             :  * @cliexstart{det44 add}
     499             :  * Create bijective mapping of inside address to outside address and port range
     500             :  * pairs, with the purpose of enabling DET44 to reduce logging in CGN
     501             :  * deployments.
     502             :  * To create mapping between inside network 10.0.0.0/18 and
     503             :  * outside network 1.1.1.0/30 use:
     504             :  * # vpp# det44 add in 10.0.0.0/18 out 1.1.1.0/30
     505             :  * @cliexend
     506             : ?*/
     507      247273 : VLIB_CLI_COMMAND (det44_map_command, static) = {
     508             :     .path = "det44 add",
     509             :     .short_help = "det44 add in <addr>/<plen> out <addr>/<plen> [del]",
     510             :     .function = det44_map_command_fn,
     511             : };
     512             : 
     513             : /*?
     514             :  * @cliexpar
     515             :  * @cliexstart{show det44 mappings}
     516             :  * Show DET44 mappings
     517             :  * vpp# show det44 mappings
     518             :  * DET44 mappings:
     519             :  *  in 10.0.0.0/24 out 1.1.1.1/32
     520             :  *   outside address sharing ratio: 256
     521             :  *   number of ports per inside host: 252
     522             :  *   sessions number: 0
     523             :  * @cliexend
     524             : ?*/
     525      247273 : VLIB_CLI_COMMAND (det44_show_mappings_command, static) = {
     526             :     .path = "show det44 mappings",
     527             :     .short_help = "show det44 mappings",
     528             :     .function = det44_show_mappings_command_fn,
     529             : };
     530             : 
     531             : /*?
     532             :  * @cliexpar
     533             :  * @cliexstart{det44 forward}
     534             :  * Return outside address and port range from inside address for DET44.
     535             :  * To obtain outside address and port of inside host use:
     536             :  *  vpp# det44 forward 10.0.0.2
     537             :  *  1.1.1.0:<1054-1068>
     538             :  * @cliexend
     539             : ?*/
     540      247273 : VLIB_CLI_COMMAND (det44_forward_command, static) = {
     541             :     .path = "det44 forward",
     542             :     .short_help = "det44 forward <addr>",
     543             :     .function = det44_forward_command_fn,
     544             : };
     545             : 
     546             : /*?
     547             :  * @cliexpar
     548             :  * @cliexstart{det44 reverse}
     549             :  * Return inside address from outside address and port for DET44.
     550             :  * To obtain inside host address from outside address and port use:
     551             :  *  #vpp det44 reverse 1.1.1.1:1276
     552             :  *  10.0.16.16
     553             :  * @cliexend
     554             : ?*/
     555      247273 : VLIB_CLI_COMMAND (det44_reverse_command, static) = {
     556             :     .path = "det44 reverse",
     557             :     .short_help = "det44 reverse <addr>:<port>",
     558             :     .function = det44_reverse_command_fn,
     559             : };
     560             : 
     561             : /*?
     562             :  * @cliexpar
     563             :  * @cliexstart{show det44 sessions}
     564             :  * Show DET44 sessions.
     565             :  * vpp# show det44 sessions
     566             :  * DET44 sessions:
     567             :  *   in 10.0.0.3:3005 out 1.1.1.2:1146 external host 172.16.1.2:3006 state: udp-active expire: 306
     568             :  *   in 10.0.0.3:3000 out 1.1.1.2:1141 external host 172.16.1.2:3001 state: udp-active expire: 306
     569             :  *   in 10.0.0.4:3005 out 1.1.1.2:1177 external host 172.16.1.2:3006 state: udp-active expire: 306
     570             :  * @cliexend
     571             : ?*/
     572      247273 : VLIB_CLI_COMMAND (det44_show_sessions_command, static) = {
     573             :   .path = "show det44 sessions",
     574             :   .short_help = "show det44 sessions",
     575             :   .function = det44_show_sessions_command_fn,
     576             : };
     577             : 
     578             : /*?
     579             :  * @cliexpar
     580             :  * @cliexstart{det44 close session out}
     581             :  * Close session using outside ip address and port
     582             :  * and external ip address and port, use:
     583             :  *  vpp# det44 close session out 1.1.1.1:1276 2.2.2.2:2387
     584             :  * @cliexend
     585             : ?*/
     586      247273 : VLIB_CLI_COMMAND (det44_close_sesion_out_command, static) = {
     587             :   .path = "det44 close session out",
     588             :   .short_help = "det44 close session out "
     589             :                 "<out_addr>:<out_port> <ext_addr>:<ext_port>",
     590             :   .function = det44_close_session_out_fn,
     591             : };
     592             : 
     593             : /*?
     594             :  * @cliexpar
     595             :  * @cliexstart{det44 deterministic close session in}
     596             :  * Close session using inside ip address and port
     597             :  * and external ip address and port, use:
     598             :  *  vpp# det44 close session in 3.3.3.3:3487 2.2.2.2:2387
     599             :  * @cliexend
     600             : ?*/
     601      247273 : VLIB_CLI_COMMAND (det44_close_session_in_command, static) = {
     602             :   .path = "det44 close session in",
     603             :   .short_help = "det44 close session in "
     604             :                 "<in_addr>:<in_port> <ext_addr>:<ext_port>",
     605             :   .function = det44_close_session_in_fn,
     606             : };
     607             : 
     608             : /*?
     609             :  * @cliexpar
     610             :  * @cliexstart{set det44 timeout}
     611             :  * Set values of timeouts for DET44 sessions (in seconds), use:
     612             :  *  vpp# set det44 timeouts udp 120 tcp established 7500 tcp transitory 250 icmp 90
     613             :  * To reset default values use:
     614             :  *  vpp# set det44 timeouts reset
     615             :  * @cliexend
     616             : ?*/
     617      247273 : VLIB_CLI_COMMAND (det44_set_timeouts_command, static) =
     618             : {
     619             :   .path = "set det44 timeouts",
     620             :   .short_help = "set det44 timeouts <[udp <sec>] [tcp established <sec>] "
     621             :                 "[tcp transitory <sec>] [icmp <sec>]|reset>",
     622             :   .function = det44_set_timeouts_command_fn,
     623             : };
     624             : 
     625             : /*?
     626             :  * @cliexpar
     627             :  * @cliexstart{show det44 timeouts}
     628             :  * Show values of timeouts for DET44 sessions.
     629             :  * vpp# show det44 timeouts
     630             :  * udp timeout: 300sec
     631             :  * tcp-established timeout: 7440sec
     632             :  * tcp-transitory timeout: 240sec
     633             :  * icmp timeout: 60sec
     634             :  * @cliexend
     635             : ?*/
     636      247273 : VLIB_CLI_COMMAND (det44_show_timeouts_command, static) =
     637             : {
     638             :   .path = "show det44 timeouts",
     639             :   .short_help = "show det44 timeouts",
     640             :   .function = det44_show_timeouts_command_fn,
     641             : };
     642             : 
     643             : /*?
     644             :  * @cliexpar
     645             :  * @cliexstart{det44 plugin}
     646             :  * Enable/disable DET44 plugin.
     647             :  * @cliexend
     648             : ?*/
     649      247273 : VLIB_CLI_COMMAND (det44_plugin_enable_disable_command, static) =
     650             : {
     651             :   .path = "det44 plugin",
     652             :   .short_help = "det44 plugin <enable [inside vrf] [outside vrf]|disable>",
     653             :   .function = det44_plugin_enable_disable_command_fn,
     654             : };
     655             : 
     656             : /*?
     657             :  * @cliexpar
     658             :  * @cliexstart{set interface det44}
     659             :  * Enable/disable DET44 feature on the interface.
     660             :  * To enable DET44 feature with local network interface use:
     661             :  *  vpp# set interface det44 inside GigabitEthernet0/8/0
     662             :  * To enable DET44 feature with external network interface use:
     663             :  *  vpp# set interface det44 outside GigabitEthernet0/a/0
     664             :  * @cliexend
     665             : ?*/
     666      247273 : VLIB_CLI_COMMAND (det44_feature_command, static) =
     667             : {
     668             :   .path = "set interface det44",
     669             :   .short_help = "set interface det44 inside <intfc> outside <intfc> [del]",
     670             :   .function = det44_feature_command_fn,
     671             : };
     672             : 
     673             : /*?
     674             :  * @cliexpar
     675             :  * @cliexstart{show det44 interfaces}
     676             :  * Show interfaces with DET44 feature.
     677             :  * vpp# show det44 interfaces
     678             :  * DET44 interfaces:
     679             :  *  GigabitEthernet0/8/0 in
     680             :  *  GigabitEthernet0/a/0 out
     681             :  * @cliexend
     682             : ?*/
     683      247273 : VLIB_CLI_COMMAND (det44_show_interfaces_command, static) =
     684             : {
     685             :   .path = "show det44 interfaces",
     686             :   .short_help = "show det44 interfaces",
     687             :   .function = det44_show_interfaces_command_fn,
     688             : };
     689             : 
     690             : /*
     691             :  * fd.io coding-style-patch-verification: ON
     692             :  *
     693             :  * Local Variables:
     694             :  * eval: (c-set-style "gnu")
     695             :  * End:
     696             :  */

Generated by: LCOV version 1.14