LCOV - code coverage report
Current view: top level - vnet/ipsec - ipsec_test.c (source / functions) Hit Total Coverage
Test: coverage-filtered.info Lines: 0 318 0.0 %
Date: 2023-07-05 22:20:52 Functions: 0 47 0.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: Apache-2.0
       2             :  * Copyright(c) 2021 Cisco Systems, Inc.
       3             :  */
       4             : 
       5             : #include <vat/vat.h>
       6             : #include <vlibapi/api.h>
       7             : #include <vlibmemory/api.h>
       8             : #include <vppinfra/error.h>
       9             : #include <vpp/api/types.h>
      10             : 
      11             : #include <vnet/ipsec/ipsec.h>
      12             : #include <vnet/ip/ip_types_api.h>
      13             : 
      14             : #define __plugin_msg_base ipsec_test_main.msg_id_base
      15             : #include <vlibapi/vat_helper_macros.h>
      16             : 
      17             : #include <vlibmemory/vlib.api_enum.h>
      18             : #include <vlibmemory/vlib.api_types.h>
      19             : 
      20             : /* Declare message IDs */
      21             : #include <vnet/format_fns.h>
      22             : #include <vnet/ipsec/ipsec.api_enum.h>
      23             : #include <vnet/ipsec/ipsec.api_types.h>
      24             : 
      25             : #define vl_endianfun /* define message structures */
      26             : #include <vnet/ipsec/ipsec.api.h>
      27             : #undef vl_endianfun
      28             : 
      29             : #define vl_calcsizefun
      30             : #include <vnet/ipsec/ipsec.api.h>
      31             : #undef vl_calcsizefun
      32             : 
      33             : typedef struct
      34             : {
      35             :   /* API message ID base */
      36             :   u16 msg_id_base;
      37             :   u32 ping_id;
      38             :   vat_main_t *vat_main;
      39             : } ipsec_test_main_t;
      40             : 
      41             : static ipsec_test_main_t ipsec_test_main;
      42             : 
      43             : static void
      44           0 : vl_api_ipsec_spds_details_t_handler (vl_api_ipsec_spds_details_t *mp)
      45             : {
      46           0 : }
      47             : 
      48             : static void
      49           0 : vl_api_ipsec_itf_details_t_handler (vl_api_ipsec_itf_details_t *mp)
      50             : {
      51           0 : }
      52             : 
      53             : static int
      54           0 : api_ipsec_itf_delete (vat_main_t *vat)
      55             : {
      56           0 :   return -1;
      57             : }
      58             : 
      59             : static int
      60           0 : api_ipsec_itf_create (vat_main_t *vat)
      61             : {
      62           0 :   return -1;
      63             : }
      64             : 
      65             : static void
      66           0 : vl_api_ipsec_itf_create_reply_t_handler (vl_api_ipsec_itf_create_reply_t *vat)
      67             : {
      68           0 : }
      69             : 
      70             : static int
      71           0 : api_ipsec_spd_entry_add_del (vat_main_t *vam)
      72             : {
      73           0 :   unformat_input_t *i = vam->input;
      74             :   vl_api_ipsec_spd_entry_add_del_t *mp;
      75           0 :   u8 is_add = 1, is_outbound = 0;
      76           0 :   u32 spd_id = 0, sa_id = 0, protocol = IPSEC_POLICY_PROTOCOL_ANY, policy = 0;
      77           0 :   i32 priority = 0;
      78           0 :   u32 rport_start = 0, rport_stop = (u32) ~0;
      79           0 :   u32 lport_start = 0, lport_stop = (u32) ~0;
      80           0 :   vl_api_address_t laddr_start = {}, laddr_stop = {}, raddr_start = {},
      81           0 :                    raddr_stop = {};
      82             :   int ret;
      83             : 
      84           0 :   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
      85             :     {
      86           0 :       if (unformat (i, "del"))
      87           0 :         is_add = 0;
      88           0 :       if (unformat (i, "outbound"))
      89           0 :         is_outbound = 1;
      90           0 :       if (unformat (i, "inbound"))
      91           0 :         is_outbound = 0;
      92           0 :       else if (unformat (i, "spd_id %d", &spd_id))
      93             :         ;
      94           0 :       else if (unformat (i, "sa_id %d", &sa_id))
      95             :         ;
      96           0 :       else if (unformat (i, "priority %d", &priority))
      97             :         ;
      98           0 :       else if (unformat (i, "protocol %d", &protocol))
      99             :         ;
     100           0 :       else if (unformat (i, "lport_start %d", &lport_start))
     101             :         ;
     102           0 :       else if (unformat (i, "lport_stop %d", &lport_stop))
     103             :         ;
     104           0 :       else if (unformat (i, "rport_start %d", &rport_start))
     105             :         ;
     106           0 :       else if (unformat (i, "rport_stop %d", &rport_stop))
     107             :         ;
     108           0 :       else if (unformat (i, "laddr_start %U", unformat_vl_api_address,
     109             :                          &laddr_start))
     110             :         ;
     111           0 :       else if (unformat (i, "laddr_stop %U", unformat_vl_api_address,
     112             :                          &laddr_stop))
     113             :         ;
     114           0 :       else if (unformat (i, "raddr_start %U", unformat_vl_api_address,
     115             :                          &raddr_start))
     116             :         ;
     117           0 :       else if (unformat (i, "raddr_stop %U", unformat_vl_api_address,
     118             :                          &raddr_stop))
     119             :         ;
     120           0 :       else if (unformat (i, "action %U", unformat_ipsec_policy_action,
     121             :                          &policy))
     122             :         {
     123           0 :           if (policy == IPSEC_POLICY_ACTION_RESOLVE)
     124             :             {
     125           0 :               clib_warning ("unsupported action: 'resolve'");
     126           0 :               return -99;
     127             :             }
     128             :         }
     129             :       else
     130             :         {
     131           0 :           clib_warning ("parse error '%U'", format_unformat_error, i);
     132           0 :           return -99;
     133             :         }
     134             :     }
     135             : 
     136           0 :   M (IPSEC_SPD_ENTRY_ADD_DEL, mp);
     137             : 
     138           0 :   mp->is_add = is_add;
     139             : 
     140           0 :   mp->entry.spd_id = ntohl (spd_id);
     141           0 :   mp->entry.priority = ntohl (priority);
     142           0 :   mp->entry.is_outbound = is_outbound;
     143             : 
     144           0 :   clib_memcpy (&mp->entry.remote_address_start, &raddr_start,
     145             :                sizeof (vl_api_address_t));
     146           0 :   clib_memcpy (&mp->entry.remote_address_stop, &raddr_stop,
     147             :                sizeof (vl_api_address_t));
     148           0 :   clib_memcpy (&mp->entry.local_address_start, &laddr_start,
     149             :                sizeof (vl_api_address_t));
     150           0 :   clib_memcpy (&mp->entry.local_address_stop, &laddr_stop,
     151             :                sizeof (vl_api_address_t));
     152             : 
     153           0 :   mp->entry.protocol = protocol ? (u8) protocol : IPSEC_POLICY_PROTOCOL_ANY;
     154           0 :   mp->entry.local_port_start = ntohs ((u16) lport_start);
     155           0 :   mp->entry.local_port_stop = ntohs ((u16) lport_stop);
     156           0 :   mp->entry.remote_port_start = ntohs ((u16) rport_start);
     157           0 :   mp->entry.remote_port_stop = ntohs ((u16) rport_stop);
     158           0 :   mp->entry.policy = (u8) policy;
     159           0 :   mp->entry.sa_id = ntohl (sa_id);
     160             : 
     161           0 :   S (mp);
     162           0 :   W (ret);
     163           0 :   return ret;
     164             : }
     165             : 
     166             : static int
     167           0 : api_ipsec_spd_entry_add_del_v2 (vat_main_t *vam)
     168             : {
     169           0 :   unformat_input_t *i = vam->input;
     170             :   vl_api_ipsec_spd_entry_add_del_t *mp;
     171           0 :   u8 is_add = 1, is_outbound = 0;
     172           0 :   u32 spd_id = 0, sa_id = 0, protocol = IPSEC_POLICY_PROTOCOL_ANY, policy = 0;
     173           0 :   i32 priority = 0;
     174           0 :   u32 rport_start = 0, rport_stop = (u32) ~0;
     175           0 :   u32 lport_start = 0, lport_stop = (u32) ~0;
     176           0 :   vl_api_address_t laddr_start = {}, laddr_stop = {}, raddr_start = {},
     177           0 :                    raddr_stop = {};
     178             :   int ret;
     179             : 
     180           0 :   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     181             :     {
     182           0 :       if (unformat (i, "del"))
     183           0 :         is_add = 0;
     184           0 :       if (unformat (i, "outbound"))
     185           0 :         is_outbound = 1;
     186           0 :       if (unformat (i, "inbound"))
     187           0 :         is_outbound = 0;
     188           0 :       else if (unformat (i, "spd_id %d", &spd_id))
     189             :         ;
     190           0 :       else if (unformat (i, "sa_id %d", &sa_id))
     191             :         ;
     192           0 :       else if (unformat (i, "priority %d", &priority))
     193             :         ;
     194           0 :       else if (unformat (i, "protocol %d", &protocol))
     195             :         ;
     196           0 :       else if (unformat (i, "lport_start %d", &lport_start))
     197             :         ;
     198           0 :       else if (unformat (i, "lport_stop %d", &lport_stop))
     199             :         ;
     200           0 :       else if (unformat (i, "rport_start %d", &rport_start))
     201             :         ;
     202           0 :       else if (unformat (i, "rport_stop %d", &rport_stop))
     203             :         ;
     204           0 :       else if (unformat (i, "laddr_start %U", unformat_vl_api_address,
     205             :                          &laddr_start))
     206             :         ;
     207           0 :       else if (unformat (i, "laddr_stop %U", unformat_vl_api_address,
     208             :                          &laddr_stop))
     209             :         ;
     210           0 :       else if (unformat (i, "raddr_start %U", unformat_vl_api_address,
     211             :                          &raddr_start))
     212             :         ;
     213           0 :       else if (unformat (i, "raddr_stop %U", unformat_vl_api_address,
     214             :                          &raddr_stop))
     215             :         ;
     216           0 :       else if (unformat (i, "action %U", unformat_ipsec_policy_action,
     217             :                          &policy))
     218             :         {
     219           0 :           if (policy == IPSEC_POLICY_ACTION_RESOLVE)
     220             :             {
     221           0 :               clib_warning ("unsupported action: 'resolve'");
     222           0 :               return -99;
     223             :             }
     224             :         }
     225             :       else
     226             :         {
     227           0 :           clib_warning ("parse error '%U'", format_unformat_error, i);
     228           0 :           return -99;
     229             :         }
     230             :     }
     231             : 
     232           0 :   M (IPSEC_SPD_ENTRY_ADD_DEL, mp);
     233             : 
     234           0 :   mp->is_add = is_add;
     235             : 
     236           0 :   mp->entry.spd_id = ntohl (spd_id);
     237           0 :   mp->entry.priority = ntohl (priority);
     238           0 :   mp->entry.is_outbound = is_outbound;
     239             : 
     240           0 :   clib_memcpy (&mp->entry.remote_address_start, &raddr_start,
     241             :                sizeof (vl_api_address_t));
     242           0 :   clib_memcpy (&mp->entry.remote_address_stop, &raddr_stop,
     243             :                sizeof (vl_api_address_t));
     244           0 :   clib_memcpy (&mp->entry.local_address_start, &laddr_start,
     245             :                sizeof (vl_api_address_t));
     246           0 :   clib_memcpy (&mp->entry.local_address_stop, &laddr_stop,
     247             :                sizeof (vl_api_address_t));
     248             : 
     249           0 :   mp->entry.protocol = (u8) protocol;
     250           0 :   mp->entry.local_port_start = ntohs ((u16) lport_start);
     251           0 :   mp->entry.local_port_stop = ntohs ((u16) lport_stop);
     252           0 :   mp->entry.remote_port_start = ntohs ((u16) rport_start);
     253           0 :   mp->entry.remote_port_stop = ntohs ((u16) rport_stop);
     254           0 :   mp->entry.policy = (u8) policy;
     255           0 :   mp->entry.sa_id = ntohl (sa_id);
     256             : 
     257           0 :   S (mp);
     258           0 :   W (ret);
     259           0 :   return ret;
     260             : }
     261             : 
     262             : static void
     263           0 : vl_api_ipsec_spd_details_t_handler (vl_api_ipsec_spd_details_t *mp)
     264             : {
     265           0 : }
     266             : 
     267             : static void
     268           0 : vl_api_ipsec_sad_entry_add_del_reply_t_handler (
     269             :   vl_api_ipsec_sad_entry_add_del_reply_t *mp)
     270             : {
     271           0 : }
     272             : 
     273             : static void
     274           0 : vl_api_ipsec_sad_entry_add_del_v3_reply_t_handler (
     275             :   vl_api_ipsec_sad_entry_add_del_v3_reply_t *mp)
     276             : {
     277           0 : }
     278             : 
     279             : static void
     280           0 : vl_api_ipsec_sad_entry_add_reply_t_handler (
     281             :   vl_api_ipsec_sad_entry_add_reply_t *mp)
     282             : {
     283           0 : }
     284             : 
     285             : static int
     286           0 : api_ipsec_sad_entry_del (vat_main_t *vat)
     287             : {
     288           0 :   return -1;
     289             : }
     290             : 
     291             : static int
     292           0 : api_ipsec_sad_bind (vat_main_t *vat)
     293             : {
     294           0 :   return -1;
     295             : }
     296             : 
     297             : static int
     298           0 : api_ipsec_sad_unbind (vat_main_t *vat)
     299             : {
     300           0 :   return -1;
     301             : }
     302             : 
     303             : static void
     304           0 : vl_api_ipsec_sad_entry_add_del_v2_reply_t_handler (
     305             :   vl_api_ipsec_sad_entry_add_del_v2_reply_t *mp)
     306             : {
     307           0 : }
     308             : 
     309             : static void
     310           0 : vl_api_ipsec_spd_interface_details_t_handler (
     311             :   vl_api_ipsec_spd_interface_details_t *vat)
     312             : {
     313           0 : }
     314             : 
     315             : static int
     316           0 : api_ipsec_sad_entry_add_del_v3 (vat_main_t *vat)
     317             : {
     318           0 :   return -1;
     319             : }
     320             : 
     321             : static int
     322           0 : api_ipsec_sad_entry_update (vat_main_t *vat)
     323             : {
     324           0 :   return -1;
     325             : }
     326             : 
     327             : static int
     328           0 : api_ipsec_tunnel_protect_update (vat_main_t *vat)
     329             : {
     330           0 :   return -1;
     331             : }
     332             : 
     333             : static void
     334           0 : vl_api_ipsec_backend_details_t_handler (vl_api_ipsec_backend_details_t *mp)
     335             : {
     336           0 : }
     337             : 
     338             : static int
     339           0 : api_ipsec_sa_v3_dump (vat_main_t *vat)
     340             : {
     341           0 :   return -1;
     342             : }
     343             : 
     344             : static int
     345           0 : api_ipsec_tunnel_protect_dump (vat_main_t *vat)
     346             : {
     347           0 :   return -1;
     348             : }
     349             : 
     350             : static int
     351           0 : api_ipsec_tunnel_protect_del (vat_main_t *vat)
     352             : {
     353           0 :   return -1;
     354             : }
     355             : 
     356             : static void
     357           0 : vl_api_ipsec_tunnel_protect_details_t_handler (
     358             :   vl_api_ipsec_tunnel_protect_details_t *mp)
     359             : {
     360           0 : }
     361             : 
     362             : static int
     363           0 : api_ipsec_sad_entry_add (vat_main_t *vat)
     364             : {
     365           0 :   return -1;
     366             : }
     367             : 
     368             : static void
     369           0 : vl_api_ipsec_spd_entry_add_del_reply_t_handler (
     370             :   vl_api_ipsec_spd_entry_add_del_reply_t *mp)
     371             : {
     372           0 : }
     373             : 
     374             : static void
     375           0 : vl_api_ipsec_spd_entry_add_del_v2_reply_t_handler (
     376             :   vl_api_ipsec_spd_entry_add_del_v2_reply_t *mp)
     377             : {
     378           0 : }
     379             : 
     380             : static int
     381           0 : api_ipsec_spds_dump (vat_main_t *vam)
     382             : {
     383           0 :   return -1;
     384             : }
     385             : 
     386             : static int
     387           0 : api_ipsec_itf_dump (vat_main_t *vam)
     388             : {
     389           0 :   return -1;
     390             : }
     391             : 
     392             : static void
     393           0 : vl_api_ipsec_sa_v3_details_t_handler (vl_api_ipsec_sa_v3_details_t *mp)
     394             : {
     395           0 : }
     396             : 
     397             : static int
     398           0 : api_ipsec_spd_interface_dump (vat_main_t *vat)
     399             : {
     400           0 :   return -1;
     401             : }
     402             : 
     403             : static void
     404           0 : vl_api_ipsec_sa_v2_details_t_handler (vl_api_ipsec_sa_v2_details_t *mp)
     405             : {
     406           0 : }
     407             : 
     408             : static int
     409           0 : api_ipsec_sa_v2_dump (vat_main_t *mp)
     410             : {
     411           0 :   return -1;
     412             : }
     413             : 
     414             : static int
     415           0 : api_ipsec_sa_dump (vat_main_t *vam)
     416             : {
     417           0 :   unformat_input_t *i = vam->input;
     418             :   vl_api_ipsec_sa_dump_t *mp;
     419             :   vl_api_control_ping_t *mp_ping;
     420           0 :   u32 sa_id = ~0;
     421             :   int ret;
     422             : 
     423           0 :   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     424             :     {
     425           0 :       if (unformat (i, "sa_id %d", &sa_id))
     426             :         ;
     427             :       else
     428             :         {
     429           0 :           clib_warning ("parse error '%U'", format_unformat_error, i);
     430           0 :           return -99;
     431             :         }
     432             :     }
     433             : 
     434           0 :   M (IPSEC_SA_DUMP, mp);
     435             : 
     436           0 :   mp->sa_id = ntohl (sa_id);
     437             : 
     438           0 :   S (mp);
     439             : 
     440             :   /* Use a control ping for synchronization */
     441           0 :   PING (&ipsec_test_main, mp_ping);
     442           0 :   S (mp_ping);
     443             : 
     444           0 :   W (ret);
     445           0 :   return ret;
     446             : }
     447             : 
     448             : static void
     449           0 : vl_api_ipsec_sa_v4_details_t_handler (vl_api_ipsec_sa_v4_details_t *mp)
     450             : {
     451           0 : }
     452             : 
     453             : static int
     454           0 : api_ipsec_sa_v4_dump (vat_main_t *mp)
     455             : {
     456           0 :   return -1;
     457             : }
     458             : 
     459             : static void
     460           0 : vl_api_ipsec_sa_details_t_handler (vl_api_ipsec_sa_details_t *mp)
     461             : {
     462           0 :   vat_main_t *vam = &vat_main;
     463             : 
     464           0 :   print (vam->ofp,
     465             :          "sa_id %u sw_if_index %u spi %u proto %u crypto_alg %u "
     466             :          "crypto_key %U integ_alg %u integ_key %U flags %x "
     467             :          "tunnel_src_addr %U tunnel_dst_addr %U "
     468             :          "salt %u seq_outbound %lu last_seq_inbound %lu "
     469             :          "replay_window %lu stat_index %u\n",
     470             :          ntohl (mp->entry.sad_id), ntohl (mp->sw_if_index),
     471           0 :          ntohl (mp->entry.spi), ntohl (mp->entry.protocol),
     472           0 :          ntohl (mp->entry.crypto_algorithm), format_hex_bytes,
     473           0 :          mp->entry.crypto_key.data, mp->entry.crypto_key.length,
     474           0 :          ntohl (mp->entry.integrity_algorithm), format_hex_bytes,
     475           0 :          mp->entry.integrity_key.data, mp->entry.integrity_key.length,
     476           0 :          ntohl (mp->entry.flags), format_vl_api_address, &mp->entry.tunnel_src,
     477             :          format_vl_api_address, &mp->entry.tunnel_dst, ntohl (mp->salt),
     478             :          clib_net_to_host_u64 (mp->seq_outbound),
     479             :          clib_net_to_host_u64 (mp->last_seq_inbound),
     480             :          clib_net_to_host_u64 (mp->replay_window), ntohl (mp->stat_index));
     481           0 : }
     482             : 
     483             : static int
     484           0 : api_ipsec_spd_dump (vat_main_t *vam)
     485             : {
     486           0 :   return -1;
     487             : }
     488             : 
     489             : uword
     490           0 : unformat_ipsec_api_crypto_alg (unformat_input_t *input, va_list *args)
     491             : {
     492           0 :   u32 *r = va_arg (*args, u32 *);
     493             : 
     494             :   if (0)
     495             :     ;
     496             : #define _(v, f, s) else if (unformat (input, s)) *r = IPSEC_API_CRYPTO_ALG_##f;
     497           0 :   foreach_ipsec_crypto_alg
     498             : #undef _
     499           0 :     else return 0;
     500           0 :   return 1;
     501             : }
     502             : 
     503             : uword
     504           0 : unformat_ipsec_api_integ_alg (unformat_input_t *input, va_list *args)
     505             : {
     506           0 :   u32 *r = va_arg (*args, u32 *);
     507             : 
     508             :   if (0)
     509             :     ;
     510             : #define _(v, f, s) else if (unformat (input, s)) *r = IPSEC_API_INTEG_ALG_##f;
     511           0 :   foreach_ipsec_integ_alg
     512             : #undef _
     513           0 :     else return 0;
     514           0 :   return 1;
     515             : }
     516             : 
     517             : static int
     518           0 : api_ipsec_sad_entry_add_del (vat_main_t *vam)
     519             : {
     520           0 :   unformat_input_t *i = vam->input;
     521             :   vl_api_ipsec_sad_entry_add_del_t *mp;
     522           0 :   u32 sad_id = 0, spi = 0;
     523           0 :   u8 *ck = 0, *ik = 0;
     524           0 :   u8 is_add = 1;
     525             : 
     526           0 :   vl_api_ipsec_crypto_alg_t crypto_alg = IPSEC_API_CRYPTO_ALG_NONE;
     527           0 :   vl_api_ipsec_integ_alg_t integ_alg = IPSEC_API_INTEG_ALG_NONE;
     528           0 :   vl_api_ipsec_sad_flags_t flags = IPSEC_API_SAD_FLAG_NONE;
     529           0 :   vl_api_ipsec_proto_t protocol = IPSEC_API_PROTO_AH;
     530             :   vl_api_address_t tun_src, tun_dst;
     531             :   int ret;
     532             : 
     533           0 :   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     534             :     {
     535           0 :       if (unformat (i, "del"))
     536           0 :         is_add = 0;
     537           0 :       else if (unformat (i, "sad_id %d", &sad_id))
     538             :         ;
     539           0 :       else if (unformat (i, "spi %d", &spi))
     540             :         ;
     541           0 :       else if (unformat (i, "esp"))
     542           0 :         protocol = IPSEC_API_PROTO_ESP;
     543           0 :       else if (unformat (i, "tunnel_src %U", unformat_vl_api_address,
     544             :                          &tun_src))
     545             :         {
     546           0 :           flags |= IPSEC_API_SAD_FLAG_IS_TUNNEL;
     547           0 :           if (ADDRESS_IP6 == tun_src.af)
     548           0 :             flags |= IPSEC_API_SAD_FLAG_IS_TUNNEL_V6;
     549             :         }
     550           0 :       else if (unformat (i, "tunnel_dst %U", unformat_vl_api_address,
     551             :                          &tun_dst))
     552             :         {
     553           0 :           flags |= IPSEC_API_SAD_FLAG_IS_TUNNEL;
     554           0 :           if (ADDRESS_IP6 == tun_src.af)
     555           0 :             flags |= IPSEC_API_SAD_FLAG_IS_TUNNEL_V6;
     556             :         }
     557           0 :       else if (unformat (i, "crypto_alg %U", unformat_ipsec_api_crypto_alg,
     558             :                          &crypto_alg))
     559             :         ;
     560           0 :       else if (unformat (i, "crypto_key %U", unformat_hex_string, &ck))
     561             :         ;
     562           0 :       else if (unformat (i, "integ_alg %U", unformat_ipsec_api_integ_alg,
     563             :                          &integ_alg))
     564             :         ;
     565           0 :       else if (unformat (i, "integ_key %U", unformat_hex_string, &ik))
     566             :         ;
     567             :       else
     568             :         {
     569           0 :           clib_warning ("parse error '%U'", format_unformat_error, i);
     570           0 :           return -99;
     571             :         }
     572             :     }
     573             : 
     574           0 :   M (IPSEC_SAD_ENTRY_ADD_DEL, mp);
     575             : 
     576           0 :   mp->is_add = is_add;
     577           0 :   mp->entry.sad_id = ntohl (sad_id);
     578           0 :   mp->entry.protocol = protocol;
     579           0 :   mp->entry.spi = ntohl (spi);
     580           0 :   mp->entry.flags = flags;
     581             : 
     582           0 :   mp->entry.crypto_algorithm = crypto_alg;
     583           0 :   mp->entry.integrity_algorithm = integ_alg;
     584           0 :   mp->entry.crypto_key.length = vec_len (ck);
     585           0 :   mp->entry.integrity_key.length = vec_len (ik);
     586             : 
     587           0 :   if (mp->entry.crypto_key.length > sizeof (mp->entry.crypto_key.data))
     588           0 :     mp->entry.crypto_key.length = sizeof (mp->entry.crypto_key.data);
     589             : 
     590           0 :   if (mp->entry.integrity_key.length > sizeof (mp->entry.integrity_key.data))
     591           0 :     mp->entry.integrity_key.length = sizeof (mp->entry.integrity_key.data);
     592             : 
     593           0 :   if (ck)
     594           0 :     clib_memcpy (mp->entry.crypto_key.data, ck, mp->entry.crypto_key.length);
     595           0 :   if (ik)
     596           0 :     clib_memcpy (mp->entry.integrity_key.data, ik,
     597             :                  mp->entry.integrity_key.length);
     598             : 
     599           0 :   if (flags & IPSEC_API_SAD_FLAG_IS_TUNNEL)
     600             :     {
     601           0 :       clib_memcpy (&mp->entry.tunnel_src, &tun_src,
     602             :                    sizeof (mp->entry.tunnel_src));
     603           0 :       clib_memcpy (&mp->entry.tunnel_dst, &tun_dst,
     604             :                    sizeof (mp->entry.tunnel_dst));
     605             :     }
     606             : 
     607           0 :   S (mp);
     608           0 :   W (ret);
     609           0 :   return ret;
     610             : }
     611             : 
     612             : static int
     613           0 : api_ipsec_sad_entry_add_del_v2 (vat_main_t *vam)
     614             : {
     615           0 :   return -1;
     616             : }
     617             : 
     618             : static int
     619           0 : api_ipsec_interface_add_del_spd (vat_main_t *vam)
     620             : {
     621           0 :   vnet_main_t *vnm = vnet_get_main ();
     622           0 :   unformat_input_t *i = vam->input;
     623             :   vl_api_ipsec_interface_add_del_spd_t *mp;
     624             :   u32 sw_if_index;
     625           0 :   u8 sw_if_index_set = 0;
     626           0 :   u32 spd_id = (u32) ~0;
     627           0 :   u8 is_add = 1;
     628             :   int ret;
     629             : 
     630           0 :   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     631             :     {
     632           0 :       if (unformat (i, "del"))
     633           0 :         is_add = 0;
     634           0 :       else if (unformat (i, "spd_id %d", &spd_id))
     635             :         ;
     636           0 :       else if (unformat (i, "%U", unformat_vnet_sw_interface, vnm,
     637             :                          &sw_if_index))
     638           0 :         sw_if_index_set = 1;
     639           0 :       else if (unformat (i, "sw_if_index %d", &sw_if_index))
     640           0 :         sw_if_index_set = 1;
     641             :       else
     642             :         {
     643           0 :           clib_warning ("parse error '%U'", format_unformat_error, i);
     644           0 :           return -99;
     645             :         }
     646             :     }
     647             : 
     648           0 :   if (spd_id == (u32) ~0)
     649             :     {
     650           0 :       errmsg ("spd_id must be set");
     651           0 :       return -99;
     652             :     }
     653             : 
     654           0 :   if (sw_if_index_set == 0)
     655             :     {
     656           0 :       errmsg ("missing interface name or sw_if_index");
     657           0 :       return -99;
     658             :     }
     659             : 
     660           0 :   M (IPSEC_INTERFACE_ADD_DEL_SPD, mp);
     661             : 
     662           0 :   mp->spd_id = ntohl (spd_id);
     663           0 :   mp->sw_if_index = ntohl (sw_if_index);
     664           0 :   mp->is_add = is_add;
     665             : 
     666           0 :   S (mp);
     667           0 :   W (ret);
     668           0 :   return ret;
     669             : }
     670             : 
     671             : static int
     672           0 : api_ipsec_backend_dump (vat_main_t *vam)
     673             : {
     674           0 :   return -1;
     675             : }
     676             : 
     677             : static int
     678           0 : api_ipsec_select_backend (vat_main_t *vam)
     679             : {
     680           0 :   return -1;
     681             : }
     682             : 
     683             : static int
     684           0 : api_ipsec_set_async_mode (vat_main_t *vam)
     685             : {
     686           0 :   return -1;
     687             : }
     688             : 
     689             : static int
     690           0 : api_ipsec_spd_add_del (vat_main_t *vam)
     691             : {
     692           0 :   unformat_input_t *i = vam->input;
     693             :   vl_api_ipsec_spd_add_del_t *mp;
     694           0 :   u32 spd_id = ~0;
     695           0 :   u8 is_add = 1;
     696             :   int ret;
     697             : 
     698           0 :   while (unformat_check_input (i) != UNFORMAT_END_OF_INPUT)
     699             :     {
     700           0 :       if (unformat (i, "spd_id %d", &spd_id))
     701             :         ;
     702           0 :       else if (unformat (i, "del"))
     703           0 :         is_add = 0;
     704             :       else
     705             :         {
     706           0 :           clib_warning ("parse error '%U'", format_unformat_error, i);
     707           0 :           return -99;
     708             :         }
     709             :     }
     710           0 :   if (spd_id == ~0)
     711             :     {
     712           0 :       errmsg ("spd_id must be set");
     713           0 :       return -99;
     714             :     }
     715             : 
     716           0 :   M (IPSEC_SPD_ADD_DEL, mp);
     717             : 
     718           0 :   mp->spd_id = ntohl (spd_id);
     719           0 :   mp->is_add = is_add;
     720             : 
     721           0 :   S (mp);
     722           0 :   W (ret);
     723           0 :   return ret;
     724             : }
     725             : 
     726             : #include <vnet/ipsec/ipsec.api_test.c>
     727             : 
     728             : /*
     729             :  * Local Variables:
     730             :  * eval: (c-set-style "gnu")
     731             :  * End:
     732             :  */

Generated by: LCOV version 1.14