ikev2: support responder hostname
[vpp.git] / src / plugins / ikev2 / ikev2.api
1 /* Hey Emacs use -*- mode: C -*- */
2 /*
3  * Copyright (c) 2015-2020 Cisco and/or its affiliates.
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at:
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 option version = "1.0.1";
18
19 import "plugins/ikev2/ikev2_types.api";
20 import "vnet/ip/ip_types.api";
21 import "vnet/interface_types.api";
22
23 /** \brief Get the plugin version
24     @param client_index - opaque cookie to identify the sender
25     @param context - sender context, to match reply w/ request
26 */
27 define ikev2_plugin_get_version
28 {
29   u32 client_index;
30   u32 context;
31 };
32
33 /** \brief Reply to get the plugin version
34     @param context - returned sender context, to match reply w/ request
35     @param major - Incremented every time a known breaking behavior change is introduced
36     @param minor - Incremented with small changes, may be used to avoid buggy versions
37 */
38 define ikev2_plugin_get_version_reply
39 {
40   u32 context;
41   u32 major;
42   u32 minor;
43 };
44
45 /** \brief Dump all profiles
46     @param client_index - opaque cookie to identify the sender
47     @param context - sender context, to match reply w/ request
48 */
49 define ikev2_profile_dump
50 {
51   u32 client_index;
52   u32 context;
53   option status="in_progress";
54 };
55
56 /** \brief Details about all profiles
57     @param context - returned sender context, to match reply w/ request
58     @param profile - profile element with encapsulated attributes
59 */
60 define ikev2_profile_details
61 {
62   u32 context;
63   vl_api_ikev2_profile_t profile;
64   option status="in_progress";
65 };
66
67 /** \brief Dump all SAs
68     @param client_index - opaque cookie to identify the sender
69     @param context - sender context, to match reply w/ request
70 */
71 define ikev2_sa_dump
72 {
73   u32 client_index;
74   u32 context;
75
76   option status = "in_progress";
77 };
78
79 /** \brief Details about IKE SA
80     @param context - sender context, to match reply w/ request
81     @param retval - return code
82     @param sa - SA data
83 */
84 define ikev2_sa_details
85 {
86   u32 context;
87   i32 retval;
88
89   vl_api_ikev2_sa_t sa;
90   option status = "in_progress";
91 };
92
93 /** \brief Dump child SA of specific SA
94     @param client_index - opaque cookie to identify the sender
95     @param context - sender context, to match reply w/ request
96     @param sa_index - index of specific sa
97 */
98 define ikev2_child_sa_dump
99 {
100   u32 client_index;
101   u32 context;
102
103   u32 sa_index;
104   option vat_help = "sa_index <index>";
105   option status = "in_progress";
106 };
107
108 /** \brief Child SA details
109     @param context - sender context, to match reply w/ request
110     @param retval - return code
111     @param child_sa - child SA data
112 */
113 define ikev2_child_sa_details
114 {
115   u32 context;
116   i32 retval;
117
118   vl_api_ikev2_child_sa_t child_sa;
119   option status = "in_progress";
120 };
121
122 /** \brief get specific nonce
123     @param client_index - opaque cookie to identify the sender
124     @param context - sender context, to match reply w/ request
125     @param is_initiator - specify type initiator|responder of nonce
126     @param sa_index - index of specific sa
127 */
128 define ikev2_nonce_get
129 {
130   u32 client_index;
131   u32 context;
132
133   bool is_initiator;
134   u32 sa_index;
135   option vat_help = "initiator|responder sa_index <index>";
136   option status = "in_progress";
137 };
138
139 /** \brief reply on specific nonce
140     @param context - sender context, to match reply w/ request
141     @param retval - return code
142     @param data_len - nonce length
143     @param nonce - nonce data
144 */
145
146 define ikev2_nonce_get_reply
147 {
148   u32 context;
149   i32 retval;
150
151   u32 data_len;
152   u8 nonce[data_len];
153   option status = "in_progress";
154 };
155
156 /** \brief dump traffic selectors
157     @param client_index - opaque cookie to identify the sender
158     @param context - sender context, to match reply w/ request
159     @param is_initiator - specify type initiator|responder of nonce
160     @param sa_index - index of specific sa
161     @param child_sa_index - index of specific sa child of specific sa
162 */
163
164 define ikev2_traffic_selector_dump
165 {
166   u32 client_index;
167   u32 context;
168
169   bool is_initiator;
170   u32 sa_index;
171   u32 child_sa_index;
172   option vat_help = "initiator|responder sa_index <index> child_sa_index <index>";
173   option status = "in_progress";
174 };
175
176 /** \brief details on specific traffic selector
177     @param context - sender context, to match reply w/ request
178     @param retval - return code
179     @param ts - traffic selector data
180 */
181
182 define ikev2_traffic_selector_details
183 {
184   u32 context;
185   i32 retval;
186
187   vl_api_ikev2_ts_t ts;
188   option status = "in_progress";
189 };
190
191 /** \brief IKEv2: Add/delete profile
192     @param client_index - opaque cookie to identify the sender
193     @param context - sender context, to match reply w/ request
194     @param name - IKEv2 profile name
195     @param is_add - Add IKEv2 profile if non-zero, else delete
196 */
197 autoreply define ikev2_profile_add_del
198 {
199   u32 client_index;
200   u32 context;
201
202   string name[64];
203   bool is_add;
204   option vat_help = "name <profile_name> [del]";
205   option status="in_progress";
206 };
207
208 /** \brief IKEv2: Set IKEv2 profile authentication method
209     @param client_index - opaque cookie to identify the sender
210     @param context - sender context, to match reply w/ request
211     @param name - IKEv2 profile name
212     @param auth_method - IKEv2 authentication method (shared-key-mic/rsa-sig)
213     @param is_hex - Authentication data in hex format if non-zero, else string
214     @param data_len - Authentication data length
215     @param data - Authentication data (for rsa-sig cert file path)
216 */
217 autoreply define ikev2_profile_set_auth
218 {
219   u32 client_index;
220   u32 context;
221
222   string name[64];
223   u8 auth_method;
224   bool is_hex;
225   u32 data_len;
226   u8 data[data_len];
227   option vat_help = "name <profile_name> auth_method <method> (auth_data 0x<data> | auth_data <data>)";
228   option status="in_progress";
229 };
230
231 /** \brief IKEv2: Set IKEv2 profile local/remote identification
232     @param client_index - opaque cookie to identify the sender
233     @param context - sender context, to match reply w/ request
234     @param name - IKEv2 profile name
235     @param is_local - Identification is local if non-zero, else remote
236     @param id_type - Identification type
237     @param data_len - Identification data length
238     @param data - Identification data
239 */
240 autoreply define ikev2_profile_set_id
241 {
242   u32 client_index;
243   u32 context;
244
245   string name[64];
246   bool is_local;
247   u8 id_type;
248   u32 data_len;
249   u8 data[data_len];
250   option vat_help = "name <profile_name> id_type <type> (id_data 0x<data> | id_data <data>) (local|remote)";
251   option status="in_progress";
252 };
253
254 /** \brief IKEv2: Disable NAT traversal
255     @param client_index - opaque cookie to identify the sender
256     @param context - sender context, to match reply w/ request
257     @param name - IKEv2 profile name
258 */
259 autoreply define ikev2_profile_disable_natt
260 {
261   u32 client_index;
262   u32 context;
263
264   string name[64];
265   option status="in_progress";
266 };
267
268 /** \brief IKEv2: Set IKEv2 profile traffic selector parameters
269     @param client_index - opaque cookie to identify the sender
270     @param context - sender context, to match reply w/ request
271     @param name - IKEv2 profile name
272     @param ts - traffic selector data
273 */
274 autoreply define ikev2_profile_set_ts
275 {
276   u32 client_index;
277   u32 context;
278
279   string name[64];
280   vl_api_ikev2_ts_t ts;
281   option vat_help = "name <profile_name> protocol <proto> start_port <port> end_port <port> start_addr <ip> end_addr <ip> (local|remote)";
282   option status="in_progress";
283 };
284
285 /** \brief IKEv2: Set IKEv2 local RSA private key
286     @param client_index - opaque cookie to identify the sender
287     @param context - sender context, to match reply w/ request
288     @param key_file - Key file absolute path
289 */
290 autoreply define ikev2_set_local_key
291 {
292   u32 client_index;
293   u32 context;
294
295   string key_file[256];
296   option vat_help = "file <absolute_file_path>";
297   option status="in_progress";
298 };
299
300 /** \brief IKEv2: Set the tunnel interface which will be protected by IKE
301     If this API is not called, a new tunnel will be created
302     @param client_index - opaque cookie to identify the sender
303     @param context - sender context, to match reply w/ request
304     @param name - IKEv2 profile name
305     @param sw_if_index - Of an existing tunnel
306 */
307 autoreply define ikev2_set_tunnel_interface
308 {
309   u32 client_index;
310   u32 context;
311   string name[64];
312
313   vl_api_interface_index_t sw_if_index;
314   option status="in_progress";
315 };
316
317 /** \brief IKEv2: Set IKEv2 responder interface and IP address
318     @param client_index - opaque cookie to identify the sender
319     @param context - sender context, to match reply w/ request
320     @param name - IKEv2 profile name
321     @param responder - responder data
322 */
323 autoreply define ikev2_set_responder
324 {
325   u32 client_index;
326   u32 context;
327
328   string name[64];
329   vl_api_ikev2_responder_t responder;
330   option vat_help = "<profile_name> interface <interface> address <addr>";
331   option status="in_progress";
332 };
333
334 autoreply define ikev2_set_responder_hostname
335 {
336   u32 client_index;
337   u32 context;
338
339   string name[64];
340   string hostname[64];
341   vl_api_interface_index_t sw_if_index;
342   option status="in_progress";
343 };
344
345 /** \brief IKEv2: Set IKEv2 IKE transforms in SA_INIT proposal (RFC 7296)
346     @param client_index - opaque cookie to identify the sender
347     @param context - sender context, to match reply w/ request
348     @param name - IKEv2 profile name
349     @param tr - IKE transforms
350 */
351 autoreply define ikev2_set_ike_transforms
352 {
353   u32 client_index;
354   u32 context;
355
356   string name[64];
357   vl_api_ikev2_ike_transforms_t tr;
358   option vat_help = "<profile_name> <crypto alg> <key size> <integrity alg> <DH group>";
359   option status="in_progress";
360 };
361
362 /** \brief IKEv2: Set IKEv2 ESP transforms in SA_INIT proposal (RFC 7296)
363     @param client_index - opaque cookie to identify the sender
364     @param context - sender context, to match reply w/ request
365     @param name - IKEv2 profile name
366     @param tr - ESP transforms
367 */
368 autoreply define ikev2_set_esp_transforms
369 {
370   u32 client_index;
371   u32 context;
372
373   string name[64];
374   vl_api_ikev2_esp_transforms_t tr;
375   option vat_help = "<profile_name> <crypto alg> <key size> <integrity alg>";
376   option status="in_progress";
377 };
378
379 /** \brief IKEv2: Set Child SA lifetime, limited by time and/or data
380     @param client_index - opaque cookie to identify the sender
381     @param context - sender context, to match reply w/ request
382     @param name - IKEv2 profile name
383     @param lifetime - SA maximum life time in seconds (0 to disable)
384     @param lifetime_jitter - Jitter added to prevent simultaneous rekeying
385     @param handover - Hand over time
386     @param lifetime_maxdata - SA maximum life time in bytes (0 to disable)
387 */
388 autoreply define ikev2_set_sa_lifetime
389 {
390   u32 client_index;
391   u32 context;
392
393   string name[64];
394   u64 lifetime;
395   u32 lifetime_jitter;
396   u32 handover;
397   u64 lifetime_maxdata;
398   option vat_help = "<profile_name> <seconds> <jitter> <handover> <max bytes>";
399   option status="in_progress";
400 };
401
402 /** \brief IKEv2: Initiate the SA_INIT exchange
403     @param client_index - opaque cookie to identify the sender
404     @param context - sender context, to match reply w/ request
405     @param name - IKEv2 profile name
406 */
407 autoreply define ikev2_initiate_sa_init
408 {
409   u32 client_index;
410   u32 context;
411
412   string name[64];
413   option vat_help = "<profile_name>";
414   option status="in_progress";
415 };
416
417 /** \brief IKEv2: Initiate the delete IKE SA exchange
418     @param client_index - opaque cookie to identify the sender
419     @param context - sender context, to match reply w/ request
420     @param ispi - IKE SA initiator SPI
421 */
422 autoreply define ikev2_initiate_del_ike_sa
423 {
424   u32 client_index;
425   u32 context;
426
427   u64 ispi;
428   option vat_help = "<ispi>";
429   option status="in_progress";
430 };
431
432 /** \brief IKEv2: Initiate the delete Child SA exchange
433     @param client_index - opaque cookie to identify the sender
434     @param context - sender context, to match reply w/ request
435     @param ispi - Child SA initiator SPI
436 */
437 autoreply define ikev2_initiate_del_child_sa
438 {
439   u32 client_index;
440   u32 context;
441
442   u32 ispi;
443   option vat_help = "<ispi>";
444   option status="in_progress";
445 };
446
447 /** \brief IKEv2: Initiate the rekey Child SA exchange
448     @param client_index - opaque cookie to identify the sender
449     @param context - sender context, to match reply w/ request
450     @param ispi - Child SA initiator SPI
451 */
452 autoreply define ikev2_initiate_rekey_child_sa
453 {
454   u32 client_index;
455   u32 context;
456
457   u32 ispi;
458   option vat_help = "<ispi>";
459   option status="in_progress";
460 };
461
462 /** \brief IKEv2: Set UDP encapsulation
463     @param client_index - opaque cookie to identify the sender
464     @param context - sender context, to match reply w/ request
465     @param name - IKEv2 profile name
466 */
467 autoreply define ikev2_profile_set_udp_encap
468 {
469   u32 client_index;
470   u32 context;
471
472   string name[64];
473   option status="in_progress";
474 };
475
476 /** \brief IKEv2: Set/unset custom ipsec-over-udp port
477     @param client_index - opaque cookie to identify the sender
478     @param context - sender context, to match reply w/ request
479     @param is_set - whether set or unset custom port
480     @param port - port number
481     @param name - IKEv2 profile name
482 */
483 autoreply define ikev2_profile_set_ipsec_udp_port
484 {
485   u32 client_index;
486   u32 context;
487
488   u8 is_set;
489   u16 port;
490   string name[64];
491   option status="in_progress";
492 };
493
494 /** \brief IKEv2: Set liveness parameters
495     @param client_index - opaque cookie to identify the sender
496     @param context - sender context, to match reply w/ request
497     @param period - how often is liveness check performed
498     @param max_retries - max retries for liveness check
499 */
500 autoreply define ikev2_profile_set_liveness
501 {
502   u32 client_index;
503   u32 context;
504
505   u32 period;
506   u32 max_retries;
507   option status="in_progress";
508 };
509
510 counters ikev2 {
511   processed {
512     severity info;
513     type counter64;
514     units "packets";
515     description "packets processed";
516   };
517   ike_sa_init_retransmit {
518     severity info;
519     type counter64;
520     units "packets";
521     description "IKE SA INIT retransmit";
522   };
523   ike_sa_init_ignore {
524     severity error;
525     type counter64;
526     units "packets";
527     description "IKE_SA_INIT ignore (IKE SA already auth)";
528   };
529   ike_req_retransmit {
530     severity error;
531     type counter64;
532     units "packets";
533     description "IKE request retransmit";
534   };
535   ike_req_ignore {
536     severity error;
537     type counter64;
538     units "packets";
539     description "IKE request ignore (old msgid)";
540   };
541   not_ikev2 {
542     severity error;
543     type counter64;
544     units "packets";
545     description "Non IKEv2 packets received";
546   };
547   bad_length {
548     severity error;
549     type counter64;
550     units "packets";
551     description "Bad packet length";
552   };
553   malformed_packet {
554     severity error;
555     type counter64;
556     units "packets";
557     description "Malformed packet";
558   };
559   no_buff_space {
560     severity error;
561     type counter64;
562     units "packets";
563     description "No buffer space";
564   };
565   keepalive {
566     severity info;
567     type counter64;
568     units "packets";
569     description "IKE keepalive messages received";
570   };
571   rekey_req {
572     severity info;
573     type counter64;
574     units "packets";
575     description "IKE rekey requests received";
576   };
577   init_sa_req {
578     severity info;
579     type counter64;
580     units "packets";
581     description "IKE EXCHANGE SA requests received";
582   };
583   ike_auth_req {
584     severity info;
585     type counter64;
586     units "packets";
587     description "IKE AUTH SA requests received";
588   };
589 };
590 paths {
591   "/err/ikev2-ip4" "ike";
592   "/err/ikev2-ip6" "ike";
593   "/err/ikev2-ip4-natt" "ike";
594 };
595
596 /*
597  * Local Variables:
598  * eval: (c-set-style "gnu")
599  * End:
600  */