1 /* Hey Emacs use -*- mode: C -*- */
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:
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 option version = "5.0.0";
19 import "vnet/ipsec/ipsec_types.api";
20 import "vnet/interface_types.api";
21 import "vnet/ip/ip_types.api";
22 import "vnet/interface_types.api";
23 import "vnet/tunnel/tunnel_types.api";
25 /** \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)
32 autoreply define ipsec_spd_add_del
40 /** \brief IPsec: Add/delete SPD from interface
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
50 autoreply define ipsec_interface_add_del_spd
56 vl_api_interface_index_t sw_if_index;
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,
73 /** \brief IPsec: Security Policy Database entry
75 See RFC 4301, 4.4.1.1 on how to match packet to selectors
77 @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
80 @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
84 @param protocol - protocol type to match [0 means any] otherwise IANA value
85 @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]
89 @param policy - action to perform on match
90 @param sa_id - SAD instance id (control plane allocated)
92 typedef ipsec_spd_entry
99 vl_api_ipsec_spd_action_t policy;
100 /* Which protocol?? */
104 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;
109 u16 remote_port_start;
110 u16 remote_port_stop;
111 u16 local_port_start;
115 /** \brief IPsec: Add/delete Security Policy Database entry
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
122 define ipsec_spd_entry_add_del
127 vl_api_ipsec_spd_entry_t entry;
130 /** \brief IPsec: Reply Add/delete Security Policy Database entry
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
136 define ipsec_spd_entry_add_del_reply
143 /** \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
147 define ipsec_spds_dump {
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
157 define ipsec_spds_details {
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
169 define ipsec_spd_dump {
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
182 define ipsec_spd_details {
184 vl_api_ipsec_spd_entry_t entry;
187 /** \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
190 @param entry - Entry to add or delete
192 define ipsec_sad_entry_add_del
197 vl_api_ipsec_sad_entry_t entry;
199 define ipsec_sad_entry_add_del_v2
204 vl_api_ipsec_sad_entry_v2_t entry;
206 define ipsec_sad_entry_add_del_reply
212 define ipsec_sad_entry_add_del_v2_reply
219 /** \brief Add or Update Protection for a tunnel with IPSEC
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
226 For tunnels the ESP acts on the post-encapsulated packet. So if this
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
249 The mode for the inbound and outbound SA must be the same.
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
254 @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
257 @param sa_in - The ID [set] of inbound SAs
258 @param sa_out - The ID of outbound SA
260 typedef ipsec_tunnel_protect
262 vl_api_interface_index_t sw_if_index;
269 autoreply define ipsec_tunnel_protect_update
274 vl_api_ipsec_tunnel_protect_t tunnel;
277 autoreply define ipsec_tunnel_protect_del
282 vl_api_interface_index_t sw_if_index;
287 * @brief Dump all tunnel protections
289 define ipsec_tunnel_protect_dump
293 vl_api_interface_index_t sw_if_index;
296 define ipsec_tunnel_protect_details
299 vl_api_ipsec_tunnel_protect_t tun;
302 /** \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
309 define ipsec_spd_interface_dump {
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
321 define ipsec_spd_interface_details {
324 vl_api_interface_index_t sw_if_index;
329 u32 user_instance [default=0xffffffff];
330 vl_api_tunnel_mode_t mode;
331 vl_api_interface_index_t sw_if_index;
334 /** \brief Create an IPSec interface
336 define ipsec_itf_create {
339 vl_api_ipsec_itf_t itf;
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)
347 define ipsec_itf_create_reply
351 vl_api_interface_index_t sw_if_index;
354 autoreply define ipsec_itf_delete
358 vl_api_interface_index_t sw_if_index;
361 define ipsec_itf_dump
365 vl_api_interface_index_t sw_if_index;
368 define ipsec_itf_details
371 vl_api_ipsec_itf_t itf;
374 /** \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
385 define ipsec_sa_v2_dump
392 /** \brief IPsec security association database response
393 @param context - sender context which was passed in the request
394 @param entry - The SA details
395 @param sw_if_index - sw_if_index of tunnel interface, policy-based SAs = ~0
396 @param salt - 4 byte salt
397 @param seq - current sequence number for outbound
398 @param seq_hi - high 32 bits of ESN for outbound
399 @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
402 @param stat_index - index for the SA in the stats segment @ /net/ipsec/sa
404 define ipsec_sa_details {
406 vl_api_ipsec_sad_entry_t entry;
408 vl_api_interface_index_t sw_if_index;
411 u64 last_seq_inbound;
416 define ipsec_sa_v2_details {
418 vl_api_ipsec_sad_entry_v2_t entry;
420 vl_api_interface_index_t sw_if_index;
423 u64 last_seq_inbound;
429 /** \brief Dump IPsec backends
430 @param client_index - opaque cookie to identify the sender
431 @param context - sender context, to match reply w/ request
433 define ipsec_backend_dump {
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
444 define ipsec_backend_details {
447 vl_api_ipsec_proto_t protocol;
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
458 autoreply define ipsec_select_backend {
461 vl_api_ipsec_proto_t protocol;
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
471 autoreply define ipsec_set_async_mode {
479 * eval: (c-set-style "gnu")