blob: afb0960c78a608a6646db286f782f237efce9d56 [file] [log] [blame]
Neale Ranns008dbe12018-09-07 09:32:36 -07001/* Hey Emacs use -*- mode: C -*- */
Dave Barachb5e8a772016-12-06 12:04:42 -05002/*
Neale Ranns008dbe12018-09-07 09:32:36 -07003 * Copyright (c) 2018 Cisco and/or its affiliates.
Dave Barachb5e8a772016-12-06 12:04:42 -05004 * 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/** \file
18
19 This file defines vpp IP control-plane API messages which are generally
20 called through a shared memory interface.
21*/
22
Klement Sekera3a343d42019-05-16 14:35:46 +020023option version = "2.0.1";
Neale Ranns947ea622018-06-07 23:48:20 -070024import "vnet/ip/ip_types.api";
Neale Ranns31ed7442018-02-23 05:29:09 -080025import "vnet/fib/fib_types.api";
Neale Rannsde5b08f2018-08-29 06:37:18 -070026import "vnet/ethernet/ethernet_types.api";
Dave Barach0d056e52017-09-28 15:11:16 -040027
Neale Ranns28ab9cc2017-08-14 07:18:42 -070028/** \brief Add / del table request
29 A table can be added multiple times, but need be deleted only once.
30 @param client_index - opaque cookie to identify the sender
31 @param context - sender context, to match reply w/ request
32 @param is_ipv6 - V4 or V6 table
33 @param table_id - table ID associated with the route
34 This table ID will apply to both the unicats
35 and mlticast FIBs
Neale Ranns2297af02017-09-12 09:45:04 -070036 @param name - A client provided name/tag for the table. If this is
37 not set by the client, then VPP will generate something
38 meaningfull.
Neale Ranns28ab9cc2017-08-14 07:18:42 -070039*/
40autoreply define ip_table_add_del
41{
42 u32 client_index;
43 u32 context;
44 u32 table_id;
45 u8 is_ipv6;
46 u8 is_add;
Neale Ranns2297af02017-09-12 09:45:04 -070047 u8 name[64];
Neale Ranns28ab9cc2017-08-14 07:18:42 -070048};
49
Dave Barachb5e8a772016-12-06 12:04:42 -050050/** \brief Dump IP fib table
51 @param client_index - opaque cookie to identify the sender
52*/
53define ip_fib_dump
54{
55 u32 client_index;
56 u32 context;
57};
58
Dave Barachb5e8a772016-12-06 12:04:42 -050059/** \brief IP FIB table response
60 @param table_id - IP fib table id
61 @address_length - mask length
62 @address - ip4 prefix
63 @param count - the number of fib_path in path
64 @param path - array of of fib_path structures
65*/
66manual_endian manual_print define ip_fib_details
67{
68 u32 context;
69 u32 table_id;
Neale Ranns2297af02017-09-12 09:45:04 -070070 u8 table_name[64];
Dave Barachb5e8a772016-12-06 12:04:42 -050071 u8 address_length;
72 u8 address[4];
73 u32 count;
Neale Ranns008dbe12018-09-07 09:32:36 -070074 u32 stats_index;
Dave Barachb5e8a772016-12-06 12:04:42 -050075 vl_api_fib_path_t path[count];
76};
77
78/** \brief Dump IP6 fib table
79 @param client_index - opaque cookie to identify the sender
80*/
81define ip6_fib_dump
82{
83 u32 client_index;
84 u32 context;
85};
86
Neale Ranns2297af02017-09-12 09:45:04 -070087/** \brief IP6 FIB table entry response
Dave Barachb5e8a772016-12-06 12:04:42 -050088 @param table_id - IP6 fib table id
Neale Ranns2297af02017-09-12 09:45:04 -070089 @param address_length - mask length
90 @param address - ip6 prefix
Dave Barachb5e8a772016-12-06 12:04:42 -050091 @param count - the number of fib_path in path
92 @param path - array of of fib_path structures
93*/
94manual_endian manual_print define ip6_fib_details
95{
96 u32 context;
97 u32 table_id;
Neale Ranns2297af02017-09-12 09:45:04 -070098 u8 table_name[64];
Dave Barachb5e8a772016-12-06 12:04:42 -050099 u8 address_length;
100 u8 address[16];
101 u32 count;
Neale Ranns008dbe12018-09-07 09:32:36 -0700102 u32 stats_index;
Dave Barachb5e8a772016-12-06 12:04:42 -0500103 vl_api_fib_path_t path[count];
104};
105
Neale Ranns37029302018-08-10 05:30:06 -0700106/** \brief IP neighbor flags
107 @param is_static - A static neighbor Entry - there are not flushed
108 If the interface goes down.
109 @param is_no_fib_entry - Do not create a corresponding entry in the FIB
110 table for the neighbor.
111*/
112enum ip_neighbor_flags
113{
114 IP_API_NEIGHBOR_FLAG_NONE = 0,
115 IP_API_NEIGHBOR_FLAG_STATIC = 0x1,
116 IP_API_NEIGHBOR_FLAG_NO_FIB_ENTRY = 0x2,
Neale Ranns37029302018-08-10 05:30:06 -0700117};
118
119/** \brief IP neighbor
120 @param sw_if_index - interface used to reach neighbor
121 @param mac_address - l2 address of the neighbor
122 @param ip_address - ip4 or ip6 address of the neighbor
123 @param flags - flags for the nieghbor
124*/
125typedef ip_neighbor {
126 u32 sw_if_index;
127 vl_api_ip_neighbor_flags_t flags;
128 vl_api_mac_address_t mac_address;
129 vl_api_address_t ip_address;
130};
131
132/** \brief IP neighbor add / del request
133 @param client_index - opaque cookie to identify the sender
134 @param context - sender context, to match reply w/ request
135 @param is_add - 1 to add neighbor, 0 to delete
136 @param neighbor - the neighor to add/remove
137*/
138define ip_neighbor_add_del
139{
140 u32 client_index;
141 u32 context;
142 /* 1 = add, 0 = delete */
143 u8 is_add;
144 vl_api_ip_neighbor_t neighbor;
145};
146define ip_neighbor_add_del_reply
147{
148 u32 context;
149 i32 retval;
150 u32 stats_index;
151};
152
Dave Barachb5e8a772016-12-06 12:04:42 -0500153/** \brief Dump IP neighboors
154 @param client_index - opaque cookie to identify the sender
155 @param context - sender context, to match reply w/ request
Jon Loeligeraf8dfbf2017-11-08 13:07:39 -0600156 @param sw_if_index - the interface to dump neighboors, ~0 == all
Dave Barachb5e8a772016-12-06 12:04:42 -0500157 @param is_ipv6 - [1|0] to indicate if address family is ipv[6|4]
158*/
159define ip_neighbor_dump
160{
Neale Ranns37029302018-08-10 05:30:06 -0700161 u32 client_index;
162 u32 context;
163 u32 sw_if_index;
164 u8 is_ipv6;
Dave Barachb5e8a772016-12-06 12:04:42 -0500165};
166
167/** \brief IP neighboors dump response
168 @param context - sender context which was passed in the request
Neale Ranns37029302018-08-10 05:30:06 -0700169 @param neighbour - the neighbor
Dave Barachb5e8a772016-12-06 12:04:42 -0500170*/
171define ip_neighbor_details {
Dave Barachb5e8a772016-12-06 12:04:42 -0500172 u32 context;
Neale Ranns37029302018-08-10 05:30:06 -0700173 vl_api_ip_neighbor_t neighbor;
Neale Ranns14260392018-09-28 05:00:57 -0700174};
175
Dave Barachb5e8a772016-12-06 12:04:42 -0500176/** \brief Set the ip flow hash config for a fib request
177 @param client_index - opaque cookie to identify the sender
178 @param context - sender context, to match reply w/ request
179 @param vrf_id - vrf/fib id
180 @param is_ipv6 - if non-zero the fib is ip6, else ip4
181 @param src - if non-zero include src in flow hash
182 @param dst - if non-zero include dst in flow hash
183 @param sport - if non-zero include sport in flow hash
184 @param dport - if non-zero include dport in flow hash
185 @param proto -if non-zero include proto in flow hash
186 @param reverse - if non-zero include reverse in flow hash
Mohsin Kazmi2af0e3a2018-11-20 11:11:12 +0100187 @param symmetric - if non-zero include symmetry in flow hash
Dave Barachb5e8a772016-12-06 12:04:42 -0500188*/
Dave Barach11b8dbf2017-04-24 10:46:54 -0400189autoreply define set_ip_flow_hash
Dave Barachb5e8a772016-12-06 12:04:42 -0500190{
191 u32 client_index;
192 u32 context;
193 u32 vrf_id;
194 u8 is_ipv6;
195 u8 src;
196 u8 dst;
197 u8 sport;
198 u8 dport;
199 u8 proto;
200 u8 reverse;
Mohsin Kazmi2af0e3a2018-11-20 11:11:12 +0100201 u8 symmetric;
Dave Barachb5e8a772016-12-06 12:04:42 -0500202};
203
Dave Barachb5e8a772016-12-06 12:04:42 -0500204/** \brief IPv6 router advertisement config request
205 @param client_index - opaque cookie to identify the sender
206 @param context - sender context, to match reply w/ request
207 @param suppress -
208 @param managed -
209 @param other -
210 @param ll_option -
211 @param send_unicast -
212 @param cease -
213 @param is_no -
214 @param default_router -
215 @param max_interval -
216 @param min_interval -
217 @param lifetime -
218 @param initial_count -
219 @param initial_interval -
220*/
Dave Barach11b8dbf2017-04-24 10:46:54 -0400221autoreply define sw_interface_ip6nd_ra_config
Dave Barachb5e8a772016-12-06 12:04:42 -0500222{
223 u32 client_index;
224 u32 context;
225 u32 sw_if_index;
226 u8 suppress;
227 u8 managed;
228 u8 other;
229 u8 ll_option;
230 u8 send_unicast;
231 u8 cease;
232 u8 is_no;
233 u8 default_router;
234 u32 max_interval;
235 u32 min_interval;
236 u32 lifetime;
237 u32 initial_count;
238 u32 initial_interval;
239};
240
Dave Barachb5e8a772016-12-06 12:04:42 -0500241/** \brief IPv6 router advertisement prefix config request
242 @param client_index - opaque cookie to identify the sender
243 @param context - sender context, to match reply w/ request
Neale Ranns87df12d2017-02-18 08:16:41 -0800244 @param sw_if_index - The interface the RA prefix information is for
Neale Ranns37029302018-08-10 05:30:06 -0700245 @param prefix - The prefix to advertise
Neale Ranns87df12d2017-02-18 08:16:41 -0800246 @param use_default - Revert to default settings
247 @param no_advertise - Do not advertise this prefix
248 @param off_link - The prefix is off link (it is not configured on the interface)
249 Configures the L-flag, When set, indicates that this
250 prefix can be used for on-link determination.
251 @param no_autoconfig - Setting for the A-flag. When
252 set indicates that this prefix can be used for
253 stateless address configuration.
254 @param no_onlink - The prefix is not on link. Make sure this is consistent
255 with the off_link parameter else YMMV
256 @param is_no - add/delete
257 @param val_lifetime - The length of time in
258 seconds (relative to the time the packet is sent)
259 that the prefix is valid for the purpose of on-link
260 determination. A value of all one bits
261 (0xffffffff) represents infinity
262 @param pref_lifetime - The length of time in
263 seconds (relative to the time the packet is sent)
264 that addresses generated from the prefix via
265 stateless address autoconfiguration remain
266 preferred [ADDRCONF]. A value of all one bits
267 (0xffffffff) represents infinity.
Dave Barachb5e8a772016-12-06 12:04:42 -0500268*/
Dave Barach11b8dbf2017-04-24 10:46:54 -0400269autoreply define sw_interface_ip6nd_ra_prefix
Dave Barachb5e8a772016-12-06 12:04:42 -0500270{
271 u32 client_index;
272 u32 context;
273 u32 sw_if_index;
Neale Ranns37029302018-08-10 05:30:06 -0700274 vl_api_prefix_t prefix;
Dave Barachb5e8a772016-12-06 12:04:42 -0500275 u8 use_default;
276 u8 no_advertise;
277 u8 off_link;
278 u8 no_autoconfig;
279 u8 no_onlink;
280 u8 is_no;
281 u32 val_lifetime;
282 u32 pref_lifetime;
283};
284
Neale Ranns3f844d02017-02-18 00:03:54 -0800285/** \brief IPv6 ND proxy config
286 @param client_index - opaque cookie to identify the sender
287 @param context - sender context, to match reply w/ request
288 @param sw_if_index - The interface the host is on
289 @param address - The address of the host for which to proxy for
290 @param is_add - Adding or deleting
291*/
Dave Barach11b8dbf2017-04-24 10:46:54 -0400292autoreply define ip6nd_proxy_add_del
Neale Ranns3f844d02017-02-18 00:03:54 -0800293{
294 u32 client_index;
295 u32 context;
296 u32 sw_if_index;
297 u8 is_del;
Neale Ranns37029302018-08-10 05:30:06 -0700298 vl_api_ip6_address_t ip;
Neale Ranns3f844d02017-02-18 00:03:54 -0800299};
300
Neale Ranns3f844d02017-02-18 00:03:54 -0800301/** \brief IPv6 ND proxy details returned after request
302 @param context - sender context, to match reply w/ request
303 @param retval - return code for the request
304*/
305define ip6nd_proxy_details
306{
Neale Ranns3f844d02017-02-18 00:03:54 -0800307 u32 context;
308 u32 sw_if_index;
Neale Ranns37029302018-08-10 05:30:06 -0700309 vl_api_ip6_address_t ip;
Neale Ranns3f844d02017-02-18 00:03:54 -0800310};
311
312/** \brief IPv6 ND proxy dump request
313 @param context - sender context, to match reply w/ request
314 @param retval - return code for the request
315 @param sw_if_index - The interface the host is on
316 @param address - The address of the host for which to proxy for
317*/
318define ip6nd_proxy_dump
319{
320 u32 client_index;
321 u32 context;
322};
323
Juraj Sloboda4b9669d2018-01-15 10:39:21 +0100324/** \brief Start / stop sending router solicitation
325 @param client_index - opaque cookie to identify the sender
326 @param context - sender context, to match reply w/ request
327 @param irt - initial retransmission time
328 @param mrt - maximum retransmission time
329 @param mrc - maximum retransmission count
330 @param mrd - maximum retransmission duration
331 @param sw_if_index - software interface index of interface
332 for sending router solicitation
333 @param stop - if non-zero then stop sending router solicitation,
334 otherwise start sending router solicitation
335*/
336autoreply define ip6nd_send_router_solicitation
337{
338 u32 client_index;
339 u32 context;
340 u32 irt;
341 u32 mrt;
342 u32 mrc;
343 u32 mrd;
344 u32 sw_if_index;
345 u8 stop;
346};
347
Dave Barachb5e8a772016-12-06 12:04:42 -0500348/** \brief IPv6 interface enable / disable request
349 @param client_index - opaque cookie to identify the sender
350 @param context - sender context, to match reply w/ request
351 @param sw_if_index - interface used to reach neighbor
352 @param enable - if non-zero enable ip6 on interface, else disable
353*/
Dave Barach11b8dbf2017-04-24 10:46:54 -0400354autoreply define sw_interface_ip6_enable_disable
Dave Barachb5e8a772016-12-06 12:04:42 -0500355{
356 u32 client_index;
357 u32 context;
358 u32 sw_if_index;
359 u8 enable; /* set to true if enable */
360};
361
Dave Barachb5e8a772016-12-06 12:04:42 -0500362/** \brief Add / del route request
363 @param client_index - opaque cookie to identify the sender
364 @param context - sender context, to match reply w/ request
365 @param sw_if_index - software index of the new vlan's parent interface
366 @param vrf_id - fib table /vrf associated with the route
367 @param lookup_in_vrf -
368 @param classify_table_index -
Dave Barachb5e8a772016-12-06 12:04:42 -0500369 @param is_add - 1 if adding the route, 0 if deleting
370 @param is_drop - Drop the packet
371 @param is_unreach - Drop the packet and rate limit send ICMP unreachable
372 @param is_prohibit - Drop the packet and rate limit send ICMP prohibited
373 @param is_ipv6 - 0 if an ip4 route, else ip6
Neale Ranns810086d2017-11-05 16:26:46 -0800374 @param is_local - The route will result in packets sent to VPP IP stack
375 @param is_udp_encap - The path describes a UDP-o-IP encapsulation.
Dave Barachb5e8a772016-12-06 12:04:42 -0500376 @param is_classify -
377 @param is_multipath - Set to 1 if this is a multipath route, else 0
Neale Rannsf068c3e2018-01-03 04:18:48 -0800378 @param is_dvr - Does the route resolve via a DVR interface.
Neale Ranns054c03a2017-10-13 05:15:07 -0700379 @param is_source_lookup - The the path is a deaggregate path (i.e. a lookup
380 in another table) is the lookup on the packet's
381 source address or destination.
Neale Ranns810086d2017-11-05 16:26:46 -0800382 @param next_hop_weight - Weight for Unequal cost multi-path
383 @param next_hop_preference - Path that are up that have the best preference are
384 are used for forwarding. lower value is better.
385 @param next_hop_id - Used when the path resolves via an object that has a unique
386 identifier.
Dave Barachb5e8a772016-12-06 12:04:42 -0500387 @param dst_address_length -
388 @param dst_address[16] -
389 @param next_hop_address[16] -
390 @param next_hop_n_out_labels - the number of labels in the label stack
391 @param next_hop_out_label_stack - the next-hop output label stack, outer most first
392 @param next_hop_via_label - The next-hop is a resolved via a local label
393*/
Neale Ranns008dbe12018-09-07 09:32:36 -0700394define ip_add_del_route
Dave Barachb5e8a772016-12-06 12:04:42 -0500395{
396 u32 client_index;
397 u32 context;
398 u32 next_hop_sw_if_index;
399 u32 table_id;
400 u32 classify_table_index;
401 u32 next_hop_table_id;
Neale Ranns810086d2017-11-05 16:26:46 -0800402 u32 next_hop_id;
Dave Barachb5e8a772016-12-06 12:04:42 -0500403 u8 is_add;
404 u8 is_drop;
405 u8 is_unreach;
406 u8 is_prohibit;
407 u8 is_ipv6;
408 u8 is_local;
409 u8 is_classify;
410 u8 is_multipath;
411 u8 is_resolve_host;
412 u8 is_resolve_attached;
Neale Rannsf068c3e2018-01-03 04:18:48 -0800413 u8 is_dvr;
Neale Ranns054c03a2017-10-13 05:15:07 -0700414 u8 is_source_lookup;
Neale Ranns810086d2017-11-05 16:26:46 -0800415 u8 is_udp_encap;
Dave Barachb5e8a772016-12-06 12:04:42 -0500416 u8 next_hop_weight;
Neale Ranns57b58602017-07-15 07:37:25 -0700417 u8 next_hop_preference;
Neale Ranns810086d2017-11-05 16:26:46 -0800418 u8 next_hop_proto;
Dave Barachb5e8a772016-12-06 12:04:42 -0500419 u8 dst_address_length;
420 u8 dst_address[16];
421 u8 next_hop_address[16];
422 u8 next_hop_n_out_labels;
423 u32 next_hop_via_label;
Neale Ranns31ed7442018-02-23 05:29:09 -0800424 vl_api_fib_mpls_label_t next_hop_out_label_stack[next_hop_n_out_labels];
Dave Barachb5e8a772016-12-06 12:04:42 -0500425};
426
Neale Ranns008dbe12018-09-07 09:32:36 -0700427define ip_add_del_route_reply
428{
429 u32 context;
430 i32 retval;
431 u32 stats_index;
432};
433
Neale Ranns32e1c012016-11-22 17:07:28 +0000434/** \brief Add / del route request
Ian Wells412ecd32018-10-04 12:31:11 -0700435
436 Adds a route, consisting both of the MFIB entry to match packets
437 (which may already exist) and a path to send those packets down.
438 Routes can be entered repeatedly to add multiple paths. Deletions are
439 per-path.
440
Neale Ranns32e1c012016-11-22 17:07:28 +0000441 @param client_index - opaque cookie to identify the sender
442 @param context - sender context, to match reply w/ request
Ian Wells412ecd32018-10-04 12:31:11 -0700443 @param table_id - fib table /vrf associated with the route
444 @param is_add - true if adding a route; false if deleting one
445 @param is_ipv6 - true iff all the addresses are v6
446 @param entry_flags - see fib_entry_flag_t
447 @param itf_flags - see mfib_entry_flags_t
448 @param next_hop_afi - see dpo_proto_t; the type of destination description
449 @param src_address - the source of the packet
450 @param grp_address - the group the packet is destined to
451 @param nh_address - the nexthop to forward the packet to
452 @param next_hop_sw_if_index - interface to emit packet on
453
454 BIER AFIs use the BIER imposition ID. v4 and v6 AFIs use either the
455 interface or the nexthop address.
456
457 Note that if the route is source-specific (S is supplied, not all 0s),
458 the prefix match is treated as exact (prefixlen /32 or /128).
459
460 FIXME not complete yet
Neale Ranns32e1c012016-11-22 17:07:28 +0000461*/
Neale Ranns28c142e2018-09-07 09:37:07 -0700462define ip_mroute_add_del
Neale Ranns32e1c012016-11-22 17:07:28 +0000463{
464 u32 client_index;
465 u32 context;
466 u32 next_hop_sw_if_index;
467 u32 table_id;
468 u32 entry_flags;
469 u32 itf_flags;
Neale Ranns0f26c5a2017-03-01 15:12:11 -0800470 u32 rpf_id;
Neale Rannsd792d9c2017-10-21 10:53:20 -0700471 u32 bier_imp;
Neale Ranns32e1c012016-11-22 17:07:28 +0000472 u16 grp_address_length;
Neale Rannsd792d9c2017-10-21 10:53:20 -0700473 u8 next_hop_afi;
Neale Ranns32e1c012016-11-22 17:07:28 +0000474 u8 is_add;
475 u8 is_ipv6;
476 u8 is_local;
477 u8 grp_address[16];
478 u8 src_address[16];
Neale Rannse821ab12017-06-01 07:45:05 -0700479 u8 nh_address[16];
Neale Ranns32e1c012016-11-22 17:07:28 +0000480};
481
Neale Ranns28c142e2018-09-07 09:37:07 -0700482define ip_mroute_add_del_reply
483{
484 u32 context;
485 i32 retval;
486 u32 stats_index;
487};
488
Neale Ranns5a8123b2017-01-26 01:18:23 -0800489/** \brief Dump IP multicast fib table
490 @param client_index - opaque cookie to identify the sender
491*/
492define ip_mfib_dump
493{
494 u32 client_index;
495 u32 context;
496};
497
498/** \brief IP Multicast FIB table response
499 @param table_id - IP fib table id
500 @address_length - mask length
501 @grp_address - Group address/prefix
502 @src_address - Source address
503 @param count - the number of fib_path in path
504 @param path - array of of fib_path structures
505*/
Neale Ranns7c03ed42018-12-27 03:21:28 -0800506typedef mfib_path
507{
508 vl_api_fib_path_t path;
509 u32 itf_flags;
510};
511
Neale Ranns5a8123b2017-01-26 01:18:23 -0800512manual_endian manual_print define ip_mfib_details
513{
514 u32 context;
515 u32 table_id;
Neale Ranns0f26c5a2017-03-01 15:12:11 -0800516 u32 entry_flags;
517 u32 rpf_id;
Neale Ranns5a8123b2017-01-26 01:18:23 -0800518 u8 address_length;
519 u8 grp_address[4];
520 u8 src_address[4];
521 u32 count;
Neale Ranns28c142e2018-09-07 09:37:07 -0700522 u32 stats_index;
Neale Ranns7c03ed42018-12-27 03:21:28 -0800523 vl_api_mfib_path_t path[count];
Neale Ranns5a8123b2017-01-26 01:18:23 -0800524};
525
526/** \brief Dump IP6 multicast fib table
527 @param client_index - opaque cookie to identify the sender
528*/
529define ip6_mfib_dump
530{
531 u32 client_index;
532 u32 context;
533};
534
535/** \brief IP6 Multicast FIB table response
536 @param table_id - IP fib table id
537 @address_length - mask length
538 @grp_address - Group address/prefix
539 @src_address - Source address
540 @param count - the number of fib_path in path
541 @param path - array of of fib_path structures
542*/
543manual_endian manual_print define ip6_mfib_details
544{
545 u32 context;
546 u32 table_id;
547 u8 address_length;
548 u8 grp_address[16];
549 u8 src_address[16];
550 u32 count;
Neale Ranns7c03ed42018-12-27 03:21:28 -0800551 vl_api_mfib_path_t path[count];
Neale Ranns5a8123b2017-01-26 01:18:23 -0800552};
553
Dave Barachb5e8a772016-12-06 12:04:42 -0500554define ip_address_details
555{
Dave Barachb5e8a772016-12-06 12:04:42 -0500556 u32 context;
557 u8 ip[16];
558 u8 prefix_length;
Jon Loeliger466f0d42017-02-09 12:17:50 -0600559 u32 sw_if_index;
560 u8 is_ipv6;
Dave Barachb5e8a772016-12-06 12:04:42 -0500561};
562
563define ip_address_dump
564{
565 u32 client_index;
566 u32 context;
567 u32 sw_if_index;
568 u8 is_ipv6;
569};
570
Neale Ranns9e2f9152018-05-18 02:27:10 -0700571/** \brief IP unnumbered configurations
572 @param sw_if_index The interface that has unnumbered configuration
573 @param ip_sw_if_index The IP interface that it is unnnumbered to
574*/
575define ip_unnumbered_details
576{
Neale Ranns9e2f9152018-05-18 02:27:10 -0700577 u32 context;
578 u32 sw_if_index;
579 u32 ip_sw_if_index;
580};
581
582/** \brief Dump IP unnumbered configurations
583 @param sw_if_index ~0 for all interfaces, else the interface desired
584*/
585define ip_unnumbered_dump
586{
587 u32 client_index;
588 u32 context;
589 u32 sw_if_index;
590};
591
Dave Barachb5e8a772016-12-06 12:04:42 -0500592define ip_details
593{
Dave Barachb5e8a772016-12-06 12:04:42 -0500594 u32 context;
Ondrej Fabryb11f9032018-08-14 12:39:40 +0200595 u32 sw_if_index;
Jon Loeliger466f0d42017-02-09 12:17:50 -0600596 u8 is_ipv6;
Dave Barachb5e8a772016-12-06 12:04:42 -0500597};
598
599define ip_dump
600{
601 u32 client_index;
602 u32 context;
603 u8 is_ipv6;
604};
605
Neale Ranns32e1c012016-11-22 17:07:28 +0000606define mfib_signal_dump
607{
608 u32 client_index;
609 u32 context;
610};
611
612define mfib_signal_details
613{
Neale Ranns32e1c012016-11-22 17:07:28 +0000614 u32 context;
615 u32 sw_if_index;
616 u32 table_id;
617 u16 grp_address_len;
618 u8 grp_address[16];
619 u8 src_address[16];
620 u16 ip_packet_len;
621 u8 ip_packet_data[256];
622};
Dave Barachb5e8a772016-12-06 12:04:42 -0500623
Neale Rannsd91c1db2017-07-31 02:30:50 -0700624/** \brief IP punt policer
625 @param client_index - opaque cookie to identify the sender
626 @param context - sender context, to match reply w/ request
627 @param is_add - 1 to add neighbor, 0 to delete
628 @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
629 @param policer_index - Index of policer to use
630*/
631autoreply define ip_punt_police
632{
633 u32 client_index;
634 u32 context;
635 u32 policer_index;
636 u8 is_add;
637 u8 is_ip6;
638};
639
Pavel Kotucek609e1212018-11-27 09:59:44 +0100640/** \brief Punt redirect type
Neale Ranns47527b22018-11-16 00:53:53 -0800641 @param rx_sw_if_index - specify the original RX interface of traffic
642 that should be redirected. ~0 means any interface.
Neale Rannsd91c1db2017-07-31 02:30:50 -0700643 @param tx_sw_if_index - the TX interface to which traffic shoulde be
644 redirected.
Pavel Kotucek609e1212018-11-27 09:59:44 +0100645 @param nh - the next-hop to redirect the traffic to.
646 @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
647*/
648typeonly define punt_redirect
649{
650 u32 rx_sw_if_index;
651 u32 tx_sw_if_index;
652 vl_api_address_t nh;
653};
654
655/** \brief IP punt redirect
656 @param client_index - opaque cookie to identify the sender
657 @param context - sender context, to match reply w/ request
658 @param punt - punt definition
659 @param is_add - 1 to add neighbor, 0 to delete
Neale Rannsd91c1db2017-07-31 02:30:50 -0700660*/
661autoreply define ip_punt_redirect
662{
663 u32 client_index;
664 u32 context;
Pavel Kotucek609e1212018-11-27 09:59:44 +0100665 vl_api_punt_redirect_t punt;
Neale Rannsd91c1db2017-07-31 02:30:50 -0700666 u8 is_add;
Pavel Kotucek609e1212018-11-27 09:59:44 +0100667};
668
669define ip_punt_redirect_dump
670{
671 u32 client_index;
672 u32 context;
673 u32 sw_if_index;
674 u8 is_ipv6;
675};
676
677define ip_punt_redirect_details
678{
679 u32 context;
680 vl_api_punt_redirect_t punt;
Neale Rannsd91c1db2017-07-31 02:30:50 -0700681};
682
Florin Coras595992c2017-11-06 17:17:08 -0800683autoreply define ip_container_proxy_add_del
684{
685 u32 client_index;
686 u32 context;
Neale Ranns37029302018-08-10 05:30:06 -0700687 vl_api_prefix_t pfx;
Florin Coras595992c2017-11-06 17:17:08 -0800688 u32 sw_if_index;
689 u8 is_add;
690};
691
Matus Fabian75b9f452018-10-02 23:27:21 -0700692define ip_container_proxy_dump
693{
694 u32 client_index;
695 u32 context;
696};
697
698define ip_container_proxy_details
699{
700 u32 context;
701 u32 sw_if_index;
702 vl_api_prefix_t prefix;
703};
704
Neale Rannsb8d44812017-11-10 06:53:54 -0800705/** \brief Configure IP source and L4 port-range check
706 @param client_index - opaque cookie to identify the sender
707 @param context - sender context, to match reply w/ request
708 @param is_ip6 - 1 if source address type is IPv6
709 @param is_add - 1 if add, 0 if delete
Neale Ranns37029302018-08-10 05:30:06 -0700710 @param ip - prefix to match
Neale Rannsb8d44812017-11-10 06:53:54 -0800711 @param number_of_ranges - length of low_port and high_port arrays (must match)
712 @param low_ports[32] - up to 32 low end of port range entries (must have corresponding high_ports entry)
713 @param high_ports[32] - up to 32 high end of port range entries (must have corresponding low_ports entry)
714 @param vrf_id - fib table/vrf id to associate the source and port-range check with
715 @note To specify a single port set low_port and high_port entry the same
716*/
717autoreply define ip_source_and_port_range_check_add_del
718{
719 u32 client_index;
720 u32 context;
Neale Rannsb8d44812017-11-10 06:53:54 -0800721 u8 is_add;
Neale Ranns37029302018-08-10 05:30:06 -0700722 vl_api_prefix_t prefix;
Neale Rannsb8d44812017-11-10 06:53:54 -0800723 u8 number_of_ranges;
724 u16 low_ports[32];
725 u16 high_ports[32];
726 u32 vrf_id;
727};
728
729/** \brief Set interface source and L4 port-range request
730 @param client_index - opaque cookie to identify the sender
731 @param context - sender context, to match reply w/ request
732 @param interface_id - interface index
733 @param tcp_vrf_id - VRF associated with source and TCP port-range check
734 @param udp_vrf_id - VRF associated with source and TCP port-range check
735*/
736autoreply define ip_source_and_port_range_check_interface_add_del
737{
738 u32 client_index;
739 u32 context;
740 u8 is_add;
741 u32 sw_if_index;
742 u32 tcp_in_vrf_id;
743 u32 tcp_out_vrf_id;
744 u32 udp_in_vrf_id;
745 u32 udp_out_vrf_id;
746};
747
Chore3460b012018-11-28 10:53:11 +0330748/** \brief Set interface source check request
749 @param client_index - opaque cookie to identify the sender
750 @param context - sender context, to match reply w/ request
751 @param is_add - add or del
752 @param loose - strict or loose
753 @param sw_if_index - interface index
754*/
755autoreply define ip_source_check_interface_add_del
756{
757 u32 client_index;
758 u32 context;
759 u8 is_add;
760 u8 loose;
761 u32 sw_if_index;
762};
763
John Lo7f358b32018-04-28 01:19:24 -0400764/** \brief Enable/disable periodic IP neighbor scan
765 @param client_index - opaque cookie to identify the sender
766 @param context - sender context, to match reply w/ request
767 @param mode - 0: disable, 1: IPv4, 2: IPv6, 3: both IPv4/v6
768 @param scan_interval - neighbor scan interval in minutes, 0: default to 1
769 @param max_proc_time - max processing time per run in usec, 0: default to 20
770 @param max_update - max neighbor probe/delete per run, 0: default to 10
771 @param scan_int_delay - delay in msec to resume scan if exceed max proc
772 time or update, 0: default to 1
773 @param stale_threshold - threshold in minutes for neighbor deletion,
774 0: default to 4*scan_interval
775*/
776autoreply define ip_scan_neighbor_enable_disable
777{
778 u32 client_index;
779 u32 context;
780 u8 mode;
781 u8 scan_interval;
782 u8 max_proc_time;
783 u8 max_update;
784 u8 scan_int_delay;
785 u8 stale_threshold;
786};
787
John Loc7b43042018-04-13 16:46:22 -0400788/** \brief IP probe neighbor address on an interface by sending an
789 ARP request (for IP4) or ICMP6 Neighbor Solicitation (for IP6)
790 @param client_index - opaque cookie to identify the sender
791 @param context - sender context, to match reply w/ request
792 @param sw_if_index - interface index
Neale Ranns37029302018-08-10 05:30:06 -0700793 @param dst - target IP address to send IP addr resolution request
John Loc7b43042018-04-13 16:46:22 -0400794*/
795autoreply define ip_probe_neighbor
796{
797 u32 client_index;
798 u32 context;
799 u32 sw_if_index;
Neale Ranns37029302018-08-10 05:30:06 -0700800 vl_api_address_t dst;
John Loc7b43042018-04-13 16:46:22 -0400801};
802
803/** \brief Register for IP4 ARP resolution event on receing ARP reply or
804 MAC/IP info from ARP requests in L2 BDs
Neale Rannsb8d44812017-11-10 06:53:54 -0800805 @param client_index - opaque cookie to identify the sender
806 @param context - sender context, to match reply w/ request
807 @param enable_disable - 1 => register for events, 0 => cancel registration
808 @param pid - sender's pid
Neale Ranns37029302018-08-10 05:30:06 -0700809 @param ip - exact IP4 address of interested arp resolution event, or
810 0 to get MAC/IP info from ARP requests in BDs
Neale Rannsb8d44812017-11-10 06:53:54 -0800811*/
812autoreply define want_ip4_arp_events
813{
814 u32 client_index;
815 u32 context;
816 u8 enable_disable;
817 u32 pid;
Neale Ranns37029302018-08-10 05:30:06 -0700818 vl_api_ip4_address_t ip;
Neale Rannsb8d44812017-11-10 06:53:54 -0800819};
820
John Loc7b43042018-04-13 16:46:22 -0400821/** \brief Tell client about an IP4 ARP resolution event or
822 MAC/IP info from ARP requests in L2 BDs
Neale Rannsb8d44812017-11-10 06:53:54 -0800823 @param client_index - opaque cookie to identify the sender
Neale Ranns37029302018-08-10 05:30:06 -0700824 @param ip - the exact ip4 address of interest
Neale Rannsb8d44812017-11-10 06:53:54 -0800825 @param pid - client pid registered to receive notification
826 @param sw_if_index - interface which received ARP packet
Neale Ranns37029302018-08-10 05:30:06 -0700827 @param mac - the new mac address
John Loc7b43042018-04-13 16:46:22 -0400828 @param mac_ip - 0: ARP resolution event, 1: MAC/IP info from L2 BDs
Neale Rannsb8d44812017-11-10 06:53:54 -0800829*/
830define ip4_arp_event
831{
832 u32 client_index;
Neale Ranns37029302018-08-10 05:30:06 -0700833 vl_api_ip4_address_t ip;
Neale Rannsb8d44812017-11-10 06:53:54 -0800834 u32 pid;
835 u32 sw_if_index;
Neale Ranns37029302018-08-10 05:30:06 -0700836 vl_api_mac_address_t mac;
Neale Rannsb8d44812017-11-10 06:53:54 -0800837 u8 mac_ip;
838};
839
Marek Gradzki51e59682018-03-06 10:05:44 +0100840service {
841 rpc want_ip4_arp_events returns want_ip4_arp_events_reply
842 events ip4_arp_event;
843};
844
John Loc7b43042018-04-13 16:46:22 -0400845/** \brief Register for IP6 ND resolution event on recieving NA reply
846 MAC/IP info from ICMP6 Neighbor Solicitation in L2 BDs
Neale Rannsb8d44812017-11-10 06:53:54 -0800847 @param client_index - opaque cookie to identify the sender
848 @param context - sender context, to match reply w/ request
849 @param enable_disable - 1 => register for events, 0 => cancel registration
850 @param pid - sender's pid
Neale Ranns37029302018-08-10 05:30:06 -0700851 @param ip - the exact IP6 address of interested ND resolution event, or
852 0 to get MAC/IP info from ICMP6 NS in L2 BDs.
Neale Rannsb8d44812017-11-10 06:53:54 -0800853*/
854autoreply define want_ip6_nd_events
855{
856 u32 client_index;
857 u32 context;
858 u8 enable_disable;
859 u32 pid;
Neale Ranns37029302018-08-10 05:30:06 -0700860 vl_api_ip6_address_t ip;
Neale Rannsb8d44812017-11-10 06:53:54 -0800861};
862
John Loc7b43042018-04-13 16:46:22 -0400863/** \brief Tell client about an IP6 ND resolution or
864 MAC/IP info from ICMP6 Neighbor Solicitation in L2 BDs.
Neale Rannsb8d44812017-11-10 06:53:54 -0800865 @param client_index - opaque cookie to identify the sender
866 @param pid - client pid registered to receive notification
867 @param sw_if_index - interface which received ARP packet
Neale Ranns37029302018-08-10 05:30:06 -0700868 @param ip - the exact ip6 address of interest
Neale Rannsb8d44812017-11-10 06:53:54 -0800869 @param new_mac - the new mac address
John Loc7b43042018-04-13 16:46:22 -0400870 @param mac_ip - 0: ND resolution event, 1: MAC/IP info from L2 BDs
Neale Rannsb8d44812017-11-10 06:53:54 -0800871*/
872define ip6_nd_event
873{
874 u32 client_index;
875 u32 pid;
876 u32 sw_if_index;
Neale Ranns37029302018-08-10 05:30:06 -0700877 vl_api_ip6_address_t ip;
878 vl_api_mac_address_t mac;
Neale Rannsb8d44812017-11-10 06:53:54 -0800879 u8 mac_ip;
880};
881
Marek Gradzki51e59682018-03-06 10:05:44 +0100882service {
Juraj Sloboda4b9669d2018-01-15 10:39:21 +0100883 rpc want_ip6_ra_events returns want_ip6_ra_events_reply
884 events ip6_ra_event;
885};
886
887/** \brief Register for ip6 router advertisement events
888 @param client_index - opaque cookie to identify the sender
889 @param context - sender context, to match reply w/ request
890 @param enable_disable - 1 => register for events, 0 => cancel registration
891 @param pid - sender's pid
892*/
893autoreply define want_ip6_ra_events
894{
895 u32 client_index;
896 u32 context;
897 u8 enable_disable;
898 u32 pid;
899};
900
901/** \brief Struct representing RA prefix info
Neale Ranns37029302018-08-10 05:30:06 -0700902 @param prefix - RA prefix info destination address
Juraj Sloboda4b9669d2018-01-15 10:39:21 +0100903 @param flags - RA prefix info flags
904 @param valid_time - RA prefix info valid time
905 @param preferred_time - RA prefix info preferred time
906*/
907typeonly define ip6_ra_prefix_info
908{
Neale Ranns37029302018-08-10 05:30:06 -0700909 vl_api_prefix_t prefix;
Juraj Sloboda4b9669d2018-01-15 10:39:21 +0100910 u8 flags;
911 u32 valid_time;
912 u32 preferred_time;
913};
914
915/** \brief Tell client about a router advertisement event
916 @param client_index - opaque cookie to identify the sender
917 @param pid - client pid registered to receive notification
918 @param current_hop_limit - RA current hop limit
919 @param flags - RA flags
920 @param router_lifetime_in_sec - RA lifetime in seconds
Neale Ranns37029302018-08-10 05:30:06 -0700921 @param router_addr - The router's address
Juraj Sloboda4b9669d2018-01-15 10:39:21 +0100922 @param neighbor_reachable_time_in_msec - RA neighbor reachable time in msec
923 @param time_in_msec_between_retransmitted_neighbor_solicitations -
924 time in msec between retransmitted neighbor solicitations
925 @param n_prefixes -
926 @param prefixes -
927*/
928define ip6_ra_event
929{
930 u32 client_index;
931 u32 pid;
932 u32 sw_if_index;
Neale Ranns37029302018-08-10 05:30:06 -0700933 vl_api_ip6_address_t router_addr;
Juraj Sloboda4b9669d2018-01-15 10:39:21 +0100934 u8 current_hop_limit;
935 u8 flags;
936 u16 router_lifetime_in_sec;
937 u32 neighbor_reachable_time_in_msec;
938 u32 time_in_msec_between_retransmitted_neighbor_solicitations;
939 u32 n_prefixes;
940 vl_api_ip6_ra_prefix_info_t prefixes[n_prefixes];
941};
942
943service {
Marek Gradzki51e59682018-03-06 10:05:44 +0100944 rpc want_ip6_nd_events returns want_ip6_nd_events_reply
945 events ip6_nd_event;
946};
947
Neale Ranns0053de62018-05-22 08:40:52 -0700948/** \brief Proxy ARP configuration type
Neale Ranns37029302018-08-10 05:30:06 -0700949 @param table_id - VRF / Fib table ID
950 @param low - Low address of the Proxy ARP range
951 @param hi - High address of the Proxy ARP range
Neale Rannsb8d44812017-11-10 06:53:54 -0800952*/
Neale Ranns0053de62018-05-22 08:40:52 -0700953typeonly define proxy_arp
Neale Rannsb8d44812017-11-10 06:53:54 -0800954{
Neale Ranns37029302018-08-10 05:30:06 -0700955 u32 table_id;
956 vl_api_ip4_address_t low;
957 vl_api_ip4_address_t hi;
Neale Rannsb8d44812017-11-10 06:53:54 -0800958};
959
960/** \brief Proxy ARP add / del request
961 @param client_index - opaque cookie to identify the sender
962 @param context - sender context, to match reply w/ request
Neale Ranns0053de62018-05-22 08:40:52 -0700963 @param is_add - 1 if adding the Proxy ARP range, 0 if deleting
964 @param proxy - Proxy configuration
965*/
966autoreply define proxy_arp_add_del
967{
968 u32 client_index;
969 u32 context;
970 u8 is_add;
971 vl_api_proxy_arp_t proxy;
972};
973
974/** \brief Proxy ARP dump request
975 */
976define proxy_arp_dump
977{
978 u32 client_index;
979 u32 context;
980};
981
982/** \brief Proxy ARP dump details reply
983 * @param proxy - Same data as used to configure
984 */
985define proxy_arp_details
986{
987 u32 context;
988 vl_api_proxy_arp_t proxy;
989};
990
991/** \brief Proxy ARP add / del interface request
992 @param client_index - opaque cookie to identify the sender
993 @param context - sender context, to match reply w/ request
Neale Rannsb8d44812017-11-10 06:53:54 -0800994 @param sw_if_index - Which interface to enable / disable Proxy Arp on
995 @param enable_disable - 1 to enable Proxy ARP on interface, 0 to disable
996*/
997autoreply define proxy_arp_intfc_enable_disable
998{
999 u32 client_index;
1000 u32 context;
1001 u32 sw_if_index;
1002 /* 1 = on, 0 = off */
1003 u8 enable_disable;
1004};
1005
Neale Ranns0053de62018-05-22 08:40:52 -07001006/** \brief Proxy ARP interface dump request
1007 */
1008define proxy_arp_intfc_dump
1009{
1010 u32 client_index;
1011 u32 context;
1012};
1013
1014/** \brief Proxy ARP interface dump details reply
1015 * @param sw_if_index The interface on which ARP proxy is enabled.
1016 */
1017define proxy_arp_intfc_details
1018{
1019 u32 context;
1020 u32 sw_if_index;
1021};
1022
Neale Rannsb8d44812017-11-10 06:53:54 -08001023/** \brief Reset fib table request
1024 @param client_index - opaque cookie to identify the sender
1025 @param context - sender context, to match reply w/ request
1026 @param vrf_id - vrf/table id of the fib table to reset
1027 @param is_ipv6 - an ipv6 fib to reset if non-zero, else ipv4
1028*/
1029autoreply define reset_fib
1030{
1031 u32 client_index;
1032 u32 context;
1033 u32 vrf_id;
1034 u8 is_ipv6;
1035};
1036
1037/** \brief Set max allowed ARP or ip6 neighbor entries request
1038 @param client_index - opaque cookie to identify the sender
1039 @param context - sender context, to match reply w/ request
1040 @param is_ipv6 - neighbor limit if non-zero, else ARP limit
1041 @param arp_neighbor_limit - the new limit, defaults are ~ 50k
1042*/
1043autoreply define set_arp_neighbor_limit
1044{
1045 u32 client_index;
1046 u32 context;
1047 u8 is_ipv6;
1048 u32 arp_neighbor_limit;
1049};
1050
1051/** \brief IOAM enable : Enable in-band OAM
1052 @param id - profile id
1053 @param seqno - To enable Seqno Processing
1054 @param analyse - Enabling analysis of iOAM at decap node
1055 @param pow_enable - Proof of Work enabled or not flag
1056 @param trace_enable - iOAM Trace enabled or not flag
1057*/
1058autoreply define ioam_enable
1059{
1060 u32 client_index;
1061 u32 context;
1062 u16 id;
1063 u8 seqno;
1064 u8 analyse;
1065 u8 pot_enable;
1066 u8 trace_enable;
1067 u32 node_id;
1068};
1069
1070/** \brief iOAM disable
1071 @param client_index - opaque cookie to identify the sender
1072 @param context - sender context, to match reply w/ request
1073 @param index - MAP Domain index
1074*/
1075autoreply define ioam_disable
1076{
1077 u32 client_index;
1078 u32 context;
1079 u16 id;
1080};
1081
Klement Sekera75e7d132017-09-20 08:26:30 +02001082autoreply define ip_reassembly_set
1083{
1084 u32 client_index;
1085 u32 context;
1086 u32 timeout_ms;
1087 u32 max_reassemblies;
Klement Sekera3a343d42019-05-16 14:35:46 +02001088 u32 max_reassembly_length;
Klement Sekera75e7d132017-09-20 08:26:30 +02001089 u32 expire_walk_interval_ms;
1090 u8 is_ip6;
1091};
1092
1093define ip_reassembly_get
1094{
1095 u32 client_index;
1096 u32 context;
1097 u8 is_ip6;
1098};
1099
1100define ip_reassembly_get_reply
1101{
Klement Sekera75e7d132017-09-20 08:26:30 +02001102 u32 context;
1103 i32 retval;
1104 u32 timeout_ms;
1105 u32 max_reassemblies;
Klement Sekera3a343d42019-05-16 14:35:46 +02001106 u32 max_reassembly_length;
Klement Sekera75e7d132017-09-20 08:26:30 +02001107 u32 expire_walk_interval_ms;
1108 u8 is_ip6;
1109};
1110
Klement Sekera4c533132018-02-22 11:41:12 +01001111/** \brief Enable/disable reassembly feature
1112 @param client_index - opaque cookie to identify the sender
1113 @param context - sender context, to match reply w/ request
1114 @param sw_if_index - interface to enable/disable feature on
1115 @param enable_ip4 - enable ip4 reassembly if non-zero, disable if 0
1116 @param enable_ip6 - enable ip6 reassembly if non-zero, disable if 0
1117*/
1118autoreply define ip_reassembly_enable_disable
1119{
1120 u32 client_index;
1121 u32 context;
1122 u32 sw_if_index;
1123 u8 enable_ip4;
1124 u8 enable_ip6;
1125};
1126
Dave Barachb5e8a772016-12-06 12:04:42 -05001127/*
1128 * Local Variables:
1129 * eval: (c-set-style "gnu")
1130 * End:
1131 */