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 = "3.0.0";
19 import "vnet/ipsec/ipsec_types.api";
20 import "vnet/interface_types.api";
22 /** \brief IPsec: Add/delete Security Policy Database
23 @param client_index - opaque cookie to identify the sender
24 @param context - sender context, to match reply w/ request
25 @param is_add - add SPD if non-zero, else delete
26 @param spd_id - SPD instance id (control plane allocated)
29 autoreply define ipsec_spd_add_del
37 /** \brief IPsec: Add/delete SPD from interface
39 @param client_index - opaque cookie to identify the sender
40 @param context - sender context, to match reply w/ request
41 @param is_add - add security mode if non-zero, else delete
42 @param sw_if_index - index of the interface
43 @param spd_id - SPD instance id to use for lookups
47 autoreply define ipsec_interface_add_del_spd
60 /* bypass - no IPsec processing */
61 IPSEC_API_SPD_ACTION_BYPASS = 0,
62 /* discard - discard packet with ICMP processing */
63 IPSEC_API_SPD_ACTION_DISCARD,
64 /* resolve - send request to control plane for SA resolving */
65 IPSEC_API_SPD_ACTION_RESOLVE,
66 /* protect - apply IPsec policy using following parameters */
67 IPSEC_API_SPD_ACTION_PROTECT,
70 /** \brief IPsec: Security Policy Database entry
72 See RFC 4301, 4.4.1.1 on how to match packet to selectors
74 @param spd_id - SPD instance id (control plane allocated)
75 @param priority - priority of SPD entry (non-unique value). Used to order SPD matching - higher priorities match before lower
76 @param is_outbound - entry applies to outbound traffic if non-zero, otherwise applies to inbound traffic
77 @param remote_address_start - start of remote address range to match
78 @param remote_address_stop - end of remote address range to match
79 @param local_address_start - start of local address range to match
80 @param local_address_stop - end of local address range to match
81 @param protocol - protocol type to match [0 means any] otherwise IANA value
82 @param remote_port_start - start of remote port range to match ...
83 @param remote_port_stop - end of remote port range to match [0 to 65535 means ANY, 65535 to 0 means OPAQUE]
84 @param local_port_start - start of local port range to match ...
85 @param local_port_stop - end of remote port range to match [0 to 65535 means ANY, 65535 to 0 means OPAQUE]
86 @param policy - action to perform on match
87 @param sa_id - SAD instance id (control plane allocated)
89 typedef ipsec_spd_entry
96 vl_api_ipsec_spd_action_t policy;
100 vl_api_address_t remote_address_start;
101 vl_api_address_t remote_address_stop;
102 vl_api_address_t local_address_start;
103 vl_api_address_t local_address_stop;
105 u16 remote_port_start;
106 u16 remote_port_stop;
107 u16 local_port_start;
111 /** \brief IPsec: Add/delete Security Policy Database entry
113 @param client_index - opaque cookie to identify the sender
114 @param context - sender context, to match reply w/ request
115 @param is_add - add SPD if non-zero, else delete
116 @param entry - Description of the entry to add/dell
118 define ipsec_spd_entry_add_del
123 vl_api_ipsec_spd_entry_t entry;
126 /** \brief IPsec: Reply Add/delete Security Policy Database entry
128 @param context - sender context, to match reply w/ request
129 @param retval - success/fail rutrun code
130 @param stat_index - An index for the policy in the stats segment @ /net/ipec/policy
132 define ipsec_spd_entry_add_del_reply
139 /** \brief Dump IPsec all SPD IDs
140 @param client_index - opaque cookie to identify the sender
141 @param context - sender context, to match reply w/ request
143 define ipsec_spds_dump {
148 /** \brief Dump IPsec all SPD IDs response
149 @param client_index - opaque cookie to identify the sender
150 @param spd_id - SPD instance id (control plane allocated)
151 @param npolicies - number of policies in SPD
153 define ipsec_spds_details {
159 /** \brief Dump ipsec policy database data
160 @param client_index - opaque cookie to identify the sender
161 @param context - sender context, to match reply w/ request
162 @param spd_id - SPD instance id
163 @param sa_id - SA id, optional, set to ~0 to see all policies in SPD
165 define ipsec_spd_dump {
172 /** \brief IPsec policy database response
173 @param context - sender context which was passed in the request
174 €param entry - The SPD entry.
175 @param bytes - byte count of packets matching this policy
176 @param packets - count of packets matching this policy
178 define ipsec_spd_details {
180 vl_api_ipsec_spd_entry_t entry;
183 /** \brief IPsec: Add/delete Security Association Database entry
184 @param client_index - opaque cookie to identify the sender
185 @param context - sender context, to match reply w/ request
186 @param entry - Entry to add or delete
188 define ipsec_sad_entry_add_del
193 vl_api_ipsec_sad_entry_t entry;
195 define ipsec_sad_entry_add_del_reply
202 /** \brief Add or Update Protection for a tunnel with IPSEC
204 Tunnel protection directly associates an SA with all packets
205 ingress and egress on the tunnel. This could also be achieved by
206 assigning an SPD to the tunnel, but that would incur an unnessccary
209 For tunnels the ESP acts on the post-encapsulated packet. So if this
214 where O-IP is the overlay IP addrees that was routed into the tunnel,
215 the resulting encapsulated packet will be:
216 +---------+------+------+
217 | Payload | O-IP | T-IP |
218 +---------+------+------+
219 where T-IP is the tunnel's src.dst IP addresses.
220 If the SAs used for protection are in transport mode then the ESP is
221 inserted before T-IP, i.e.:
222 +---------+------+-----+------+
223 | Payload | O-IP | ESP | T-IP |
224 +---------+------+-----+------+
225 If the SAs used for protection are in tunnel mode then another
226 encapsulation occurs, i.e.:
227 +---------+------+------+-----+------+
228 | Payload | O-IP | T-IP | ESP | C-IP |
229 +---------+------+------+-----+------+
230 where C-IP are the crypto endpoint IP addresses defined as the tunnel
232 The mode for the inbound and outbound SA must be the same.
234 @param client_index - opaque cookie to identify the sender
235 @param context - sender context, to match reply w/ request
236 @param sw_id_index - Tunnel interface to protect
237 @param sa_in - The ID [set] of inbound SAs
238 @param sa_out - The ID of outbound SA
240 typedef ipsec_tunnel_protect
242 vl_api_interface_index_t sw_if_index;
248 autoreply define ipsec_tunnel_protect_update
253 vl_api_ipsec_tunnel_protect_t tunnel;
256 autoreply define ipsec_tunnel_protect_del
261 vl_api_interface_index_t sw_if_index;
265 * @brief Dump all tunnel protections
267 define ipsec_tunnel_protect_dump
271 vl_api_interface_index_t sw_if_index;
274 define ipsec_tunnel_protect_details
277 vl_api_ipsec_tunnel_protect_t tun;
280 /** \brief IPsec: Get SPD interfaces
281 @param client_index - opaque cookie to identify the sender
282 @param context - sender context, to match reply w/ request
283 @param spd_index - SPD index
284 @param spd_index_valid - if 1 spd_index is used to filter
285 spd_index's, if 0 no filtering is done
287 define ipsec_spd_interface_dump {
294 /** \brief IPsec: SPD interface response
295 @param context - sender context which was passed in the request
296 @param spd_index - SPD index
297 @param sw_if_index - index of the interface
299 define ipsec_spd_interface_details {
305 /** \brief Add or delete IPsec tunnel interface
308 use the tunnel protect APIs instead
310 @param client_index - opaque cookie to identify the sender
311 @param context - sender context, to match reply w/ request
312 @param is_add - add IPsec tunnel interface if nonzero, else delete
313 @param is_ip6 - tunnel v6 or v4
314 @param esn - enable extended sequence numbers if nonzero, else disable
315 @param anti_replay - enable anti replay check if nonzero, else disable
316 @param local_ip - local IP address
317 @param remote_ip - IP address of remote IPsec peer
318 @param local_spi - SPI of outbound IPsec SA
319 @param remote_spi - SPI of inbound IPsec SA
320 @param crypto_alg - encryption algorithm ID
321 @param local_crypto_key_len - length of local crypto key in bytes
322 @param local_crypto_key - crypto key for outbound IPsec SA
323 @param remote_crypto_key_len - length of remote crypto key in bytes
324 @param remote_crypto_key - crypto key for inbound IPsec SA
325 @param integ_alg - integrity algorithm ID
326 @param local_integ_key_len - length of local integrity key in bytes
327 @param local_integ_key - integrity key for outbound IPsec SA
328 @param remote_integ_key_len - length of remote integrity key in bytes
329 @param remote_integ_key - integrity key for inbound IPsec SA
330 @param renumber - intf display name uses a specified instance if != 0
331 @param show_instance - instance to display for intf if renumber is set
332 @param udp_encap - enable UDP encapsulation for NAT traversal
333 @param tx_table_id - the FIB id used after packet encap
334 @param salt - for use with counter mode ciphers
336 define ipsec_tunnel_if_add_del {
342 vl_api_address_t local_ip;
343 vl_api_address_t remote_ip;
347 u8 local_crypto_key_len;
348 u8 local_crypto_key[128];
349 u8 remote_crypto_key_len;
350 u8 remote_crypto_key[128];
352 u8 local_integ_key_len;
353 u8 local_integ_key[128];
354 u8 remote_integ_key_len;
355 u8 remote_integ_key[128];
363 /** \brief Add/delete IPsec tunnel interface response
364 @param context - sender context, to match reply w/ request
365 @param retval - return status
366 @param sw_if_index - sw_if_index of new interface (for successful add)
368 define ipsec_tunnel_if_add_del_reply {
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
379 define ipsec_sa_dump {
385 /** \brief IPsec security association database response
386 @param context - sender context which was passed in the request
387 @param sa_id - SA ID, policy-based SAs >=0, tunnel interface SAs = 0
388 @param sw_if_index - sw_if_index of tunnel interface, policy-based SAs = ~0
389 @param spi - security parameter index
390 @param protocol - IPsec protocol (value from ipsec_protocol_t)
391 @param crypto_alg - crypto algorithm (value from ipsec_crypto_alg_t)
392 @param crypto_key_len - length of crypto_key in bytes
393 @param crypto_key - crypto keying material
394 @param integ_alg - integrity algorithm (value from ipsec_integ_alg_t)
395 @param integ_key_len - length of integ_key in bytes
396 @param integ_key - integrity keying material
397 @param use_esn - using extended sequence numbers when non-zero
398 @param use_anti_replay - using anti-replay window when non-zero
399 @param is_tunnel - IPsec tunnel mode when non-zero, else transport mode
400 @param is_tunnel_ipv6 - If using tunnel mode, endpoints are IPv6
401 @param tunnel_src_addr - Tunnel source address if using tunnel mode
402 @param tunnel_dst_addr - Tunnel destination address is using tunnel mode
403 @param salt - 4 byte salt
404 @param seq - current sequence number for outbound
405 @param seq_hi - high 32 bits of ESN for outbound
406 @param last_seq - highest sequence number received inbound
407 @param last_seq_hi - high 32 bits of highest ESN received inbound
408 @param replay_window - bit map of seq nums received relative to last_seq if using anti-replay
409 @param total_data_size - total bytes sent or received
410 @param udp_encap - 1 if UDP encap enabled, 0 otherwise
412 define ipsec_sa_details {
414 vl_api_ipsec_sad_entry_t entry;
419 u64 last_seq_inbound;
425 /** \brief Set new SA on IPsec interface
429 @param client_index - opaque cookie to identify the sender
430 @param context - sender context, to match reply w/ request
431 @param sw_if_index - index of tunnel interface
432 @param sa_id - ID of SA to use
433 @param is_outbound - 1 if outbound (local) SA, 0 if inbound (remote)
435 autoreply define ipsec_tunnel_if_set_sa {
443 /** \brief Dump IPsec backends
444 @param client_index - opaque cookie to identify the sender
445 @param context - sender context, to match reply w/ request
447 define ipsec_backend_dump {
452 /** \brief IPsec backend details
453 @param name - name of the backend
454 @param protocol - IPsec protocol (value from ipsec_protocol_t)
455 @param index - backend index
456 @param active - set to 1 if the backend is active, otherwise 0
458 define ipsec_backend_details {
461 vl_api_ipsec_proto_t protocol;
466 /** \brief Select IPsec backend
467 @param client_index - opaque cookie to identify the sender
468 @param context - sender context, to match reply w/ request
469 @param protocol - IPsec protocol (value from ipsec_protocol_t)
470 @param index - backend index
472 autoreply define ipsec_select_backend {
475 vl_api_ipsec_proto_t protocol;
481 * eval: (c-set-style "gnu")