2 *------------------------------------------------------------------
3 * ipsec_api.c - ipsec api
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:
10 * http://www.apache.org/licenses/LICENSE-2.0
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 *------------------------------------------------------------------
20 #include <vnet/vnet.h>
21 #include <vlibmemory/api.h>
22 #include <vnet/api_errno.h>
23 #include <vpp/app/version.h>
25 #include <ikev2/ikev2.h>
26 #include <ikev2/ikev2_priv.h>
28 /* define message IDs */
29 #include <plugins/ikev2/ikev2.api_enum.h>
30 #include <plugins/ikev2/ikev2.api_types.h>
32 extern ikev2_main_t ikev2_main;
34 #define IKEV2_PLUGIN_VERSION_MAJOR 1
35 #define IKEV2_PLUGIN_VERSION_MINOR 0
36 #define REPLY_MSG_ID_BASE ikev2_main.msg_id_base
37 #include <vlibapi/api_helper_macros.h>
40 vl_api_ikev2_plugin_get_version_t_handler (vl_api_ikev2_plugin_get_version_t *
43 ikev2_main_t *im = &ikev2_main;
44 vl_api_ikev2_plugin_get_version_reply_t *rmp;
45 int msg_size = sizeof (*rmp);
46 vl_api_registration_t *reg;
48 reg = vl_api_client_index_to_registration (mp->client_index);
52 rmp = vl_msg_api_alloc (msg_size);
53 clib_memset (rmp, 0, msg_size);
55 ntohs (VL_API_IKEV2_PLUGIN_GET_VERSION_REPLY + im->msg_id_base);
56 rmp->context = mp->context;
57 rmp->major = htonl (IKEV2_PLUGIN_VERSION_MAJOR);
58 rmp->minor = htonl (IKEV2_PLUGIN_VERSION_MINOR);
60 vl_api_send_msg (reg, (u8 *) rmp);
64 vl_api_ikev2_profile_add_del_t_handler (vl_api_ikev2_profile_add_del_t * mp)
66 vl_api_ikev2_profile_add_del_reply_t *rmp;
70 vlib_main_t *vm = vlib_get_main ();
72 u8 *tmp = format (0, "%s", mp->name);
73 error = ikev2_add_del_profile (vm, tmp, mp->is_add);
76 rv = VNET_API_ERROR_UNSPECIFIED;
78 rv = VNET_API_ERROR_UNIMPLEMENTED;
81 REPLY_MACRO (VL_API_IKEV2_PROFILE_ADD_DEL_REPLY);
85 vl_api_ikev2_profile_set_auth_t_handler
86 (vl_api_ikev2_profile_set_auth_t * mp)
88 vl_api_ikev2_profile_set_auth_reply_t *rmp;
92 vlib_main_t *vm = vlib_get_main ();
94 int data_len = ntohl (mp->data_len);
95 u8 *tmp = format (0, "%s", mp->name);
96 u8 *data = vec_new (u8, data_len);
97 clib_memcpy (data, mp->data, data_len);
98 error = ikev2_set_profile_auth (vm, tmp, mp->auth_method, data, mp->is_hex);
102 rv = VNET_API_ERROR_UNSPECIFIED;
104 rv = VNET_API_ERROR_UNIMPLEMENTED;
107 REPLY_MACRO (VL_API_IKEV2_PROFILE_SET_AUTH_REPLY);
111 vl_api_ikev2_profile_set_id_t_handler (vl_api_ikev2_profile_set_id_t * mp)
113 vl_api_ikev2_profile_add_del_reply_t *rmp;
117 vlib_main_t *vm = vlib_get_main ();
119 u8 *tmp = format (0, "%s", mp->name);
120 int data_len = ntohl (mp->data_len);
121 u8 *data = vec_new (u8, data_len);
122 clib_memcpy (data, mp->data, data_len);
123 error = ikev2_set_profile_id (vm, tmp, mp->id_type, data, mp->is_local);
127 rv = VNET_API_ERROR_UNSPECIFIED;
129 rv = VNET_API_ERROR_UNIMPLEMENTED;
132 REPLY_MACRO (VL_API_IKEV2_PROFILE_SET_ID_REPLY);
136 vl_api_ikev2_profile_set_ts_t_handler (vl_api_ikev2_profile_set_ts_t * mp)
138 vl_api_ikev2_profile_set_ts_reply_t *rmp;
142 vlib_main_t *vm = vlib_get_main ();
144 u8 *tmp = format (0, "%s", mp->name);
145 error = ikev2_set_profile_ts (vm, tmp, mp->proto, mp->start_port,
146 mp->end_port, (ip4_address_t) mp->start_addr,
147 (ip4_address_t) mp->end_addr, mp->is_local);
150 rv = VNET_API_ERROR_UNSPECIFIED;
152 rv = VNET_API_ERROR_UNIMPLEMENTED;
155 REPLY_MACRO (VL_API_IKEV2_PROFILE_SET_TS_REPLY);
159 vl_api_ikev2_set_local_key_t_handler (vl_api_ikev2_set_local_key_t * mp)
161 vl_api_ikev2_profile_set_ts_reply_t *rmp;
165 vlib_main_t *vm = vlib_get_main ();
168 error = ikev2_set_local_key (vm, mp->key_file);
170 rv = VNET_API_ERROR_UNSPECIFIED;
172 rv = VNET_API_ERROR_UNIMPLEMENTED;
175 REPLY_MACRO (VL_API_IKEV2_SET_LOCAL_KEY_REPLY);
179 vl_api_ikev2_set_responder_t_handler (vl_api_ikev2_set_responder_t * mp)
181 vl_api_ikev2_set_responder_reply_t *rmp;
185 vlib_main_t *vm = vlib_get_main ();
188 u8 *tmp = format (0, "%s", mp->name);
190 clib_memcpy (&ip4, mp->address, sizeof (ip4));
192 error = ikev2_set_profile_responder (vm, tmp, mp->sw_if_index, ip4);
195 rv = VNET_API_ERROR_UNSPECIFIED;
197 rv = VNET_API_ERROR_UNIMPLEMENTED;
200 REPLY_MACRO (VL_API_IKEV2_SET_RESPONDER_REPLY);
204 vl_api_ikev2_set_ike_transforms_t_handler (vl_api_ikev2_set_ike_transforms_t *
207 vl_api_ikev2_set_ike_transforms_reply_t *rmp;
211 vlib_main_t *vm = vlib_get_main ();
214 u8 *tmp = format (0, "%s", mp->name);
217 ikev2_set_profile_ike_transforms (vm, tmp, mp->crypto_alg, mp->integ_alg,
218 mp->dh_group, mp->crypto_key_size);
221 rv = VNET_API_ERROR_UNSPECIFIED;
223 rv = VNET_API_ERROR_UNIMPLEMENTED;
226 REPLY_MACRO (VL_API_IKEV2_SET_IKE_TRANSFORMS_REPLY);
230 vl_api_ikev2_set_esp_transforms_t_handler (vl_api_ikev2_set_esp_transforms_t *
233 vl_api_ikev2_set_esp_transforms_reply_t *rmp;
237 vlib_main_t *vm = vlib_get_main ();
240 u8 *tmp = format (0, "%s", mp->name);
243 ikev2_set_profile_esp_transforms (vm, tmp, mp->crypto_alg, mp->integ_alg,
244 mp->dh_group, mp->crypto_key_size);
247 rv = VNET_API_ERROR_UNSPECIFIED;
249 rv = VNET_API_ERROR_UNIMPLEMENTED;
252 REPLY_MACRO (VL_API_IKEV2_SET_ESP_TRANSFORMS_REPLY);
256 vl_api_ikev2_set_sa_lifetime_t_handler (vl_api_ikev2_set_sa_lifetime_t * mp)
258 vl_api_ikev2_set_sa_lifetime_reply_t *rmp;
262 vlib_main_t *vm = vlib_get_main ();
265 u8 *tmp = format (0, "%s", mp->name);
268 ikev2_set_profile_sa_lifetime (vm, tmp, mp->lifetime, mp->lifetime_jitter,
269 mp->handover, mp->lifetime_maxdata);
272 rv = VNET_API_ERROR_UNSPECIFIED;
274 rv = VNET_API_ERROR_UNIMPLEMENTED;
277 REPLY_MACRO (VL_API_IKEV2_SET_SA_LIFETIME_REPLY);
281 vl_api_ikev2_initiate_sa_init_t_handler (vl_api_ikev2_initiate_sa_init_t * mp)
283 vl_api_ikev2_initiate_sa_init_reply_t *rmp;
287 vlib_main_t *vm = vlib_get_main ();
290 u8 *tmp = format (0, "%s", mp->name);
292 error = ikev2_initiate_sa_init (vm, tmp);
295 rv = VNET_API_ERROR_UNSPECIFIED;
297 rv = VNET_API_ERROR_UNIMPLEMENTED;
300 REPLY_MACRO (VL_API_IKEV2_INITIATE_SA_INIT_REPLY);
304 vl_api_ikev2_initiate_del_ike_sa_t_handler (vl_api_ikev2_initiate_del_ike_sa_t
307 vl_api_ikev2_initiate_del_ike_sa_reply_t *rmp;
311 vlib_main_t *vm = vlib_get_main ();
314 error = ikev2_initiate_delete_ike_sa (vm, mp->ispi);
316 rv = VNET_API_ERROR_UNSPECIFIED;
318 rv = VNET_API_ERROR_UNIMPLEMENTED;
321 REPLY_MACRO (VL_API_IKEV2_INITIATE_DEL_IKE_SA_REPLY);
325 vl_api_ikev2_initiate_del_child_sa_t_handler
326 (vl_api_ikev2_initiate_del_child_sa_t * mp)
328 vl_api_ikev2_initiate_del_child_sa_reply_t *rmp;
332 vlib_main_t *vm = vlib_get_main ();
335 error = ikev2_initiate_delete_child_sa (vm, mp->ispi);
337 rv = VNET_API_ERROR_UNSPECIFIED;
339 rv = VNET_API_ERROR_UNIMPLEMENTED;
342 REPLY_MACRO (VL_API_IKEV2_INITIATE_DEL_CHILD_SA_REPLY);
346 vl_api_ikev2_initiate_rekey_child_sa_t_handler
347 (vl_api_ikev2_initiate_rekey_child_sa_t * mp)
349 vl_api_ikev2_initiate_rekey_child_sa_reply_t *rmp;
353 vlib_main_t *vm = vlib_get_main ();
356 error = ikev2_initiate_rekey_child_sa (vm, mp->ispi);
358 rv = VNET_API_ERROR_UNSPECIFIED;
360 rv = VNET_API_ERROR_UNIMPLEMENTED;
363 REPLY_MACRO (VL_API_IKEV2_INITIATE_REKEY_CHILD_SA_REPLY);
366 #include <ikev2/ikev2.api.c>
367 static clib_error_t *
368 ikev2_api_init (vlib_main_t * vm)
370 ikev2_main_t *im = &ikev2_main;
372 /* Ask for a correctly-sized block of API message decode slots */
373 im->msg_id_base = setup_message_id_table ();
378 VLIB_INIT_FUNCTION (ikev2_api_init);
381 * fd.io coding-style-patch-verification: ON
384 * eval: (c-set-style "gnu")