blob: c009d8dffaa7725612060155f89aa75c68be503b [file] [log] [blame]
Neale Ranns17dcec02019-01-09 21:22:20 -08001/* Hey Emacs use -*- mode: C -*- */
Pavel Kotucek9c7ef032016-12-21 07:46:45 +01002/*
3 * Copyright (c) 2015-2016 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
Neale Rannsa9e27742020-12-23 16:22:28 +000017option version = "5.0.0";
Neale Ranns17dcec02019-01-09 21:22:20 -080018
Prashant Maheshwaridbf68c92019-11-14 12:42:59 +053019import "vnet/ipsec/ipsec_types.api";
Neale Rannsc87b66c2019-02-07 07:26:12 -080020import "vnet/interface_types.api";
Jakub Grajciar287d5e12020-02-28 08:26:32 +010021import "vnet/ip/ip_types.api";
22import "vnet/interface_types.api";
Neale Rannsdd4ccf22020-06-30 07:47:14 +000023import "vnet/tunnel/tunnel_types.api";
Dave Barach0d056e52017-09-28 15:11:16 -040024
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010025/** \brief IPsec: Add/delete Security Policy Database
26 @param client_index - opaque cookie to identify the sender
27 @param context - sender context, to match reply w/ request
28 @param is_add - add SPD if non-zero, else delete
29 @param spd_id - SPD instance id (control plane allocated)
30*/
31
Dave Barach11b8dbf2017-04-24 10:46:54 -040032autoreply define ipsec_spd_add_del
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010033{
34 u32 client_index;
35 u32 context;
Jakub Grajciar287d5e12020-02-28 08:26:32 +010036 bool is_add;
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010037 u32 spd_id;
38};
39
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010040/** \brief IPsec: Add/delete SPD from interface
41
42 @param client_index - opaque cookie to identify the sender
43 @param context - sender context, to match reply w/ request
44 @param is_add - add security mode if non-zero, else delete
45 @param sw_if_index - index of the interface
46 @param spd_id - SPD instance id to use for lookups
47*/
48
49
Dave Barach11b8dbf2017-04-24 10:46:54 -040050autoreply define ipsec_interface_add_del_spd
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010051{
52 u32 client_index;
53 u32 context;
54
Jakub Grajciar287d5e12020-02-28 08:26:32 +010055 bool is_add;
56 vl_api_interface_index_t sw_if_index;
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010057 u32 spd_id;
58};
59
Neale Ranns17dcec02019-01-09 21:22:20 -080060
61enum ipsec_spd_action
62{
63 /* bypass - no IPsec processing */
64 IPSEC_API_SPD_ACTION_BYPASS = 0,
65 /* discard - discard packet with ICMP processing */
66 IPSEC_API_SPD_ACTION_DISCARD,
67 /* resolve - send request to control plane for SA resolving */
68 IPSEC_API_SPD_ACTION_RESOLVE,
69 /* protect - apply IPsec policy using following parameters */
70 IPSEC_API_SPD_ACTION_PROTECT,
71};
72
73/** \brief IPsec: Security Policy Database entry
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010074
75 See RFC 4301, 4.4.1.1 on how to match packet to selectors
76
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010077 @param spd_id - SPD instance id (control plane allocated)
78 @param priority - priority of SPD entry (non-unique value). Used to order SPD matching - higher priorities match before lower
79 @param is_outbound - entry applies to outbound traffic if non-zero, otherwise applies to inbound traffic
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010080 @param remote_address_start - start of remote address range to match
81 @param remote_address_stop - end of remote address range to match
82 @param local_address_start - start of local address range to match
83 @param local_address_stop - end of local address range to match
Neale Ranns17dcec02019-01-09 21:22:20 -080084 @param protocol - protocol type to match [0 means any] otherwise IANA value
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010085 @param remote_port_start - start of remote port range to match ...
86 @param remote_port_stop - end of remote port range to match [0 to 65535 means ANY, 65535 to 0 means OPAQUE]
87 @param local_port_start - start of local port range to match ...
88 @param local_port_stop - end of remote port range to match [0 to 65535 means ANY, 65535 to 0 means OPAQUE]
Neale Ranns17dcec02019-01-09 21:22:20 -080089 @param policy - action to perform on match
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010090 @param sa_id - SAD instance id (control plane allocated)
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010091*/
Neale Ranns17dcec02019-01-09 21:22:20 -080092typedef ipsec_spd_entry
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010093{
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010094 u32 spd_id;
95 i32 priority;
Jakub Grajciar287d5e12020-02-28 08:26:32 +010096 bool is_outbound;
Pavel Kotucek9c7ef032016-12-21 07:46:45 +010097
Neale Ranns17dcec02019-01-09 21:22:20 -080098 u32 sa_id;
99 vl_api_ipsec_spd_action_t policy;
Jakub Grajciar287d5e12020-02-28 08:26:32 +0100100 /* Which protocol?? */
Pavel Kotucek9c7ef032016-12-21 07:46:45 +0100101 u8 protocol;
102
Neale Ranns17dcec02019-01-09 21:22:20 -0800103 // Selector
Neale Ranns17dcec02019-01-09 21:22:20 -0800104 vl_api_address_t remote_address_start;
105 vl_api_address_t remote_address_stop;
106 vl_api_address_t local_address_start;
107 vl_api_address_t local_address_stop;
108
Pavel Kotucek9c7ef032016-12-21 07:46:45 +0100109 u16 remote_port_start;
110 u16 remote_port_stop;
111 u16 local_port_start;
112 u16 local_port_stop;
Neale Ranns17dcec02019-01-09 21:22:20 -0800113};
Pavel Kotucek9c7ef032016-12-21 07:46:45 +0100114
Neale Ranns17dcec02019-01-09 21:22:20 -0800115/** \brief IPsec: Add/delete Security Policy Database entry
116
117 @param client_index - opaque cookie to identify the sender
118 @param context - sender context, to match reply w/ request
119 @param is_add - add SPD if non-zero, else delete
120 @param entry - Description of the entry to add/dell
121*/
Neale Rannsa09c1ff2019-02-04 01:10:30 -0800122define ipsec_spd_entry_add_del
Neale Ranns17dcec02019-01-09 21:22:20 -0800123{
124 u32 client_index;
125 u32 context;
Jakub Grajciar287d5e12020-02-28 08:26:32 +0100126 bool is_add;
Neale Ranns17dcec02019-01-09 21:22:20 -0800127 vl_api_ipsec_spd_entry_t entry;
128};
129
Neale Rannsa09c1ff2019-02-04 01:10:30 -0800130/** \brief IPsec: Reply Add/delete Security Policy Database entry
131
132 @param context - sender context, to match reply w/ request
133 @param retval - success/fail rutrun code
134 @param stat_index - An index for the policy in the stats segment @ /net/ipec/policy
135*/
136define ipsec_spd_entry_add_del_reply
137{
138 u32 context;
139 i32 retval;
140 u32 stat_index;
141};
142
Neale Ranns17dcec02019-01-09 21:22:20 -0800143/** \brief Dump IPsec all SPD IDs
144 @param client_index - opaque cookie to identify the sender
145 @param context - sender context, to match reply w/ request
146*/
147define ipsec_spds_dump {
148 u32 client_index;
149 u32 context;
150};
151
152/** \brief Dump IPsec all SPD IDs response
153 @param client_index - opaque cookie to identify the sender
154 @param spd_id - SPD instance id (control plane allocated)
155 @param npolicies - number of policies in SPD
156*/
157define ipsec_spds_details {
158 u32 context;
159 u32 spd_id;
160 u32 npolicies;
Jakub Grajciar287d5e12020-02-28 08:26:32 +0100161};
Neale Ranns17dcec02019-01-09 21:22:20 -0800162
163/** \brief Dump ipsec policy database data
164 @param client_index - opaque cookie to identify the sender
165 @param context - sender context, to match reply w/ request
166 @param spd_id - SPD instance id
167 @param sa_id - SA id, optional, set to ~0 to see all policies in SPD
168*/
169define ipsec_spd_dump {
170 u32 client_index;
171 u32 context;
172 u32 spd_id;
173 u32 sa_id;
174};
175
176/** \brief IPsec policy database response
177 @param context - sender context which was passed in the request
178 €param entry - The SPD entry.
179 @param bytes - byte count of packets matching this policy
180 @param packets - count of packets matching this policy
181*/
182define ipsec_spd_details {
183 u32 context;
184 vl_api_ipsec_spd_entry_t entry;
Neale Ranns17dcec02019-01-09 21:22:20 -0800185};
186
Pavel Kotucek9c7ef032016-12-21 07:46:45 +0100187/** \brief IPsec: Add/delete Security Association Database entry
188 @param client_index - opaque cookie to identify the sender
189 @param context - sender context, to match reply w/ request
Neale Ranns17dcec02019-01-09 21:22:20 -0800190 @param entry - Entry to add or delete
Pavel Kotucek9c7ef032016-12-21 07:46:45 +0100191 */
Neale Rannseba31ec2019-02-17 18:04:27 +0000192define ipsec_sad_entry_add_del
Pavel Kotucek9c7ef032016-12-21 07:46:45 +0100193{
194 u32 client_index;
195 u32 context;
Jakub Grajciar287d5e12020-02-28 08:26:32 +0100196 bool is_add;
Neale Ranns17dcec02019-01-09 21:22:20 -0800197 vl_api_ipsec_sad_entry_t entry;
Pavel Kotucek9c7ef032016-12-21 07:46:45 +0100198};
Neale Ranns041add72020-01-02 04:06:10 +0000199define ipsec_sad_entry_add_del_v2
200{
201 u32 client_index;
202 u32 context;
203 bool is_add;
204 vl_api_ipsec_sad_entry_v2_t entry;
205};
Neale Rannseba31ec2019-02-17 18:04:27 +0000206define ipsec_sad_entry_add_del_reply
207{
208 u32 context;
209 i32 retval;
210 u32 stat_index;
211};
Neale Ranns041add72020-01-02 04:06:10 +0000212define ipsec_sad_entry_add_del_v2_reply
213{
214 u32 context;
215 i32 retval;
216 u32 stat_index;
217};
Pavel Kotucek9c7ef032016-12-21 07:46:45 +0100218
Neale Rannsc87b66c2019-02-07 07:26:12 -0800219/** \brief Add or Update Protection for a tunnel with IPSEC
220
221 Tunnel protection directly associates an SA with all packets
222 ingress and egress on the tunnel. This could also be achieved by
223 assigning an SPD to the tunnel, but that would incur an unnessccary
224 SPD entry lookup.
225
226 For tunnels the ESP acts on the post-encapsulated packet. So if this
227 packet:
228 +---------+------+
229 | Payload | O-IP |
230 +---------+------+
231 where O-IP is the overlay IP addrees that was routed into the tunnel,
232 the resulting encapsulated packet will be:
233 +---------+------+------+
234 | Payload | O-IP | T-IP |
235 +---------+------+------+
236 where T-IP is the tunnel's src.dst IP addresses.
237 If the SAs used for protection are in transport mode then the ESP is
238 inserted before T-IP, i.e.:
239 +---------+------+-----+------+
240 | Payload | O-IP | ESP | T-IP |
241 +---------+------+-----+------+
242 If the SAs used for protection are in tunnel mode then another
243 encapsulation occurs, i.e.:
244 +---------+------+------+-----+------+
245 | Payload | O-IP | T-IP | ESP | C-IP |
246 +---------+------+------+-----+------+
247 where C-IP are the crypto endpoint IP addresses defined as the tunnel
248 endpoints in the SA.
249 The mode for the inbound and outbound SA must be the same.
250
251 @param client_index - opaque cookie to identify the sender
252 @param context - sender context, to match reply w/ request
253 @param sw_id_index - Tunnel interface to protect
Neale Ranns28287212019-12-16 00:53:11 +0000254 @param nh - The peer/next-hop on the tunnel to which the traffic
255 should be protected. For a P2P interface set this to the
256 all 0s address.
Neale Rannsc87b66c2019-02-07 07:26:12 -0800257 @param sa_in - The ID [set] of inbound SAs
258 @param sa_out - The ID of outbound SA
259*/
260typedef ipsec_tunnel_protect
261{
262 vl_api_interface_index_t sw_if_index;
Neale Ranns28287212019-12-16 00:53:11 +0000263 vl_api_address_t nh;
Neale Rannsc87b66c2019-02-07 07:26:12 -0800264 u32 sa_out;
265 u8 n_sa_in;
266 u32 sa_in[n_sa_in];
267};
268
269autoreply define ipsec_tunnel_protect_update
270{
271 u32 client_index;
272 u32 context;
273
274 vl_api_ipsec_tunnel_protect_t tunnel;
275};
276
277autoreply define ipsec_tunnel_protect_del
278{
279 u32 client_index;
280 u32 context;
281
282 vl_api_interface_index_t sw_if_index;
Neale Ranns28287212019-12-16 00:53:11 +0000283 vl_api_address_t nh;
Neale Rannsc87b66c2019-02-07 07:26:12 -0800284};
285
Neale Ranns12989b52019-09-26 16:20:19 +0000286/**
287 * @brief Dump all tunnel protections
288 */
Neale Rannsc87b66c2019-02-07 07:26:12 -0800289define ipsec_tunnel_protect_dump
290{
291 u32 client_index;
292 u32 context;
293 vl_api_interface_index_t sw_if_index;
294};
295
296define ipsec_tunnel_protect_details
297{
298 u32 context;
299 vl_api_ipsec_tunnel_protect_t tun;
300};
301
Filip Varga871bca92018-11-02 13:51:44 +0100302/** \brief IPsec: Get SPD interfaces
303 @param client_index - opaque cookie to identify the sender
304 @param context - sender context, to match reply w/ request
305 @param spd_index - SPD index
306 @param spd_index_valid - if 1 spd_index is used to filter
307 spd_index's, if 0 no filtering is done
308*/
309define ipsec_spd_interface_dump {
310 u32 client_index;
311 u32 context;
312 u32 spd_index;
313 u8 spd_index_valid;
314};
315
316/** \brief IPsec: SPD interface response
317 @param context - sender context which was passed in the request
318 @param spd_index - SPD index
319 @param sw_if_index - index of the interface
320*/
321define ipsec_spd_interface_details {
322 u32 context;
323 u32 spd_index;
Jakub Grajciar287d5e12020-02-28 08:26:32 +0100324 vl_api_interface_index_t sw_if_index;
Filip Varga871bca92018-11-02 13:51:44 +0100325};
326
Neale Rannsdd4ccf22020-06-30 07:47:14 +0000327typedef ipsec_itf
328{
329 u32 user_instance [default=0xffffffff];
330 vl_api_tunnel_mode_t mode;
331 vl_api_interface_index_t sw_if_index;
332};
333
334/** \brief Create an IPSec interface
335 */
336define ipsec_itf_create {
337 u32 client_index;
338 u32 context;
339 vl_api_ipsec_itf_t itf;
340};
341
342/** \brief Add IPsec interface interface response
343 @param context - sender context, to match reply w/ request
344 @param retval - return status
345 @param sw_if_index - sw_if_index of new interface (for successful add)
346*/
347define ipsec_itf_create_reply
348{
349 u32 context;
350 i32 retval;
351 vl_api_interface_index_t sw_if_index;
352};
353
354autoreply define ipsec_itf_delete
355{
356 u32 client_index;
357 u32 context;
358 vl_api_interface_index_t sw_if_index;
359};
360
361define ipsec_itf_dump
362{
363 u32 client_index;
364 u32 context;
365 vl_api_interface_index_t sw_if_index;
366};
367
368define ipsec_itf_details
369{
370 u32 context;
371 vl_api_ipsec_itf_t itf;
372};
373
Matthew Smith28029532017-09-26 13:33:44 -0500374/** \brief Dump IPsec security association
375 @param client_index - opaque cookie to identify the sender
376 @param context - sender context, to match reply w/ request
377 @param sa_id - optional ID of an SA to dump, if ~0 dump all SAs in SAD
378*/
Neale Rannsdd4ccf22020-06-30 07:47:14 +0000379define ipsec_sa_dump
380{
Matthew Smith28029532017-09-26 13:33:44 -0500381 u32 client_index;
382 u32 context;
383 u32 sa_id;
384};
Neale Ranns041add72020-01-02 04:06:10 +0000385define ipsec_sa_v2_dump
386{
387 u32 client_index;
388 u32 context;
389 u32 sa_id;
390};
Matthew Smith28029532017-09-26 13:33:44 -0500391
392/** \brief IPsec security association database response
393 @param context - sender context which was passed in the request
Neale Ranns041add72020-01-02 04:06:10 +0000394 @param entry - The SA details
Matthew Smith28029532017-09-26 13:33:44 -0500395 @param sw_if_index - sw_if_index of tunnel interface, policy-based SAs = ~0
Jakub Grajciar287d5e12020-02-28 08:26:32 +0100396 @param salt - 4 byte salt
Matthew Smith28029532017-09-26 13:33:44 -0500397 @param seq - current sequence number for outbound
Jakub Grajciar287d5e12020-02-28 08:26:32 +0100398 @param seq_hi - high 32 bits of ESN for outbound
Matthew Smith28029532017-09-26 13:33:44 -0500399 @param last_seq - highest sequence number received inbound
400 @param last_seq_hi - high 32 bits of highest ESN received inbound
401 @param replay_window - bit map of seq nums received relative to last_seq if using anti-replay
Matthew Smith48d32b42020-04-02 07:45:49 -0500402 @param stat_index - index for the SA in the stats segment @ /net/ipsec/sa
Matthew Smith28029532017-09-26 13:33:44 -0500403*/
404define ipsec_sa_details {
405 u32 context;
Neale Ranns8d7c5022019-02-06 01:41:05 -0800406 vl_api_ipsec_sad_entry_t entry;
407
Jakub Grajciar287d5e12020-02-28 08:26:32 +0100408 vl_api_interface_index_t sw_if_index;
Matthew Smith28029532017-09-26 13:33:44 -0500409 u32 salt;
410 u64 seq_outbound;
411 u64 last_seq_inbound;
412 u64 replay_window;
413
Matthew Smith48d32b42020-04-02 07:45:49 -0500414 u32 stat_index;
Matthew Smith28029532017-09-26 13:33:44 -0500415};
Neale Ranns041add72020-01-02 04:06:10 +0000416define ipsec_sa_v2_details {
417 u32 context;
418 vl_api_ipsec_sad_entry_v2_t entry;
419
420 vl_api_interface_index_t sw_if_index;
421 u32 salt;
422 u64 seq_outbound;
423 u64 last_seq_inbound;
424 u64 replay_window;
425
426 u32 stat_index;
427};
Matthew Smith28029532017-09-26 13:33:44 -0500428
Klement Sekerab4d30532018-11-08 13:00:02 +0100429/** \brief Dump IPsec backends
430 @param client_index - opaque cookie to identify the sender
431 @param context - sender context, to match reply w/ request
432*/
433define ipsec_backend_dump {
434 u32 client_index;
435 u32 context;
436};
437
438/** \brief IPsec backend details
439 @param name - name of the backend
440 @param protocol - IPsec protocol (value from ipsec_protocol_t)
441 @param index - backend index
442 @param active - set to 1 if the backend is active, otherwise 0
443*/
444define ipsec_backend_details {
445 u32 context;
Jakub Grajciar287d5e12020-02-28 08:26:32 +0100446 string name[128];
Neale Ranns17dcec02019-01-09 21:22:20 -0800447 vl_api_ipsec_proto_t protocol;
Klement Sekerab4d30532018-11-08 13:00:02 +0100448 u8 index;
Jakub Grajciar287d5e12020-02-28 08:26:32 +0100449 bool active;
Klement Sekerab4d30532018-11-08 13:00:02 +0100450};
451
452/** \brief Select IPsec backend
453 @param client_index - opaque cookie to identify the sender
454 @param context - sender context, to match reply w/ request
455 @param protocol - IPsec protocol (value from ipsec_protocol_t)
456 @param index - backend index
457*/
458autoreply define ipsec_select_backend {
459 u32 client_index;
460 u32 context;
Neale Ranns17dcec02019-01-09 21:22:20 -0800461 vl_api_ipsec_proto_t protocol;
Klement Sekerab4d30532018-11-08 13:00:02 +0100462 u8 index;
463};
464
Yulong Pei2e84d662020-08-14 18:21:08 +0800465
466/** \brief IPsec Set Async mode
467 @param client_index - opaque cookie to identify the sender
468 @param context - sender context, to match reply w/ request
469 @param async_enable - ipsec async mode on or off
470*/
471autoreply define ipsec_set_async_mode {
472 u32 client_index;
473 u32 context;
474 bool async_enable;
475};
476
Pavel Kotucek9c7ef032016-12-21 07:46:45 +0100477/*
478 * Local Variables:
479 * eval: (c-set-style "gnu")
480 * End:
481 */