1f26d5519bfc9282b7ebff87ec48a6899c2e81b9
[vpp.git] / vpp / vpp-api / vpe.api
1 /* Hey Emacs use -*- mode: C -*- */
2 /*
3  * Copyright (c) 2015 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 /** \file
18
19     This file defines vpe control-plane API messages which are generally
20     called through a shared memory interface. 
21 */
22
23
24 /** \brief Register for interface events
25     @param client_index - opaque cookie to identify the sender
26     @param context - sender context, to match reply w/ request
27     @param enable_disable - 1 => register for events, 0 => cancel registration
28     @param pid - sender's pid
29 */
30 define want_interface_events
31 {
32   u32 client_index;
33   u32 context;
34   u32 enable_disable;
35   u32 pid;
36 };
37
38 /** \brief Reply for interface events registration
39     @param context - returned sender context, to match reply w/ request
40     @param retval - return code
41 */
42 define want_interface_events_reply
43 {
44   u32 context;
45   i32 retval;
46 };
47
48 /** \brief Interface details structure (fix this) 
49     @param sw_if_index - index of the interface
50     @param sup_sw_if_index - index of parent interface if any, else same as sw_if_index  
51     @param l2_address_length - length of the interface's l2 address
52     @param pid - the interface's l2 address
53     @param interface_name - name of the interface
54     @param link_duplex - 1 if half duplex, 2 if full duplex
55     @param link_speed - 1 = 10M, 2 = 100M, 4 = 1G, 8 = 10G, 16 = 40G, 32 = 100G
56     @param link_MTU - max. transmittion unit 
57     @param sub_if_id - A number 0-N to uniquely identify this subif on super if
58     @param sub_dot1ad -  0 = dot1q, 1=dot1ad
59     @param sub_number_of_tags - Number of tags (0 - 2)
60     @param sub_outer_vlan_id
61     @param sub_inner_vlan_id
62     @param sub_exact_match
63     @param sub_default
64     @param sub_outer_vlan_id_any
65     @param sub_inner_vlan_id_any
66     @param vtr_op - vlan tag rewrite operation
67     @param vtr_push_dot1q
68     @param vtr_tag1
69     @param vtr_tag2
70 */
71 define sw_interface_details
72 {
73   u32 context;
74   u32 sw_if_index;
75
76   /* index of sup interface (e.g. hw interface).
77      equal to sw_if_index for super hw interface. */
78   u32 sup_sw_if_index;
79
80   /* Layer 2 address, if applicable */
81   u32 l2_address_length;
82   u8 l2_address[8];
83
84   /* Interface name */
85   u8 interface_name[64];
86
87   /* 1 = up, 0 = down */
88   u8 admin_up_down;
89   u8 link_up_down;
90
91   /* 1 = half duplex, 2 = full duplex */
92   u8 link_duplex;
93
94   /* 1 = 10M, 2 = 100M, 4 = 1G, 8 = 10G, 16 = 40G, 32 = 100G */
95   u8 link_speed;
96
97   /* MTU */
98   u16 link_mtu;
99
100   /* Subinterface ID. A number 0-N to uniquely identify this subinterface under the super interface */
101   u32 sub_id;
102
103   /* 0 = dot1q, 1=dot1ad */
104   u8 sub_dot1ad;
105
106   /* Number of tags 0-2 */
107   u8 sub_number_of_tags;
108   u16 sub_outer_vlan_id;
109   u16 sub_inner_vlan_id;
110   u8 sub_exact_match;
111   u8 sub_default;
112   u8 sub_outer_vlan_id_any;
113   u8 sub_inner_vlan_id_any;
114
115   /* vlan tag rewrite state */
116   u32 vtr_op;
117   u32 vtr_push_dot1q;           // ethertype of first pushed tag is dot1q/dot1ad
118   u32 vtr_tag1;                 // first pushed tag
119   u32 vtr_tag2;                 // second pushed tag
120 };
121
122 /** \brief Set flags on the interface
123     @param client_index - opaque cookie to identify the sender
124     @param context - sender context, to match reply w/ request
125     @param sw_if_index - index of the interface to set flags on
126     @param admin_up_down - set the admin state, 1 = up, 0 = down
127     @param link_up_down - Oper state sent on change event, not used in config.
128     @param deleted - interface was deleted
129 */
130 define sw_interface_set_flags
131 {
132   u32 client_index;
133   u32 context;
134   u32 sw_if_index;
135   /* 1 = up, 0 = down */
136   u8 admin_up_down;
137   u8 link_up_down;
138   u8 deleted;
139 };
140
141 /** \brief Reply to sw_interface_set_flags 
142     @param context - sender context which was passed in the request
143     @param retval - return code of the set flags request
144 */
145 define sw_interface_set_flags_reply
146 {
147   u32 context;
148   i32 retval;
149 };
150
151 /* works */
152 define sw_interface_dump
153 {
154   u32 client_index;
155   u32 context;
156   u8 name_filter_valid;
157   u8 name_filter[49];
158 };
159
160 /** \brief Set or delete one or all ip addresses on a specified interface
161     @param client_index - opaque cookie to identify the sender
162     @param context - sender context, to match reply w/ request
163     @param sw_if_index - index of the interface to add/del addresses 
164     @param is_add - add address if non-zero, else delete
165     @param is_ipv6 - if non-zero the address is ipv6, else ipv4
166     @param del_all - if non-zero delete all addresses on the interface
167     @param address_length - address length in bytes, 4 for ip4, 16 for ip6
168     @param address - array of address bytes
169 */
170 define sw_interface_add_del_address
171 {
172   u32 client_index;
173   u32 context;
174   u32 sw_if_index;
175   u8 is_add;
176   u8 is_ipv6;
177   u8 del_all;
178   u8 address_length;
179   u8 address[16];
180 };
181
182 /** \brief Reply for interface events registration
183     @param context - returned sender context, to match reply w/ request
184     @param retval - return code
185 */
186 define sw_interface_add_del_address_reply
187 {
188   u32 context;
189   i32 retval;
190 };
191
192 /** \brief Associate the specified interface with a fib table
193     @param client_index - opaque cookie to identify the sender
194     @param context - sender context, to match reply w/ request
195     @param sw_if_index - index of the interface
196     @param is_ipv6 - if non-zero ipv6, else ipv4
197     @param vrf_id - fib table/vrd id to associate the interface with
198 */
199 define sw_interface_set_table
200 {
201   u32 client_index;
202   u32 context;
203   u32 sw_if_index;
204   u8 is_ipv6;
205   u32 vrf_id;
206 };
207
208 /** \brief Reply for interface events registration
209     @param context - returned sender context, to match reply w/ request
210     @param retval - return code
211 */
212 define sw_interface_set_table_reply
213 {
214   u32 context;
215   i32 retval;
216 };
217
218 /** \brief Initialize a new tap interface with the given paramters 
219     @param client_index - opaque cookie to identify the sender
220     @param context - sender context, to match reply w/ request
221     @param use_random_mac - let the system generate a unique mac address
222     @param tap_name - name to associate with the new interface
223     @param mac_address - mac addr to assign to the interface if use_radom not set
224 */
225 define tap_connect
226 {
227   u32 client_index;
228   u32 context;
229   u8 use_random_mac;
230   u8 tap_name[64];
231   u8 mac_address[6];
232   u8 renumber;
233   u32 custom_dev_instance;
234 };
235
236 /** \brief Reply for tap connect request
237     @param context - returned sender context, to match reply w/ request
238     @param retval - return code
239     @param sw_if_index - software index allocated for the new tap interface
240 */
241 define tap_connect_reply
242 {
243   u32 context;
244   i32 retval;
245   u32 sw_if_index;
246 };
247
248 /** \brief Modify a tap interface with the given paramters 
249     @param client_index - opaque cookie to identify the sender
250     @param context - sender context, to match reply w/ request
251     @param sw_if_index - interface index of existing tap interface
252     @param use_random_mac - let the system generate a unique mac address
253     @param tap_name - name to associate with the new interface
254     @param mac_address - mac addr to assign to the interface if use_radom not set
255 */
256 define tap_modify
257 {
258   u32 client_index;
259   u32 context;
260   u32 sw_if_index;
261   u8 use_random_mac;
262   u8 tap_name[64];
263   u8 mac_address[6];
264   u8 renumber;
265   u32 custom_dev_instance;
266 };
267
268 /** \brief Reply for tap modify request
269     @param context - returned sender context, to match reply w/ request
270     @param retval - return code
271     @param sw_if_index - software index if the modified tap interface
272 */
273 define tap_modify_reply
274 {
275   u32 context;
276   i32 retval;
277   u32 sw_if_index;
278 };
279
280 /** \brief Delete tap interface
281     @param client_index - opaque cookie to identify the sender
282     @param context - sender context, to match reply w/ request
283     @param sw_if_index - interface index of existing tap interface
284 */
285 define tap_delete
286 {
287   u32 client_index;
288   u32 context;
289   u32 sw_if_index;
290 };
291
292 /** \brief Reply for tap delete request
293     @param context - returned sender context, to match reply w/ request
294     @param retval - return code
295 */
296 define tap_delete_reply
297 {
298   u32 context;
299   i32 retval;
300 };
301
302 /** \brief Dump tap interfaces request */
303 define sw_interface_tap_dump
304 {
305   u32 client_index;
306   u32 context;
307 };
308
309 /** \brief Reply for tap dump request
310     @param sw_if_index - software index of tap interface
311     @param dev_name - Linux tap device name
312 */
313 define sw_interface_tap_details
314 {
315   u32 context;
316   u32 sw_if_index;
317   u8 dev_name[64];
318 };
319
320 /** \brief Create a new subinterface with the given vlan id
321     @param client_index - opaque cookie to identify the sender
322     @param context - sender context, to match reply w/ request
323     @param sw_if_index - software index of the new vlan's parent interface
324     @param vlan_id - vlan tag of the new interface
325 */
326 define create_vlan_subif
327 {
328   u32 client_index;
329   u32 context;
330   u32 sw_if_index;
331   u32 vlan_id;
332 };
333
334 /** \brief Reply for the vlan subinterface create request
335     @param context - returned sender context, to match reply w/ request
336     @param retval - return code
337     @param sw_if_index - software index allocated for the new subinterface
338 */
339 define create_vlan_subif_reply
340 {
341   u32 context;
342   i32 retval;
343   u32 sw_if_index;
344 };
345
346 /** \brief Add / del route request
347     @param client_index - opaque cookie to identify the sender
348     @param context - sender context, to match reply w/ request
349     @param sw_if_index - software index of the new vlan's parent interface
350     @param vrf_id - fib table /vrf associated with the route
351     @param lookup_in_vrf - 
352     @param resolve_attempts - 
353     @param classify_table_index - 
354     @param create_vrf_if_needed - 
355     @param resolve_if_needed - 
356     @param is_add - 1 if adding the route, 0 if deleting
357     @param is_drop - 
358     @param is_ipv6 - 0 if an ip4 route, else ip6
359     @param is_local - 
360     @param is_classify - 
361     @param is_multipath - Set to 1 if this is a multipath route, else 0
362     @param not_last - Is last or not last msg in group of multiple add/del msgs
363     @param next_hop_weight - 
364     @param dst_address_length - 
365     @param dst_address[16] - 
366     @param next_hop_address[16] - 
367 */
368 define ip_add_del_route
369 {
370   u32 client_index;
371   u32 context;
372   u32 next_hop_sw_if_index;
373   u32 vrf_id;
374   u32 lookup_in_vrf;
375   u32 resolve_attempts;
376   u32 classify_table_index;
377   u8 create_vrf_if_needed;
378   u8 resolve_if_needed;
379   u8 is_add;
380   u8 is_drop;
381   u8 is_ipv6;
382   u8 is_local;
383   u8 is_classify;
384   /* Is last/not-last message in group of multiple add/del messages. */
385   u8 is_multipath;
386   u8 not_last;
387   u8 next_hop_weight;
388   u8 dst_address_length;
389   u8 dst_address[16];
390   u8 next_hop_address[16];
391 };
392
393 /** \brief Reply for add / del route request
394     @param context - returned sender context, to match reply w/ request
395     @param retval - return code
396 */
397 define ip_add_del_route_reply
398 {
399   u32 context;
400   i32 retval;
401 };
402
403 /* works */
404 /** \brief Add / del gre tunnel request
405     @param client_index - opaque cookie to identify the sender
406     @param context - sender context, to match reply w/ request
407     @param sw_if_index - software index of the new vlan's parent interface
408     @param inner_vrf_id -
409     @param outer_vrf_id - 
410     @param is_add - 1 if adding the tunnel, 0 if deleting
411     @param src_address[4] - tunnel source address
412     @param dst_address[4] - tunnel destination address
413     @param intf_address - 
414     @param intf_address_length - 
415 */
416 define mpls_gre_add_del_tunnel
417 {
418   u32 client_index;
419   u32 context;
420   u32 inner_vrf_id;
421   u32 outer_vrf_id;
422   u8 is_add;
423   u8 l2_only;
424   u8 src_address[4];
425   u8 dst_address[4];
426   u8 intfc_address[4];
427   u8 intfc_address_length;
428 };
429
430 /** \brief Reply for add / del tunnel request
431     @param context - returned sender context, to match reply w/ request
432     @param retval - return code
433 */
434 define mpls_gre_add_del_tunnel_reply
435 {
436   u32 context;
437   i32 retval;
438   u32 tunnel_sw_if_index;
439 };
440
441 /** \brief Add / del MPLS encapsulation request
442     @param client_index - opaque cookie to identify the sender
443     @param context - sender context, to match reply w/ request
444     @param vrf_id - vrf id
445     @param dst_address[4] - 
446     @param is_add - 1 if adding the encap, 0 if deleting
447     @param nlabels - number of labels 
448     @param labels - array of labels
449 */
450 define mpls_add_del_encap
451 {
452   u32 client_index;
453   u32 context;
454   u32 vrf_id;
455   u8 dst_address[4];
456   /* 1 = add, 0 = delete */
457   u8 is_add;
458   u8 nlabels;
459   u32 labels[0];
460 };
461
462 /** \brief Reply for add / del encapsulation request
463     @param context - returned sender context, to match reply w/ request
464     @param retval - return code
465 */
466 define mpls_add_del_encap_reply
467 {
468   u32 context;
469   i32 retval;
470 };
471
472 /** \brief Add / del MPLS decapsulation request
473     @param client_index - opaque cookie to identify the sender
474     @param context - sender context, to match reply w/ request
475     @param rx_vrf_id - receive vrf
476     @param tx_vrf_id - transmit vrf
477     @param label - 
478     @param next_index - 
479     @param s_bit - 
480     @param is_add - 1 if adding the encap, 0 if deleting
481 */
482 define mpls_add_del_decap
483 {
484   u32 client_index;
485   u32 context;
486   u32 rx_vrf_id;
487   u32 tx_vrf_id;
488   u32 label;
489   u32 next_index;
490   u8 s_bit;
491   u8 is_add;
492 };
493
494 /** \brief Reply for MPLS decap add / del request
495     @param context - returned sender context, to match reply w/ request
496     @param retval - return code
497 */
498 define mpls_add_del_decap_reply
499 {
500   u32 context;
501   i32 retval;
502 };
503
504 /** \brief Proxy ARP add / del request
505     @param client_index - opaque cookie to identify the sender
506     @param context - sender context, to match reply w/ request
507     @param vrf_id - VRF / Fib table ID
508     @param is_add - 1 if adding the Proxy ARP range, 0 if deleting
509     @param low_address[4] - Low address of the Proxy ARP range
510     @param hi_address[4] - High address of the Proxy ARP range
511 */
512 define proxy_arp_add_del
513 {
514   u32 client_index;
515   u32 context;
516   u32 vrf_id;
517   u8 is_add;
518   u8 low_address[4];
519   u8 hi_address[4];
520 };
521
522 /** \brief Reply for proxy arp add / del request
523     @param context - returned sender context, to match reply w/ request
524     @param retval - return code
525 */
526 define proxy_arp_add_del_reply
527 {
528   u32 context;
529   i32 retval;
530 };
531
532 /** \brief Proxy ARP add / del request
533     @param client_index - opaque cookie to identify the sender
534     @param context - sender context, to match reply w/ request
535     @param sw_if_index - Which interface to enable / disable Proxy Arp on
536     @param enable_disable - 1 to enable Proxy ARP on interface, 0 to disable
537 */
538 define proxy_arp_intfc_enable_disable
539 {
540   u32 client_index;
541   u32 context;
542   u32 sw_if_index;
543   /* 1 = on, 0 = off */
544   u8 enable_disable;
545 };
546
547 /** \brief Reply for Proxy ARP interface enable / disable request
548     @param context - returned sender context, to match reply w/ request
549     @param retval - return code
550 */
551 define proxy_arp_intfc_enable_disable_reply
552 {
553   u32 context;
554   i32 retval;
555 };
556
557 /** \brief IP neighbor add / del request
558     @param client_index - opaque cookie to identify the sender
559     @param context - sender context, to match reply w/ request
560     @param vrf_id - vrf_id, only for IP4
561     @param sw_if_index - interface used to reach neighbor
562     @param is_add - 1 to add neighbor, 0 to delete
563     @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
564     @param is_static - 
565     @param mac_address - l2 address of the neighbor
566     @param dst_address - ip4 or ip6 address of the neighbor
567 */
568 define ip_neighbor_add_del
569 {
570   u32 client_index;
571   u32 context;
572   u32 vrf_id;                   /* only makes sense for ip4 */
573   u32 sw_if_index;
574   /* 1 = add, 0 = delete */
575   u8 is_add;
576   u8 is_ipv6;
577   u8 is_static;
578   u8 mac_address[6];
579   u8 dst_address[16];
580 };
581
582 /** \brief Reply for IP Neighbor add / delete request
583     @param context - returned sender context, to match reply w/ request
584     @param retval - return code
585 */
586 define ip_neighbor_add_del_reply
587 {
588   u32 context;
589   i32 retval;
590 };
591
592 /** \brief Reset VRF (remove all routes etc) request
593     @param client_index - opaque cookie to identify the sender
594     @param context - sender context, to match reply w/ request
595     @param is_ipv6 - 1 for IPv6 neighbor, 0 for IPv4
596     @param vrf_id - ID of th FIB table / VRF to reset
597 */
598 define reset_vrf
599 {
600   u32 client_index;
601   u32 context;
602   u8 is_ipv6;
603   u32 vrf_id;
604 };
605
606 /** \brief Reply for Reset VRF request
607     @param context - returned sender context, to match reply w/ request
608     @param retval - return code
609 */
610 define reset_vrf_reply
611 {
612   u32 context;
613   i32 retval;
614 };
615
616 /** \brief Is Address Reachable request - DISABLED
617     @param client_index - opaque cookie to identify the sender
618     @param context - sender context, to match reply w/ request
619     @param next_hop_sw_if_index - index of interface used to get to next hop
620     @param is_ipv6 - 1 for IPv6, 0 for IPv4
621     @param is_error - address not found or does not match intf
622     @param address[] - Address in question 
623 */
624 define is_address_reachable
625 {
626   u32 client_index;             /* (api_main_t *) am->my_client_index */
627   u32 context;
628   u32 next_hop_sw_if_index;
629   u8 is_known;                  /* on reply, this is the answer */
630   u8 is_ipv6;
631   u8 is_error;                  /* address not found or does not match intf */
632   u8 address[16];
633 };
634
635 /** \brief Want Stats, register for stats updates
636     @param client_index - opaque cookie to identify the sender
637     @param context - sender context, to match reply w/ request
638     @param enable_disable - 1 = enable stats, 0 = disable
639     @param pid - pid of process requesting stats updates
640 */
641 define want_stats
642 {
643   u32 client_index;
644   u32 context;
645   u32 enable_disable;
646   u32 pid;
647 };
648
649 /** \brief Reply for Want Stats request
650     @param context - returned sender context, to match reply w/ request
651     @param retval - return code
652 */
653 define want_stats_reply
654 {
655   u32 context;
656   i32 retval;
657 };
658
659 /** \brief Want stats counters structure 
660     @param vnet_counter_type- such as ip4, ip6, punts, etc
661     @param is_combined - rx & tx total (all types) counts   
662     @param first_sw_if_index - first sw index in block of index, counts
663     @param count - number of interfaces this stats block includes counters for
664     @param data - contiguous block of vlib_counter_t structures 
665 */
666 define vnet_interface_counters
667 {
668   /* enums - plural - in vnet/interface.h */
669   u8 vnet_counter_type;
670   u8 is_combined;
671   u32 first_sw_if_index;
672   u32 count;
673   u8 data[count];
674 };
675
676 typeonly manual_print manual_endian define ip4_fib_counter
677 {
678   u32 address;
679   u8 address_length;
680   u64 packets;
681   u64 bytes;
682 };
683
684 manual_print manual_endian define vnet_ip4_fib_counters
685 {
686   u32 vrf_id;
687   u32 count;
688   vl_api_ip4_fib_counter_t c[count];
689 };
690
691 typeonly manual_print manual_endian define ip6_fib_counter
692 {
693   u64 address[2];
694   u8 address_length;
695   u64 packets;
696   u64 bytes;
697 };
698
699 manual_print manual_endian define vnet_ip6_fib_counters
700 {
701   u32 vrf_id;
702   u32 count;
703   vl_api_ip6_fib_counter_t c[count];
704 };
705
706 /** \brief Request for a single block of summary stats
707     @param client_index - opaque cookie to identify the sender
708     @param context - sender context, to match reply w/ request
709 */
710 define vnet_get_summary_stats
711 {
712   u32 client_index;
713   u32 context;
714 };
715
716 /** \brief Reply for vnet_get_summary_stats request
717     @param context - sender context, to match reply w/ request
718     @param retval - return code for request
719     @param total_pkts -  
720     @param total_bytes -
721     @param vector_rate - 
722 */
723 define vnet_summary_stats_reply
724 {
725   u32 context;
726   i32 retval;
727   u64 total_pkts[2];
728   u64 total_bytes[2];
729   f64 vector_rate;
730 };
731
732 /** \brief OAM event structure
733     @param dst_address[] - 
734     @param state
735 */
736 define oam_event
737 {
738   u8 dst_address[4];
739   u8 state;
740 };
741
742 /** \brief Want OAM events request
743     @param client_index - opaque cookie to identify the sender
744     @param context - sender context, to match reply w/ request
745     @param enable_disable- enable if non-zero, else disable
746     @param pid - pid of the requesting process
747 */
748 define want_oam_events
749 {
750   u32 client_index;
751   u32 context;
752   u32 enable_disable;
753   u32 pid;
754 };
755
756 /** \brief Want OAM events response
757     @param context - sender context, to match reply w/ request
758     @param retval - return code for the want oam stats request
759 */
760 define want_oam_events_reply
761 {
762   u32 context;
763   i32 retval;
764 };
765
766 /** \brief OAM add / del target request
767     @param client_index - opaque cookie to identify the sender
768     @param context - sender context, to match reply w/ request
769     @param vrf_id - vrf_id of the target
770     @param src_address[] - source address to use for the updates 
771     @param dst_address[] - destination address of the target
772     @param is_add - add target if non-zero, else delete
773 */
774 define oam_add_del
775 {
776   u32 client_index;
777   u32 context;
778   u32 vrf_id;
779   u8 src_address[4];
780   u8 dst_address[4];
781   u8 is_add;
782 };
783
784 /** \brief OAM add / del target response
785     @param context - sender context, to match reply w/ request
786     @param retval - return code of the request
787 */
788 define oam_add_del_reply
789 {
790   u32 context;
791   i32 retval;
792 };
793
794 /** \brief Reset fib table request
795     @param client_index - opaque cookie to identify the sender
796     @param context - sender context, to match reply w/ request
797     @param vrf_id - vrf/table id of the fib table to reset
798     @param is_ipv6 - an ipv6 fib to reset if non-zero, else ipv4
799 */
800 define reset_fib
801 {
802   u32 client_index;
803   u32 context;
804   u32 vrf_id;
805   u8 is_ipv6;
806 };
807
808 /** \brief Reset fib response
809     @param context - sender context, to match reply w/ request
810     @param retval - return code for the reset bfib request
811 */
812 define reset_fib_reply
813 {
814   u32 context;
815   i32 retval;
816 };
817
818 /** \brief DHCP Proxy config add / del request
819     @param client_index - opaque cookie to identify the sender
820     @param context - sender context, to match reply w/ request
821     @param vrf_id - vrf id
822     @param if_ipv6 - ipv6 if non-zero, else ipv4
823     @param is_add - add the config if non-zero, else delete
824     @param insert_circuit_id - option82 suboption 1 fib number
825     @param dhcp_server[] - server address
826     @param dhcp_src_address[] - <fix this, need details>
827 */
828 define dhcp_proxy_config
829 {
830   u32 client_index;
831   u32 context;
832   u32 vrf_id;
833   u8 is_ipv6;
834   u8 is_add;
835   u8 insert_circuit_id;
836   u8 dhcp_server[16];
837   u8 dhcp_src_address[16];
838 };
839
840 /** \brief DHCP Proxy config response
841     @param context - sender context, to match reply w/ request
842     @param retval - return code for the request
843 */
844 define dhcp_proxy_config_reply
845 {
846   u32 context;
847   i32 retval;
848 };
849
850 /** \brief DHCP Proxy set / unset vss request
851     @param client_index - opaque cookie to identify the sender
852     @param context - sender context, to match reply w/ request
853     @param tbl_id - table id
854     @param oui - first part of vpn id
855     @param fib_id - second part of vpn id
856     @param is_ipv6 - ip6 if non-zero, else ip4
857     @param is_add - set vss if non-zero, else delete
858 */
859 define dhcp_proxy_set_vss
860 {
861   u32 client_index;
862   u32 context;
863   u32 tbl_id;
864   u32 oui;
865   u32 fib_id;
866   u8 is_ipv6;
867   u8 is_add;
868 };
869
870 /** \brief DHCP proxy set / unset vss response
871     @param context - sender context, to match reply w/ request
872     @param retval - return code for the request
873 */
874 define dhcp_proxy_set_vss_reply
875 {
876   u32 context;
877   i32 retval;
878 };
879
880 /** \brief Set the ip flow hash config for a fib request
881     @param client_index - opaque cookie to identify the sender
882     @param context - sender context, to match reply w/ request
883     @param vrf_id - vrf/fib id
884     @param is_ipv6 - if non-zero the fib is ip6, else ip4
885     @param src - if non-zero include src in flow hash
886     @param dst - if non-zero include dst in flow hash
887     @param sport - if non-zero include sport in flow hash
888     @param dport - if non-zero include dport in flow hash
889     @param proto -if non-zero include proto in flow hash
890     @param reverse - if non-zero include reverse in flow hash
891 */
892 define set_ip_flow_hash
893 {
894   u32 client_index;
895   u32 context;
896   u32 vrf_id;
897   u8 is_ipv6;
898   u8 src;
899   u8 dst;
900   u8 sport;
901   u8 dport;
902   u8 proto;
903   u8 reverse;
904 };
905
906 /** \brief Set the ip flow hash config for a fib response
907     @param context - sender context, to match reply w/ request
908     @param retval - return code for the request
909 */
910 define set_ip_flow_hash_reply
911 {
912   u32 context;
913   i32 retval;
914 };
915
916 /** \brief IPv6 router advertisement config request
917     @param client_index - opaque cookie to identify the sender
918     @param context - sender context, to match reply w/ request
919     @param suppress -
920     @param managed -
921     @param other -
922     @param ll_option -
923     @param send_unicast -
924     @param cease -
925     @param is_no -
926     @param default_router -
927     @param max_interval -
928     @param min_interval -
929     @param lifetime -
930     @param initial_count -
931     @param initial_interval -
932 */
933 define sw_interface_ip6nd_ra_config
934 {
935   u32 client_index;
936   u32 context;
937   u32 sw_if_index;
938   u8 suppress;
939   u8 managed;
940   u8 other;
941   u8 ll_option;
942   u8 send_unicast;
943   u8 cease;
944   u8 is_no;
945   u8 default_router;
946   u32 max_interval;
947   u32 min_interval;
948   u32 lifetime;
949   u32 initial_count;
950   u32 initial_interval;
951 };
952
953 /** \brief IPv6 router advertisement config response
954     @param context - sender context, to match reply w/ request
955     @param retval - return code for the request
956 */
957 define sw_interface_ip6nd_ra_config_reply
958 {
959   u32 context;
960   i32 retval;
961 };
962
963 /** \brief IPv6 router advertisement prefix config request
964     @param client_index - opaque cookie to identify the sender
965     @param context - sender context, to match reply w/ request
966     @param sw_if_index - 
967     @param address[] -
968     @param address_length -
969     @param use_default -
970     @param no_advertise -
971     @param off_link -
972     @param no_autoconfig -
973     @param no_onlink -
974     @param is_no -
975     @param val_lifetime -
976     @param pref_lifetime -
977 */
978 define sw_interface_ip6nd_ra_prefix
979 {
980   u32 client_index;
981   u32 context;
982   u32 sw_if_index;
983   u8 address[16];
984   u8 address_length;
985   u8 use_default;
986   u8 no_advertise;
987   u8 off_link;
988   u8 no_autoconfig;
989   u8 no_onlink;
990   u8 is_no;
991   u32 val_lifetime;
992   u32 pref_lifetime;
993 };
994
995 /** \brief IPv6 router advertisement prefix config response
996     @param context - sender context, to match reply w/ request
997     @param retval - return code for the request
998 */
999 define sw_interface_ip6nd_ra_prefix_reply
1000 {
1001   u32 context;
1002   i32 retval;
1003 };
1004
1005 /** \brief IPv6 interface enable / disable request
1006     @param client_index - opaque cookie to identify the sender
1007     @param context - sender context, to match reply w/ request
1008     @param sw_if_index - interface used to reach neighbor
1009     @param enable - if non-zero enable ip6 on interface, else disable
1010 */
1011 define sw_interface_ip6_enable_disable
1012 {
1013   u32 client_index;
1014   u32 context;
1015   u32 sw_if_index;
1016   u8 enable;                    /* set to true if enable */
1017 };
1018
1019 /** \brief IPv6 interface enable / disable response
1020     @param context - sender context, to match reply w/ request
1021     @param retval - return code for the request
1022 */
1023 define sw_interface_ip6_enable_disable_reply
1024 {
1025   u32 context;
1026   i32 retval;
1027 };
1028
1029 /** \brief IPv6 set link local address on interface request
1030     @param client_index - opaque cookie to identify the sender
1031     @param context - sender context, to match reply w/ request
1032     @param sw_if_index - interface to set link local on
1033     @param address[] - the new link local address
1034     @param address_length - link local address length
1035 */
1036 define sw_interface_ip6_set_link_local_address
1037 {
1038   u32 client_index;
1039   u32 context;
1040   u32 sw_if_index;
1041   u8 address[16];
1042   u8 address_length;
1043 };
1044
1045 /** \brief IPv6 set link local address on interface response
1046     @param context - sender context, to match reply w/ request
1047     @param retval - error code for the request
1048 */
1049 define sw_interface_ip6_set_link_local_address_reply
1050 {
1051   u32 context;
1052   i32 retval;
1053 };
1054
1055 /** \brief Set unnumbered interface add / del request
1056     @param client_index - opaque cookie to identify the sender
1057     @param context - sender context, to match reply w/ request
1058     @param sw_if_index - interface with an IP address
1059     @param unnumbered_sw_if_index - interface which will use the address
1060     @param is_add - if non-zero set the association, else unset it
1061 */
1062 define sw_interface_set_unnumbered
1063 {
1064   u32 client_index;
1065   u32 context;
1066   u32 sw_if_index;              /* use this intfc address */
1067   u32 unnumbered_sw_if_index;   /* on this interface */
1068   u8 is_add;
1069 };
1070
1071 /** \brief Set unnumbered interface add / del response
1072     @param context - sender context, to match reply w/ request
1073     @param retval - return code for the request
1074 */
1075 define sw_interface_set_unnumbered_reply
1076 {
1077   u32 context;
1078   i32 retval;
1079 };
1080
1081 /** \brief Create loopback interface request
1082     @param client_index - opaque cookie to identify the sender
1083     @param context - sender context, to match reply w/ request
1084     @param mac_address - mac addr to assign to the interface if none-zero
1085 */
1086 define create_loopback
1087 {
1088   u32 client_index;
1089   u32 context;
1090   u8 mac_address[6];
1091 };
1092
1093 /** \brief Create loopback interface response
1094     @param context - sender context, to match reply w/ request
1095     @param sw_if_index - sw index of the interface that was created
1096     @param retval - return code for the request
1097 */
1098 define create_loopback_reply
1099 {
1100   u32 context;
1101   i32 retval;
1102   u32 sw_if_index;
1103 };
1104
1105 /** \brief Delete loopback interface request
1106     @param client_index - opaque cookie to identify the sender
1107     @param context - sender context, to match reply w/ request
1108     @param sw_if_index - sw index of the interface that was created
1109 */
1110 define delete_loopback
1111 {
1112   u32 client_index;
1113   u32 context;
1114   u32 sw_if_index;
1115 };
1116
1117 /** \brief Delete loopback interface response
1118     @param context - sender context, to match reply w/ request
1119     @param retval - return code for the request
1120 */
1121 define delete_loopback_reply
1122 {
1123   u32 context;
1124   i32 retval;
1125 };
1126
1127 /** \brief Control ping from client to api server request
1128     @param client_index - opaque cookie to identify the sender
1129     @param context - sender context, to match reply w/ request
1130 */
1131 define control_ping
1132 {
1133   u32 client_index;
1134   u32 context;
1135 };
1136
1137 /** \brief Control ping from the client to the server response
1138     @param client_index - opaque cookie to identify the sender
1139     @param context - sender context, to match reply w/ request
1140     @param retval - return code for the request
1141     @param vpe_pid - the pid of the vpe, returned by the server
1142 */
1143 define control_ping_reply
1144 {
1145   u32 context;
1146   i32 retval;
1147   u32 client_index;
1148   u32 vpe_pid;
1149 };
1150
1151 /** \brief Control ping from client to api server request, no print json output
1152     @param client_index - opaque cookie to identify the sender
1153     @param context - sender context, to match reply w/ request
1154 */
1155 define noprint_control_ping
1156 {
1157   u32 client_index;
1158   u32 context;
1159 };
1160
1161 /** \brief Control ping from the client to the server response
1162     @param client_index - opaque cookie to identify the sender
1163     @param context - sender context, to match reply w/ request
1164     @param retval - return code for the request
1165     @param vpe_pid - the pid of the vpe, returned by the server
1166 */
1167 define noprint_control_ping_reply
1168 {
1169   u32 context;
1170   i32 retval;
1171   u32 client_index;
1172   u32 vpe_pid;
1173 };
1174
1175 /** \brief Process a vpe parser cli string request
1176     @param client_index - opaque cookie to identify the sender
1177     @param context - sender context, to match reply w/ request
1178     @param cmd_in_shmem - pointer to cli command string
1179 */
1180 define cli_request
1181 {
1182   u32 client_index;
1183   u32 context;
1184   u64 cmd_in_shmem;
1185 };
1186
1187 /** \brief vpe parser cli string response
1188     @param context - sender context, to match reply w/ request
1189     @param retval - return code for request
1190     @param reply_in_shmem - Reply string from cli processing if any
1191 */
1192 define cli_reply
1193 {
1194   u32 context;
1195   i32 retval;
1196   u64 reply_in_shmem;
1197 };
1198
1199 /** \brief Set max allowed ARP or ip6 neighbor entries request
1200     @param client_index - opaque cookie to identify the sender
1201     @param context - sender context, to match reply w/ request
1202     @param is_ipv6 - neighbor limit if non-zero, else ARP limit
1203     @param arp_neighbor_limit - the new limit, defaults are ~ 50k
1204 */
1205 define set_arp_neighbor_limit
1206 {
1207   u32 client_index;
1208   u32 context;
1209   u8 is_ipv6;
1210   u32 arp_neighbor_limit;
1211 };
1212
1213 /** \brief Set max allowed ARP or ip6 neighbor entries response
1214     @param context - sender context, to match reply w/ request
1215     @param retval - return code for request
1216 */
1217 define set_arp_neighbor_limit_reply
1218 {
1219   u32 context;
1220   i32 retval;
1221 };
1222
1223 /** \brief L2 interface patch add / del request
1224     @param client_index - opaque cookie to identify the sender
1225     @param context - sender context, to match reply w/ request
1226     @param rx_sw_if_index - receive side interface 
1227     @param tx_sw_if_index - transmit side interface
1228     @param is_add - if non-zero set up the interface patch, else remove it
1229 */
1230 define l2_patch_add_del
1231 {
1232   u32 client_index;
1233   u32 context;
1234   u32 rx_sw_if_index;
1235   u32 tx_sw_if_index;
1236   u8 is_add;
1237 };
1238
1239 /** \brief L2 interface patch add / del response
1240     @param context - sender context, to match reply w/ request
1241     @param retval - return code for the request
1242 */
1243 define l2_patch_add_del_reply
1244 {
1245   u32 context;
1246   i32 retval;
1247 };
1248
1249 /** \brief IPv6 segment routing tunnel add / del request
1250     @param client_index - opaque cookie to identify the sender
1251     @param context - sender context, to match reply w/ request
1252     @param is_add - add the tunnel if non-zero, else delete it
1253     @param name[] - tunnel name (len. 64)
1254     @param src_address[] -
1255     @param dst_address[] -
1256     @param dst_mask_width -
1257     @param inner_vrf_id -
1258     @param outer_vrf_id -
1259     @param flags_net_byte_order -
1260     @param n_segments -
1261     @param n_tags -
1262     @param segs_and_tags[] -
1263     @param policy_name[] - name of policy to associate this tunnel to (len. 64)
1264 */
1265 define sr_tunnel_add_del
1266 {
1267   u32 client_index;
1268   u32 context;
1269   u8 is_add;
1270   u8 name[64];
1271   u8 src_address[16];
1272   u8 dst_address[16];
1273   u8 dst_mask_width;
1274   u32 inner_vrf_id;
1275   u32 outer_vrf_id;
1276   u16 flags_net_byte_order;
1277   u8 n_segments;
1278   u8 n_tags;
1279   u8 segs_and_tags[0];
1280   u8 policy_name[64];
1281 };
1282
1283 /** \brief IPv6 segment routing tunnel add / del response
1284     @param context - sender context, to match reply w/ request
1285     @param retval - return value for request
1286 */
1287 define sr_tunnel_add_del_reply
1288 {
1289   u32 context;
1290   i32 retval;
1291 };
1292
1293 /** \brief IPv6 segment routing policy add / del request
1294     @param client_index - opaque cookie to identify the sender
1295     @param context - sender context, to match reply w/ request
1296     @param is_add - add the tunnel if non-zero, else delete it
1297     @param name[] - policy name (len. 64)
1298     @param tunnel_names[] -
1299 */
1300 define sr_policy_add_del
1301 {
1302   u32 client_index;
1303   u32 context;
1304   u8 is_add;
1305   u8 name[64];
1306   u8 tunnel_names[0];
1307 };
1308
1309 /** \brief IPv6 segment routing policy add / del response
1310     @param context - sender context, to match reply w/ request
1311     @param retval - return value for request
1312 */
1313 define sr_policy_add_del_reply
1314 {
1315   u32 context;
1316   i32 retval;
1317 };
1318
1319 /** \brief IPv6 segment routing multicast map to policy add / del request
1320     @param client_index - opaque cookie to identify the sender
1321     @param context - sender context, to match reply w/ request
1322     @param is_add - add the tunnel if non-zero, else delete it
1323     @param multicast_address[] - IP6 multicast address
1324     @param policy_name[] = policy name (len.64)
1325 */
1326 define sr_multicast_map_add_del
1327 {
1328   u32 client_index;
1329   u32 context;
1330   u8 is_add;
1331   u8 multicast_address[16];
1332   u8 policy_name[64];
1333 };
1334
1335 /** \brief IPv6 segment routing multicast map to policy add / del response
1336     @param context - sender context, to match reply w/ request
1337     @param retval - return value for request
1338 */
1339 define sr_multicast_map_add_del_reply
1340 {
1341   u32 context;
1342   i32 retval;
1343 };
1344
1345 /** \brief Interface set vpath request
1346     @param client_index - opaque cookie to identify the sender
1347     @param context - sender context, to match reply w/ request
1348     @param sw_if_index - interface used to reach neighbor
1349     @param enable - if non-zero enable, else disable
1350 */
1351 define sw_interface_set_vpath
1352 {
1353   u32 client_index;
1354   u32 context;
1355   u32 sw_if_index;
1356   u8 enable;
1357 };
1358
1359 /** \brief Interface set vpath response
1360     @param context - sender context, to match reply w/ request
1361     @param retval - return code for the request
1362 */
1363 define sw_interface_set_vpath_reply
1364 {
1365   u32 context;
1366   i32 retval;
1367 };
1368
1369 /** \brief MPLS Ethernet add / del tunnel request
1370     @param client_index - opaque cookie to identify the sender
1371     @param context - sender context, to match reply w/ request
1372     @param vrf_id - vrf_id, only for IP4
1373     @param sw_if_index - interface used to reach neighbor
1374     @param is_add - add if set, tunnel delete if 0
1375     @param dst_mac_address - 
1376     @param adj_address - 
1377     @param adj_address_length -
1378 */
1379 define mpls_ethernet_add_del_tunnel
1380 {
1381   u32 client_index;
1382   u32 context;
1383   u32 vrf_id;
1384   u32 tx_sw_if_index;
1385   u8 is_add;
1386   u8 l2_only;
1387   u8 dst_mac_address[6];
1388   u8 adj_address[4];
1389   u8 adj_address_length;
1390 };
1391
1392 /** \brief Reply for MPLS Ethernet add / delete tunnel request
1393     @param context - sender context, to match reply w/ request
1394     @param retval - return code for the request
1395 */
1396 define mpls_ethernet_add_del_tunnel_reply
1397 {
1398   u32 context;
1399   i32 retval;
1400   u32 tunnel_sw_if_index;
1401 };
1402 /** \brief MPLS Ethernet add/ del tunnel 2
1403     @param client_index - opaque cookie to identify the sender
1404     @param context - sender context, to match reply w/ request
1405     @param inner_vrf_id - 
1406     @param outer_vrf_id - 
1407     @param resolve_attempts - 
1408     @param resolve_opaque - 
1409     @param resolve_if_needed -
1410     @param is_add -
1411     @param adj_address -
1412     @param adj_address_length -
1413     @param next_hop_ip4_address_in_outer_vrf -
1414 */
1415 define mpls_ethernet_add_del_tunnel_2
1416 {
1417   u32 client_index;
1418   u32 context;
1419   u32 inner_vrf_id;
1420   u32 outer_vrf_id;
1421   u32 resolve_attempts;
1422   u32 resolve_opaque;           /* no need to set this */
1423   u8 resolve_if_needed;
1424   u8 is_add;
1425   u8 l2_only;
1426   u8 adj_address[4];
1427   u8 adj_address_length;
1428   u8 next_hop_ip4_address_in_outer_vrf[4];
1429 };
1430
1431 /** \brief MPLS Ethernet add/ del tunnel 2
1432     @param context - sender context, to match reply w/ request
1433     @param retval - return code for add /del request
1434 */
1435 define mpls_ethernet_add_del_tunnel_2_reply
1436 {
1437   u32 context;
1438   i32 retval;
1439 };
1440
1441 /** \brief Set L2 XConnect between two interfaces request
1442     @param client_index - opaque cookie to identify the sender
1443     @param context - sender context, to match reply w/ request
1444     @param rx_sw_if_index - Receive interface index
1445     @param tx_sw_if_index - Transmit interface index
1446     @param enable - enable xconnect if not 0, else set to L3 mode
1447 */
1448 define sw_interface_set_l2_xconnect
1449 {
1450   u32 client_index;
1451   u32 context;
1452   u32 rx_sw_if_index;
1453   u32 tx_sw_if_index;
1454   u8 enable;
1455 };
1456
1457 /** \brief Set L2 XConnect response
1458     @param context - sender context, to match reply w/ request
1459     @param retval - L2 XConnect request return code
1460 */
1461 define sw_interface_set_l2_xconnect_reply
1462 {
1463   u32 context;
1464   i32 retval;
1465 };
1466
1467 /** \brief Interface bridge mode request
1468     @param client_index - opaque cookie to identify the sender
1469     @param context - sender context, to match reply w/ request
1470     @param rx_sw_if_index - the interface
1471     @param bd_id - bridge domain id
1472     @param bvi - Setup interface as a bvi, bridge mode only
1473     @param shg - Shared horizon group, for bridge mode only
1474     @param enable - Enable beige mode if not 0, else set to L3 mode
1475 */
1476 define sw_interface_set_l2_bridge
1477 {
1478   u32 client_index;
1479   u32 context;
1480   u32 rx_sw_if_index;
1481   u32 bd_id;
1482   u8 shg;
1483   u8 bvi;
1484   u8 enable;
1485 };
1486
1487 /** \brief Interface bridge mode response
1488     @param context - sender context, to match reply w/ request
1489     @param retval - Bridge mode request return code
1490 */
1491 define sw_interface_set_l2_bridge_reply
1492 {
1493   u32 context;
1494   i32 retval;
1495 };
1496
1497 /** \brief L2 FIB add entry request
1498     @param client_index - opaque cookie to identify the sender
1499     @param context - sender context, to match reply w/ request
1500     @param mac - the entry's mac address
1501     @param bd_id - the entry's bridge domain id
1502     @param sw_if_index - the interface
1503     @param is_add - If non zero add the entry, else delete it
1504     @param static_mac - 
1505     @param filter_mac -
1506 */
1507 define l2fib_add_del
1508 {
1509   u32 client_index;
1510   u32 context;
1511   u64 mac;
1512   u32 bd_id;
1513   u32 sw_if_index;
1514   u8 is_add;
1515   u8 static_mac;
1516   u8 filter_mac;
1517   u8 bvi_mac;
1518 };
1519
1520 /** \brief L2 FIB add entry response
1521     @param context - sender context, to match reply w/ request
1522     @param retval - return code for the add l2fib entry request
1523 */
1524 define l2fib_add_del_reply
1525 {
1526   u32 context;
1527   i32 retval;
1528 };
1529
1530 /** \brief Set L2 flags request !!! TODO - need more info, feature bits in l2_input.h
1531     @param client_index - opaque cookie to identify the sender
1532     @param context - sender context, to match reply w/ request
1533     @param sw_if_index - interface 
1534     @param is_set - if non-zero, set the bits, else clear them
1535     @param feature_bitmap - non-zero bits to set or clear
1536 */
1537 define l2_flags
1538 {
1539   u32 client_index;
1540   u32 context;
1541   u32 sw_if_index;
1542   u8 is_set;
1543   u32 feature_bitmap;
1544 };
1545
1546 /** \brief Set L2 bits response
1547     @param context - sender context, to match reply w/ request
1548     @param retval - return code for the set l2 bits request
1549 */
1550 define l2_flags_reply
1551 {
1552   u32 context;
1553   i32 retval;
1554   u32 resulting_feature_bitmap;
1555 };
1556
1557 /** \brief Set bridge flags (such as L2_LEARN, L2_FWD, L2_FLOOD, 
1558     L2_UU_FLOOD, or L2_ARP_TERM) request
1559     @param client_index - opaque cookie to identify the sender
1560     @param context - sender context, to match reply w/ request
1561     @param bd_id - the bridge domain to set the flags for
1562     @param is_set - if non-zero, set the flags, else clear them
1563     @param feature_bitmap - bits that are non-zero to set or clear
1564 */
1565 define bridge_flags
1566 {
1567   u32 client_index;
1568   u32 context;
1569   u32 bd_id;
1570   u8 is_set;
1571   u32 feature_bitmap;
1572 };
1573
1574 /** \brief Set bridge flags response
1575     @param context - sender context, to match reply w/ request
1576     @param retval - return code for the set bridge flags request
1577     @param resulting_feature_bitmap - the feature bitmap value after the request is implemented
1578 */
1579 define bridge_flags_reply
1580 {
1581   u32 context;
1582   i32 retval;
1583   u32 resulting_feature_bitmap;
1584 };
1585
1586 /** \brief Set bridge domain ip to mac entry request
1587     @param client_index - opaque cookie to identify the sender
1588     @param context - sender context, to match reply w/ request
1589     @param bd_id - the bridge domain to set the flags for
1590     @param is_add - if non-zero, add the entry, else clear it
1591     @param is_ipv6 - if non-zero, ipv6 address, else ipv4 address
1592     @param mac_address - MAC address
1593     @param 
1594 */
1595 define bd_ip_mac_add_del
1596 {
1597   u32 client_index;
1598   u32 context;
1599   u32 bd_id;
1600   u8 is_add;
1601   u8 is_ipv6;
1602   u8 ip_address[16];
1603   u8 mac_address[6];
1604 };
1605
1606 /** \brief Set bridge domain ip to mac entry response
1607     @param context - sender context, to match reply w/ request
1608     @param retval - return code for the set bridge flags request
1609 */
1610 define bd_ip_mac_add_del_reply
1611 {
1612   u32 context;
1613   i32 retval;
1614 };
1615
1616 /** \brief Add/Delete classification table request
1617     @param client_index - opaque cookie to identify the sender
1618     @param context - sender context, to match reply w/ request
1619     @param is_add- if non-zero add the table, else delete it
1620     @param table_index - if add, reuturns index of the created table, else specifies the table to delete  
1621     @param nbuckets - number of buckets when adding a table
1622     @param memory_size - memory size when adding a table
1623     @param match_n_vectors - number of match vectors
1624     @param next_table_index - index of next table
1625     @param miss_next_index - index of miss table
1626     @param mask[] - match mask
1627 */
1628 define classify_add_del_table
1629 {
1630   u32 client_index;
1631   u32 context;
1632   u8 is_add;
1633   u32 table_index;
1634   u32 nbuckets;
1635   u32 memory_size;
1636   u32 skip_n_vectors;
1637   u32 match_n_vectors;
1638   u32 next_table_index;
1639   u32 miss_next_index;
1640   u8 mask[0];
1641 };
1642
1643 /** \brief Add/Delete classification table response
1644     @param context - sender context, to match reply w/ request
1645     @param retval - return code for the table add/del requst
1646     @param new_table_index - for add, returned index of the new table
1647     @param skip_n_vectors - for add, returned value of skip_n_vectors in table
1648     @param match_n_vectors -for add, returned value of match_n_vectors in table
1649 */
1650 define classify_add_del_table_reply
1651 {
1652   u32 context;
1653   i32 retval;
1654   u32 new_table_index;
1655   u32 skip_n_vectors;
1656   u32 match_n_vectors;
1657 };
1658
1659 /** \brief Classify add / del session request
1660     @param client_index - opaque cookie to identify the sender
1661     @param context - sender context, to match reply w/ request
1662     @param is_add - add session if non-zero, else delete
1663     @param table_index - index of the table to add/del the session, required
1664     @param hit_next_index - for add, hit_next_index of new session, required
1665     @param opaque_index - for add, opaque_index of new session
1666     @param advance -for add, advance value for session
1667     @param match[] - for add, match value for session, required
1668 */
1669 define classify_add_del_session
1670 {
1671   u32 client_index;
1672   u32 context;
1673   u8 is_add;
1674   u32 table_index;
1675   u32 hit_next_index;
1676   u32 opaque_index;
1677   i32 advance;
1678   u8 match[0];
1679 };
1680
1681 /** \brief Classify add / del session response
1682     @param context - sender context, to match reply w/ request
1683     @param retval - return code for the add/del session request
1684 */
1685 define classify_add_del_session_reply
1686 {
1687   u32 context;
1688   i32 retval;
1689 };
1690
1691 /** \brief Set/unset the classification table for an interface request 
1692     @param client_index - opaque cookie to identify the sender
1693     @param context - sender context, to match reply w/ request
1694     @param is_ipv6 - ipv6 if non-zero, else ipv4
1695     @param sw_if_index - interface to associate with the table
1696     @param table_index - index of the table, if ~0 unset the table
1697 */
1698 define classify_set_interface_ip_table
1699 {
1700   u32 client_index;
1701   u32 context;
1702   u8 is_ipv6;
1703   u32 sw_if_index;
1704   u32 table_index;              /* ~0 => off */
1705 };
1706
1707 /** \brief Set/unset interface classification table response 
1708     @param context - sender context, to match reply w/ request
1709     @param retval - return code
1710 */
1711 define classify_set_interface_ip_table_reply
1712 {
1713   u32 context;
1714   i32 retval;
1715 };
1716
1717 /** \brief Set/unset l2 classification tables for an interface request
1718     @param client_index - opaque cookie to identify the sender
1719     @param context - sender context, to match reply w/ request
1720     @param sw_if_index - interface to set/unset tables for
1721     @param ip4_table_index - ip4 index, use ~0 for all 3 indexes to unset
1722     @param ip6_table_index - ip6 index
1723     @param other_table_index - other index
1724 */
1725 define classify_set_interface_l2_tables
1726 {
1727   u32 client_index;
1728   u32 context;
1729   u32 sw_if_index;
1730   /* 3 x ~0 => off */
1731   u32 ip4_table_index;
1732   u32 ip6_table_index;
1733   u32 other_table_index;
1734   u8 is_input;
1735 };
1736
1737 /** \brief Set/unset l2 classification tables for an interface response
1738     @param context - sender context, to match reply w/ request
1739     @param retval - return code for the request
1740 */
1741 define classify_set_interface_l2_tables_reply
1742 {
1743   u32 context;
1744   i32 retval;
1745 };
1746
1747 /** \brief Get node index using name request
1748     @param client_index - opaque cookie to identify the sender
1749     @param context - sender context, to match reply w/ request
1750     @param node_name[] - name of the node
1751 */
1752 define get_node_index
1753 {
1754   u32 client_index;
1755   u32 context;
1756   u8 node_name[64];
1757 };
1758
1759 /** \brief Get node index using name request
1760     @param context - sender context, to match reply w/ request
1761     @param retval - return code for the request
1762     @param node_index - index of the desired node if found, else ~0
1763 */
1764 define get_node_index_reply
1765 {
1766   u32 context;
1767   i32 retval;
1768   u32 node_index;
1769 };
1770
1771 /** \brief Set the next node for a given node request
1772     @param client_index - opaque cookie to identify the sender
1773     @param context - sender context, to match reply w/ request
1774     @param node_name[] - node to add the next node to
1775     @param next_name[] - node to add as the next node
1776 */
1777 define add_node_next
1778 {
1779   u32 client_index;
1780   u32 context;
1781   u8 node_name[64];
1782   u8 next_name[64];
1783 };
1784
1785 /** \brief IP Set the next node for a given node response
1786     @param context - sender context, to match reply w/ request
1787     @param retval - return code for the add next node request
1788     @param next_index - the index of the next node if success, else ~0
1789 */
1790 define add_node_next_reply
1791 {
1792   u32 context;
1793   i32 retval;
1794   u32 next_index;
1795 };
1796
1797 /** \brief DHCP Proxy config 2 add / del request
1798     @param client_index - opaque cookie to identify the sender
1799     @param context - sender context, to match reply w/ request
1800     @param rx_vrf_id - receive vrf id
1801     @param server_vrf_id - server vrf id
1802     @param if_ipv6 - ipv6 if non-zero, else ipv4
1803     @param is_add - add the config if non-zero, else delete
1804     @param insert_circuit_id - option82 suboption 1 fib number
1805     @param dhcp_server[] - server address
1806     @param dhcp_src_address[] - <fix this, need details>
1807 */
1808 define dhcp_proxy_config_2
1809 {
1810   u32 client_index;
1811   u32 context;
1812   u32 rx_vrf_id;
1813   u32 server_vrf_id;
1814   u8 is_ipv6;
1815   u8 is_add;
1816   u8 insert_circuit_id;
1817   u8 dhcp_server[16];
1818   u8 dhcp_src_address[16];
1819 };
1820
1821 /** \brief DHCP Proxy config 2 add / del response
1822     @param context - sender context, to match reply w/ request
1823     @param retval - return code for request
1824 */
1825 define dhcp_proxy_config_2_reply
1826 {
1827   u32 context;
1828   i32 retval;
1829 };
1830
1831 /** \brief l2tpv3 tunnel interface create request
1832     @param client_index - opaque cookie to identify the sender
1833     @param context - sender context, to match reply w/ request
1834     @param client_address - remote client tunnel ip address
1835     @param client_address - local tunnel ip address
1836     @param is_ipv6 - ipv6 if non-zero, else ipv4
1837     @param local_session_id - local tunnel session id
1838     @param remote_session_id - remote tunnel session id
1839     @param local_cookie - local tunnel cookie
1840     @param l2_sublayer_present - l2 sublayer is present in packets if non-zero
1841     @param encap_vrf_id - fib identifier used for outgoing encapsulated packets
1842 */
1843 define l2tpv3_create_tunnel
1844 {
1845   u32 client_index;
1846   u32 context;
1847   u8 client_address[16];
1848   u8 our_address[16];
1849   u8 is_ipv6;
1850   u32 local_session_id;
1851   u32 remote_session_id;
1852   u64 local_cookie;
1853   u64 remote_cookie;
1854   u8 l2_sublayer_present;
1855   u32 encap_vrf_id;
1856 };
1857
1858 /** \brief l2tpv3 tunnel interface create response
1859     @param context - sender context, to match reply w/ request
1860     @param retval - return code for the request
1861     @param sw_if_index - index of the new tunnel interface
1862 */
1863 define l2tpv3_create_tunnel_reply
1864 {
1865   u32 context;
1866   i32 retval;
1867   u32 sw_if_index;
1868 };
1869
1870 define l2tpv3_set_tunnel_cookies
1871 {
1872   u32 client_index;
1873   u32 context;
1874   u32 sw_if_index;
1875   u64 new_local_cookie;
1876   u64 new_remote_cookie;
1877 };
1878
1879 /** \brief L2TP tunnel set cookies response
1880     @param context - sender context, to match reply w/ request
1881     @param retval - return code for the request
1882 */
1883 define l2tpv3_set_tunnel_cookies_reply
1884 {
1885   u32 context;
1886   i32 retval;
1887 };
1888
1889 define sw_if_l2tpv3_tunnel_details
1890 {
1891   u32 context;
1892   u32 sw_if_index;
1893   u8 interface_name[64];
1894   u8 client_address[16];
1895   u8 our_address[16];
1896   u32 local_session_id;
1897   u32 remote_session_id;
1898   u64 local_cookie[2];
1899   u64 remote_cookie;
1900   u8 l2_sublayer_present;
1901 };
1902
1903 define sw_if_l2tpv3_tunnel_dump
1904 {
1905   u32 client_index;
1906   u32 context;
1907 };
1908
1909 /** \brief L2 fib clear table request, clear all mac entries in the l2 fib
1910     @param client_index - opaque cookie to identify the sender
1911     @param context - sender context, to match reply w/ request
1912 */
1913 define l2_fib_clear_table
1914 {
1915   u32 client_index;
1916   u32 context;
1917 };
1918
1919 /** \brief L2 fib clear table response
1920     @param context - sender context, to match reply w/ request
1921     @param retval - return code for the request
1922 */
1923 define l2_fib_clear_table_reply
1924 {
1925   u32 context;
1926   i32 retval;
1927 };
1928
1929 /** \brief L2 interface ethernet flow point filtering enable/disable request
1930     @param client_index - opaque cookie to identify the sender
1931     @param context - sender context, to match reply w/ request
1932     @param sw_if_index - interface to enable/disable filtering on
1933     @param enable_disable - if non-zero enable filtering, else disable
1934 */
1935 define l2_interface_efp_filter
1936 {
1937   u32 client_index;
1938   u32 context;
1939   u32 sw_if_index;
1940   u32 enable_disable;
1941 };
1942
1943 /** \brief L2 interface ethernet flow point filtering response
1944     @param context - sender context, to match reply w/ request
1945     @param retval - return code for the request
1946 */
1947 define l2_interface_efp_filter_reply
1948 {
1949   u32 context;
1950   i32 retval;
1951 };
1952
1953 define l2tpv3_interface_enable_disable
1954 {
1955   u32 client_index;
1956   u32 context;
1957   u8 enable_disable;
1958   u32 sw_if_index;
1959 };
1960
1961 define l2tpv3_interface_enable_disable_reply
1962 {
1963   u32 context;
1964   i32 retval;
1965 };
1966
1967 define l2tpv3_set_lookup_key
1968 {
1969   u32 client_index;
1970   u32 context;
1971   /* 0 = ip6 src_address, 1 = ip6 dst_address, 2 = session_id */
1972   u8 key;
1973 };
1974
1975 define l2tpv3_set_lookup_key_reply
1976 {
1977   u32 context;
1978   i32 retval;
1979 };
1980
1981 define vxlan_add_del_tunnel
1982 {
1983   u32 client_index;
1984   u32 context;
1985   u8 is_add;
1986   u8 is_ipv6;
1987   u8 src_address[16];
1988   u8 dst_address[16];
1989   u32 encap_vrf_id;
1990   u32 decap_next_index;
1991   u32 vni;
1992 };
1993
1994 define vxlan_add_del_tunnel_reply
1995 {
1996   u32 context;
1997   i32 retval;
1998   u32 sw_if_index;
1999 };
2000
2001 define vxlan_tunnel_dump
2002 {
2003   u32 client_index;
2004   u32 context;
2005   u32 sw_if_index;
2006 };
2007
2008 define vxlan_tunnel_details
2009 {
2010   u32 context;
2011   u32 sw_if_index;
2012   u8 src_address[16];
2013   u8 dst_address[16];
2014   u32 encap_vrf_id;
2015   u32 decap_next_index;
2016   u32 vni;
2017   u8 is_ipv6;
2018 };
2019
2020 define gre_add_del_tunnel
2021 {
2022   u32 client_index;
2023   u32 context;
2024   u8 is_add;
2025   u8 is_ipv6;
2026   u8 src_address[16];
2027   u8 dst_address[16];
2028   u32 outer_fib_id;
2029 };
2030
2031 define gre_add_del_tunnel_reply
2032 {
2033   u32 context;
2034   i32 retval;
2035   u32 sw_if_index;
2036 };
2037
2038 define gre_tunnel_dump
2039 {
2040   u32 client_index;
2041   u32 context;
2042   u32 sw_if_index;
2043 };
2044
2045 define gre_tunnel_details
2046 {
2047   u32 context;
2048   u32 sw_if_index;
2049   u8 is_ipv6;
2050   u8 src_address[16];
2051   u8 dst_address[16];
2052   u32 outer_fib_id;
2053 };
2054
2055 /** \brief L2 interface vlan tag rewrite configure request
2056     @param client_index - opaque cookie to identify the sender
2057     @param context - sender context, to match reply w/ request
2058     @param sw_if_index - interface the operation is applied to
2059     @param vtr_op - Choose from l2_vtr_op_t enum values
2060     @param push_dot1q - first pushed flag dot1q id set, else dot1ad
2061     @param tag1 - Needed for any push or translate vtr op
2062     @param tag2 - Needed for any push 2 or translate x-2 vtr ops
2063 */
2064 define l2_interface_vlan_tag_rewrite
2065 {
2066   u32 client_index;
2067   u32 context;
2068   u32 sw_if_index;
2069   u32 vtr_op;
2070   u32 push_dot1q;               // ethertype of first pushed tag is dot1q/dot1ad
2071   u32 tag1;                     // first pushed tag
2072   u32 tag2;                     // second pushed tag
2073 };
2074
2075 /** \brief L2 interface vlan tag rewrite response
2076     @param context - sender context, to match reply w/ request
2077     @param retval - return code for the request
2078 */
2079 define l2_interface_vlan_tag_rewrite_reply
2080 {
2081   u32 context;
2082   i32 retval;
2083 };
2084
2085 /** \brief vhost-user interface create request
2086     @param client_index - opaque cookie to identify the sender
2087     @param is_server - our side is socket server
2088     @param sock_filename - unix socket filename, used to speak with frontend
2089     @param use_custom_mac - enable or disable the use of the provided hardware address
2090     @param mac_address - hardware address to use if 'use_custom_mac' is set
2091 */
2092 define create_vhost_user_if
2093 {
2094   u32 client_index;
2095   u32 context;
2096   u8 is_server;
2097   u8 sock_filename[256];
2098   u8 renumber;
2099   u32 custom_dev_instance;
2100   u8 use_custom_mac;
2101   u8 mac_address[6];
2102 };
2103
2104 /** \brief vhost-user interface create response
2105     @param context - sender context, to match reply w/ request
2106     @param retval - return code for the request
2107     @param sw_if_index - interface the operation is applied to
2108 */
2109 define create_vhost_user_if_reply
2110 {
2111   u32 context;
2112   i32 retval;
2113   u32 sw_if_index;
2114 };
2115
2116 /** \brief vhost-user interface modify request
2117     @param client_index - opaque cookie to identify the sender
2118     @param is_server - our side is socket server
2119     @param sock_filename - unix socket filename, used to speak with frontend
2120 */
2121 define modify_vhost_user_if
2122 {
2123   u32 client_index;
2124   u32 context;
2125   u32 sw_if_index;
2126   u8 is_server;
2127   u8 sock_filename[256];
2128   u8 renumber;
2129   u32 custom_dev_instance;
2130 };
2131
2132 /** \brief vhost-user interface modify response
2133     @param context - sender context, to match reply w/ request
2134     @param retval - return code for the request
2135 */
2136 define modify_vhost_user_if_reply
2137 {
2138   u32 context;
2139   i32 retval;
2140 };
2141
2142 /** \brief vhost-user interface delete request
2143     @param client_index - opaque cookie to identify the sender
2144 */
2145 define delete_vhost_user_if
2146 {
2147   u32 client_index;
2148   u32 context;
2149   u32 sw_if_index;
2150 };
2151
2152 /** \brief vhost-user interface delete response
2153     @param context - sender context, to match reply w/ request
2154     @param retval - return code for the request
2155 */
2156 define delete_vhost_user_if_reply
2157 {
2158   u32 context;
2159   i32 retval;
2160 };
2161
2162 define create_subif
2163 {
2164   u32 client_index;
2165   u32 context;
2166   u32 sw_if_index;
2167   u32 sub_id;
2168
2169   /* These fields map directly onto the subif template */
2170   u8 no_tags;
2171   u8 one_tag;
2172   u8 two_tags;
2173   u8 dot1ad;                    // 0 = dot1q, 1=dot1ad
2174   u8 exact_match;
2175   u8 default_sub;
2176   u8 outer_vlan_id_any;
2177   u8 inner_vlan_id_any;
2178   u16 outer_vlan_id;
2179   u16 inner_vlan_id;
2180 };
2181
2182 define create_subif_reply
2183 {
2184   u32 context;
2185   i32 retval;
2186   u32 sw_if_index;
2187 };
2188
2189 /** \brief show version
2190     @param client_index - opaque cookie to identify the sender
2191     @param context - sender context, to match reply w/ request
2192 */
2193 define show_version
2194 {
2195   u32 client_index;
2196   u32 context;
2197 };
2198
2199 /** \brief show version response
2200     @param context - sender context, to match reply w/ request
2201     @param retval - return code for the request
2202     @param program - name of the program (vpe)
2203     @param version  - version of the program
2204     @param build_directory - root of the workspace where the program was built
2205 */
2206 define show_version_reply
2207 {
2208   u32 context;
2209   i32 retval;
2210   u8 program[32];
2211   u8 version[32];
2212   u8 build_date[32];
2213   u8 build_directory[256];
2214 };
2215
2216 /** \brief Vhost-user interface details structure (fix this)
2217     @param sw_if_index - index of the interface
2218     @param interface_name - name of interface
2219     @param virtio_net_hdr_sz - net header size
2220     @param features - interface features
2221     @param is_server - vhost-user server socket
2222     @param sock_filename - socket filename
2223     @param num_regions - number of used memory regions
2224 */
2225 define sw_interface_vhost_user_details
2226 {
2227   u32 context;
2228   u32 sw_if_index;
2229   u8 interface_name[64];
2230   u32 virtio_net_hdr_sz;
2231   u64 features;
2232   u8 is_server;
2233   u8 sock_filename[256];
2234   u32 num_regions;
2235   i32 sock_errno;
2236 };
2237
2238 /* works */
2239 define sw_interface_vhost_user_dump
2240 {
2241   u32 client_index;
2242   u32 context;
2243 };
2244
2245 define ip_address_details
2246 {
2247   u32 client_index;
2248   u32 context;
2249   u8 ip[16];
2250   u8 prefix_length;
2251 };
2252
2253 define ip_address_dump
2254 {
2255   u32 client_index;
2256   u32 context;
2257   u32 sw_if_index;
2258   u8 is_ipv6;
2259 };
2260
2261 define ip_details
2262 {
2263   u32 sw_if_index;
2264   u32 context;
2265 };
2266
2267 define ip_dump
2268 {
2269   u32 client_index;
2270   u32 context;
2271   u8 is_ipv6;
2272 };
2273
2274 /** \brief l2 fib table entry structure
2275     @param bd_id - the l2 fib / bridge domain table id
2276     @param mac - the entry's mac address
2277     @param sw_if_index - index of the interface
2278     @param static_mac - the entry is statically configured.
2279     @param filter_mac - the entry is a mac filter entry.
2280     @param bvi_mac - the mac address is a bridge virtual interface
2281 */
2282 define l2_fib_table_entry
2283 {
2284   u32 context;
2285   u32 bd_id;
2286   u64 mac;
2287   u32 sw_if_index;
2288   u8 static_mac;
2289   u8 filter_mac;
2290   u8 bvi_mac;
2291 };
2292
2293 /** \brief Dump l2 fib (aka bridge domain) table
2294     @param client_index - opaque cookie to identify the sender
2295     @param bd_id - the l2 fib / bridge domain table identifier
2296 */
2297 define l2_fib_table_dump
2298 {
2299   u32 client_index;
2300   u32 context;
2301   u32 bd_id;
2302 };
2303
2304 define vxlan_gpe_add_del_tunnel
2305 {
2306   u32 client_index;
2307   u32 context;
2308   u8 is_ipv6;
2309   u8 local[16];
2310   u8 remote[16];
2311   u32 encap_vrf_id;
2312   u32 decap_vrf_id;
2313   u8 protocol;
2314   u32 vni;
2315   u8 is_add;
2316 };
2317
2318 define vxlan_gpe_add_del_tunnel_reply
2319 {
2320   u32 context;
2321   i32 retval;
2322   u32 sw_if_index;
2323 };
2324
2325 define vxlan_gpe_tunnel_dump
2326 {
2327   u32 client_index;
2328   u32 context;
2329   u32 sw_if_index;
2330 };
2331
2332 define vxlan_gpe_tunnel_details
2333 {
2334   u32 context;
2335   u32 sw_if_index;
2336   u8 local[16];
2337   u8 remote[16];
2338   u32 vni;
2339   u8 protocol;
2340   u32 encap_vrf_id;
2341   u32 decap_vrf_id;
2342   u8 is_ipv6;
2343 };
2344
2345 /** \brief add or delete locator_set
2346     @param client_index - opaque cookie to identify the sender
2347     @param context - sender context, to match reply w/ request
2348     @param is_add - add address if non-zero, else delete
2349     @param locator_set_name - locator name
2350     @param locator_num - number of locators
2351     @param locators - Lisp locator data
2352 */
2353 define lisp_add_del_locator_set
2354 {
2355   u32 client_index;
2356   u32 context;
2357   u8 is_add;
2358   u8 locator_set_name[64];
2359   u32 locator_num;
2360   u8 locators[locator_num];
2361 };
2362
2363 /** \brief Reply for locator_set add/del
2364     @param context - returned sender context, to match reply w/ request
2365     @param retval - return code
2366     @param ls_index - locator set index
2367 */
2368 define lisp_add_del_locator_set_reply
2369 {
2370   u32 context;
2371   i32 retval;
2372   u32 ls_index;
2373 };
2374
2375 /** \brief add or delete locator for locator_set
2376     @param client_index - opaque cookie to identify the sender
2377     @param context - sender context, to match reply w/ request
2378     @param is_add - add address if non-zero, else delete
2379     @param locator_set_name - name of locator_set to add/del locator
2380     @param sw_if_index - index of the interface
2381     @param priority - priority of the lisp locator
2382     @param weight - weight of the lisp locator
2383 */
2384 define lisp_add_del_locator
2385 {
2386   u32 client_index;
2387   u32 context;
2388   u8 is_add;
2389   u8 locator_set_name[64];
2390   u32 sw_if_index;
2391   u8 priority;
2392   u8 weight;
2393 };
2394
2395 /** \brief Reply for locator add/del
2396     @param context - returned sender context, to match reply w/ request
2397     @param retval - return code
2398 */
2399 define lisp_add_del_locator_reply
2400 {
2401   u32 context;
2402   i32 retval;
2403 };
2404
2405 /** \brief add or delete lisp eid-table
2406     @param client_index - opaque cookie to identify the sender
2407     @param context - sender context, to match reply w/ request
2408     @param is_add - add address if non-zero, else delete
2409     @param eid_type:
2410       0 : ipv4
2411       1 : ipv6
2412       2 : mac
2413     @param eid - EID can be ip4, ip6 or mac
2414     @param prefix_len - prefix len
2415     @param locator_set_name - name of locator_set to add/del eid-table
2416     @param vni - virtual network instance
2417 */
2418 define lisp_add_del_local_eid
2419 {
2420   u32 client_index;
2421   u32 context;
2422   u8 is_add;
2423   u8 eid_type;
2424   u8 eid[16];
2425   u8 prefix_len;
2426   u8 locator_set_name[64];
2427   u32 vni;
2428 };
2429
2430 /** \brief Reply for local_eid add/del
2431     @param context - returned sender context, to match reply w/ request
2432     @param retval - return code
2433 */
2434 define lisp_add_del_local_eid_reply
2435 {
2436   u32 context;
2437   i32 retval;
2438 };
2439
2440 /** \brief add or delete lisp gpe tunnel
2441     @param client_index - opaque cookie to identify the sender
2442     @param context - sender context, to match reply w/ request
2443     @param is_add - add address if non-zero, else delete
2444     @param eid_type -
2445       0 : ipv4
2446       1 : ipv6
2447       2 : mac
2448     @param rmt_eid - remote eid
2449     @param lcl_eid - local eid
2450     @param rmt_len - remote prefix len
2451     @param lcl_len - local prefix len
2452     @param vni - virtual network identifier
2453     @param dp_table - vrf/bridge domain id
2454     @param loc_num - number of locators
2455     @param lcl_locs - array of local locators
2456     @param rmt_locs - array of remote locators
2457     @param action - negative action when 0 locators configured
2458 */
2459 define lisp_gpe_add_del_fwd_entry
2460 {
2461   u32 client_index;
2462   u32 context;
2463   u8 is_add;
2464   u8 eid_type;
2465   u8 rmt_eid[16];
2466   u8 lcl_eid[16];
2467   u8 rmt_len;
2468   u8 lcl_len;
2469   u32 vni;
2470   u32 dp_table;
2471   u32 loc_num;
2472   u8 lcl_locs[loc_num];
2473   u8 rmt_locs[loc_num];
2474   u8 action;
2475 };
2476
2477 /** \brief Reply for gpe_fwd_entry add/del
2478     @param context - returned sender context, to match reply w/ request
2479     @param retval - return code
2480 */
2481 define lisp_gpe_add_del_fwd_entry_reply
2482 {
2483   u32 context;
2484   i32 retval;
2485 };
2486
2487 /** \brief add or delete map-resolver
2488     @param client_index - opaque cookie to identify the sender
2489     @param context - sender context, to match reply w/ request
2490     @param is_add - add address if non-zero, else delete
2491     @param is_ipv6 - if non-zero the address is ipv6, else ipv4
2492     @param ip_address - array of address bytes
2493 */
2494 define lisp_add_del_map_resolver
2495 {
2496   u32 client_index;
2497   u32 context;
2498   u8 is_add;
2499   u8 is_ipv6;
2500   u8 ip_address[16];
2501 };
2502
2503 /** \brief Reply for map_resolver add/del
2504     @param context - returned sender context, to match reply w/ request
2505     @param retval - return code
2506 */
2507 define lisp_add_del_map_resolver_reply
2508 {
2509   u32 context;
2510   i32 retval;
2511 };
2512
2513 /** \brief enable or disable lisp-gpe protocol
2514     @param client_index - opaque cookie to identify the sender
2515     @param context - sender context, to match reply w/ request
2516     @param is_en - enable protocol if non-zero, else disable
2517 */
2518 define lisp_gpe_enable_disable
2519 {
2520   u32 client_index;
2521   u32 context;
2522   u8 is_en;
2523 };
2524
2525 /** \brief Reply for gpe enable/disable
2526     @param context - returned sender context, to match reply w/ request
2527     @param retval - return code
2528 */
2529 define lisp_gpe_enable_disable_reply
2530 {
2531   u32 context;
2532   i32 retval;
2533 };
2534
2535 /** \brief enable or disable LISP feature
2536     @param client_index - opaque cookie to identify the sender
2537     @param context - sender context, to match reply w/ request
2538     @param is_en - enable protocol if non-zero, else disable
2539 */
2540 define lisp_enable_disable
2541 {
2542   u32 client_index;
2543   u32 context;
2544   u8 is_en;
2545 };
2546
2547 /** \brief Reply for gpe enable/disable
2548     @param context - returned sender context, to match reply w/ request
2549     @param retval - return code
2550 */
2551 define lisp_enable_disable_reply
2552 {
2553   u32 context;
2554   i32 retval;
2555 };
2556
2557 /** \brief add or delete gpe_iface
2558     @param client_index - opaque cookie to identify the sender
2559     @param context - sender context, to match reply w/ request
2560     @param is_add - add address if non-zero, else delete
2561 */
2562 define lisp_gpe_add_del_iface
2563 {
2564   u32 client_index;
2565   u32 context;
2566   u8 is_add;
2567   u8 is_l2;
2568   u32 dp_table;
2569   u32 vni;
2570 };
2571
2572 /** \brief Reply for gpe_iface add/del
2573     @param context - returned sender context, to match reply w/ request
2574     @param retval - return code
2575 */
2576 define lisp_gpe_add_del_iface_reply
2577 {
2578   u32 context;
2579   i32 retval;
2580 };
2581
2582 /** \brief configure or disable LISP PITR node
2583     @param client_index - opaque cookie to identify the sender
2584     @param context - sender context, to match reply w/ request
2585     @param ls_name - locator set name
2586     @param is_add - add locator set if non-zero, else disable pitr
2587 */
2588 define lisp_pitr_set_locator_set
2589 {
2590   u32 client_index;
2591   u32 context;
2592   u8 is_add;
2593   u8 ls_name[64];
2594 };
2595
2596 /** \brief Reply for lisp_pitr_set_locator_set
2597     @param context - returned sender context, to match reply w/ request
2598     @param retval - return code
2599 */
2600 define lisp_pitr_set_locator_set_reply
2601 {
2602   u32 context;
2603   i32 retval;
2604 };
2605
2606 /** \brief add or delete remote static mapping
2607     @param client_index - opaque cookie to identify the sender
2608     @param context - sender context, to match reply w/ request
2609     @param is_add - add address if non-zero, else delete
2610     @param is_src_dst - flag indicating src/dst based routing policy
2611     @param del_all - if set, delete all remote mappings
2612     @param vni - virtual network instance
2613     @param action - negative map-reply action
2614     @param eid_type -
2615       0 : ipv4
2616       1 : ipv6
2617       2 : mac
2618     @param deid - dst EID
2619     @param seid - src EID, valid only if is_src_dst is enabled
2620     @param rloc_num - number of remote locators
2621     @param rlocs - remote locator data
2622 */
2623 define lisp_add_del_remote_mapping
2624 {
2625   u32 client_index;
2626   u32 context;
2627   u8 is_add;
2628   u8 is_src_dst;
2629   u8 del_all;
2630   u32 vni;
2631   u8 action;
2632   u8 eid_type;
2633   u8 eid[16];
2634   u8 eid_len;
2635   u8 seid[16];
2636   u8 seid_len;
2637   u32 rloc_num;
2638   u8 rlocs[rloc_num];
2639 };
2640
2641 /** \brief Reply for lisp_add_del_remote_mapping
2642     @param context - returned sender context, to match reply w/ request
2643     @param retval - return code
2644 */
2645 define lisp_add_del_remote_mapping_reply
2646 {
2647   u32 context;
2648   i32 retval;
2649 };
2650
2651 /** \brief add or delete LISP adjacency adjacency
2652     @param client_index - opaque cookie to identify the sender
2653     @param context - sender context, to match reply w/ request
2654     @param is_add - add address if non-zero, else delete
2655     @param vni - virtual network instance
2656     @param eid_type -
2657       0 : ipv4
2658       1 : ipv6
2659       2 : mac
2660     @param deid - destination EID
2661     @param seid - source EID
2662 */
2663 define lisp_add_del_adjacency
2664 {
2665   u32 client_index;
2666   u32 context;
2667   u8 is_add;
2668   u32 vni;
2669   u8 eid_type;
2670   u8 deid[16];
2671   u8 seid[16];
2672   u8 deid_len;
2673   u8 seid_len;
2674 };
2675
2676 /** \brief Reply for lisp_add_del_adjacency
2677     @param context - returned sender context, to match reply w/ request
2678     @param retval - return code
2679 */
2680 define lisp_add_del_adjacency_reply
2681 {
2682   u32 context;
2683   i32 retval;
2684 };
2685
2686 /** \brief add or delete map request itr rlocs
2687     @param client_index - opaque cookie to identify the sender
2688     @param context - sender context, to match reply w/ request
2689     @param is_add - add address if non-zero, else delete
2690     @param locator_set_name - locator set name
2691 */
2692 define lisp_add_del_map_request_itr_rlocs
2693 {
2694   u32 client_index;
2695   u32 context;
2696   u8 is_add;
2697   u8 locator_set_name[64];
2698 };
2699
2700 /** \brief Reply for lisp_add_del_map_request_itr_rlocs
2701     @param context - returned sender context, to match reply w/ request
2702     @param retval - return code
2703 */
2704
2705 define lisp_add_del_map_request_itr_rlocs_reply
2706 {
2707   u32 context;
2708   i32 retval;
2709 };
2710
2711 /** \brief map/unmap vni/bd_index to vrf
2712     @param client_index - opaque cookie to identify the sender
2713     @param context - sender context, to match reply w/ request
2714     @param is_add - add or delete mapping
2715     @param dp_table - virtual network id/bridge domain index
2716     @param vrf - vrf
2717 */
2718 define lisp_eid_table_add_del_map
2719 {
2720   u32 client_index;
2721   u32 context;
2722   u8 is_add;
2723   u32 vni;
2724   u32 dp_table;
2725   u8 is_l2;
2726 };
2727
2728 /** \brief Reply for lisp_eid_table_add_del_map
2729     @param context - returned sender context, to match reply w/ request
2730     @param retval - return code
2731 */
2732 define lisp_eid_table_add_del_map_reply
2733 {
2734   u32 context;
2735   i32 retval;
2736 };
2737
2738 /** \brief Request for map lisp locator status
2739     @param client_index - opaque cookie to identify the sender
2740     @param context - sender context, to match reply w/ request
2741     @param locator_set_index - index of locator_set
2742     @param filter - filter type;
2743       Support value:
2744         0: all locator
2745         1: local locator
2746         2: remote locator
2747  */
2748 define lisp_locator_dump
2749 {
2750   u32 client_index;
2751   u32 context;
2752   u32 locator_set_index;
2753   u8 filter;
2754 };
2755
2756 /** \brief LISP locator_set status
2757     @param local - if is set, then locator is local
2758     @param locator_set_name - name of the locator_set
2759     @param sw_if_index - sw_if_index of the locator
2760     @param priority - locator priority
2761     @param weight - locator weight
2762   */
2763 define lisp_locator_details
2764 {
2765   u32 context;
2766   u8 local;
2767   u32 sw_if_index;
2768   u8 is_ipv6;
2769   u8 ip_address[16];
2770   u8 priority;
2771   u8 weight;
2772 };
2773
2774 /** \brief LISP locator_set status
2775     @param locator_set_name - name of the locator_set
2776     @param local - if is set, then locator_set is local
2777     @param locator_count - number of locator this stats block includes
2778     @param locator - locator data
2779  */
2780 define lisp_locator_set_details
2781 {
2782   u32 context;
2783   u8 local;
2784   u32 locator_set_index;
2785   u8 locator_set_name[64];
2786 };
2787
2788 /** \brief Request for locator_set summary status
2789     @param client_index - opaque cookie to identify the sender
2790     @param context - sender context, to match reply w/ request
2791     @param filter - filter type;
2792       Support value:
2793         0: all locator_set
2794         1: local locator_set
2795         2: remote locator_set
2796  */
2797 define lisp_locator_set_dump
2798 {
2799   u32 client_index;
2800   u32 context;
2801   u8 filter;
2802 };
2803
2804 /** \brief Dump lisp eid-table
2805     @param client_index - opaque cookie to identify the sender
2806     @param context - sender context, to match reply w/ request
2807     @param locator_set_index - index of locator_set, if ~0 then the mapping
2808                                 is negative
2809     @param action - negative map request action
2810     @param is_local - local if non-zero, else remote
2811     @param eid_type:
2812       0 : ipv4
2813       1 : ipv6
2814       2 : mac
2815     @param eid - EID can be ip4, ip6 or mac
2816     @param prefix_len - prefix len
2817     @param vni - virtual network instance
2818     @param ttl - time to live
2819     @param authoritative - authoritative
2820 */
2821
2822 define lisp_eid_table_details
2823 {
2824   u32 context;
2825   u32 locator_set_index;
2826   u8 action;
2827   u8 is_local;
2828   u8 eid_type;
2829   u32 vni;
2830   u8 eid[16];
2831   u8 eid_prefix_len;
2832   u32 ttl;
2833   u8 authoritative;
2834 };
2835
2836 /** \brief Request for eid table summary status
2837     @param client_index - opaque cookie to identify the sender
2838     @param context - sender context, to match reply w/ request
2839     @param eid_set - if non-zero request info about specific mapping
2840     @param vni - virtual network instance; valid only if eid_set != 0
2841     @param prefix_length - prefix length if EID is IP address;
2842       valid only if eid_set != 0
2843     @param eid_type - EID type; valid only if eid_set != 0
2844       Supported values:
2845         0: EID is IPv4
2846         1: EID is IPv6
2847         2: EID is ethernet address
2848     @param eid - endpoint identifier
2849     @param filter - filter type;
2850       Support values:
2851         0: all eid
2852         1: local eid
2853         2: remote eid
2854  */
2855 define lisp_eid_table_dump
2856 {
2857   u32 client_index;
2858   u32 context;
2859   u8 eid_set;
2860   u8 prefix_length;
2861   u32 vni;
2862   u8 eid_type;
2863   u8 eid[16];
2864   u8 filter;
2865 };
2866
2867 /** \brief Shows relationship between vni and vrf/bd
2868     @param dp_table - VRF index or bridge domain index
2869     @param vni - vitual network instance
2870   */
2871 define lisp_eid_table_map_details
2872 {
2873   u32 context;
2874   u32 vni;
2875   u32 dp_table;
2876 };
2877
2878 /** \brief Request for lisp_eid_table_map_details
2879     @param client_index - opaque cookie to identify the sender
2880     @param context - sender context, to match reply w/ request
2881     @param is_l2 - if set dump vni/bd mappings else vni/vrf
2882  */
2883 define lisp_eid_table_map_dump
2884 {
2885   u32 client_index;
2886   u32 context;
2887   u8 is_l2;
2888 };
2889
2890 /** \brief Dumps all VNIs used in mappings
2891     @param client_index - opaque cookie to identify the sender
2892     @param context - sender context, to match reply w/ request
2893   */
2894 define lisp_eid_table_vni_dump
2895 {
2896   u32 client_index;
2897   u32 context;
2898 };
2899
2900 /** \brief reply to lisp_eid_table_vni_dump
2901     @param client_index - opaque cookie to identify the sender
2902     @param context - sender context, to match reply w/ request
2903     @param vni - virtual network instance
2904  */
2905 define lisp_eid_table_vni_details
2906 {
2907   u32 client_index;
2908   u32 context;
2909   u32 vni;
2910 };
2911
2912 define lisp_gpe_tunnel_details
2913 {
2914   u32 context;
2915   u32 tunnels;
2916   u8 is_ipv6;
2917   u8 source_ip[16];
2918   u8 destination_ip[16];
2919   u32 encap_fib_id;
2920   u32 decap_fib_id;
2921   u32 dcap_next;
2922   u8 lisp_ver;
2923   u8 next_protocol;
2924   u8 flags;
2925   u8 ver_res;
2926   u8 res;
2927   u32 iid;
2928 };
2929
2930 /** \brief Request for gpe tunnel summary status
2931     @param client_index - opaque cookie to identify the sender
2932     @param context - sender context, to match reply w/ request
2933  */
2934 define lisp_gpe_tunnel_dump
2935 {
2936   u32 client_index;
2937   u32 context;
2938 };
2939
2940 /** \brief LISP map resolver status
2941     @param locator_set_name - name of the locator_set
2942     @param is_ipv6 - if non-zero the address is ipv6, else ipv4
2943     @param ip_address - array of address bytes
2944  */
2945 define lisp_map_resolver_details
2946 {
2947   u32 context;
2948   u8 is_ipv6;
2949   u8 ip_address[16];
2950 };
2951
2952 /** \brief Request for map resolver summary status
2953     @param client_index - opaque cookie to identify the sender
2954     @param context - sender context, to match reply w/ request
2955  */
2956 define lisp_map_resolver_dump
2957 {
2958   u32 client_index;
2959   u32 context;
2960 };
2961
2962 /** \brief Request for lisp-gpe protocol status
2963     @param client_index - opaque cookie to identify the sender
2964     @param context - sender context, to match reply w/ request
2965 */
2966 define show_lisp_status
2967 {
2968   u32 client_index;
2969   u32 context;
2970 };
2971
2972 /** \brief Status of lisp, enable or disable
2973     @param context - sender context, to match reply w/ request
2974     @param feature_status - lisp enable if non-zero, else disable
2975     @param gpe_status - lisp enable if non-zero, else disable
2976 */
2977 define show_lisp_status_reply
2978 {
2979   u32 context;
2980   i32 retval;
2981   u8 feature_status;
2982   u8 gpe_status;
2983 };
2984
2985 /** \brief Get LISP map request itr rlocs status
2986     @param context - sender context, to match reply w/ request
2987     @param locator_set_name - name of the locator_set
2988  */
2989 define lisp_get_map_request_itr_rlocs
2990 {
2991   u32 client_index;
2992   u32 context;
2993 };
2994
2995 /** \brief Request for map request itr rlocs summary status
2996  */
2997 define lisp_get_map_request_itr_rlocs_reply
2998 {
2999   u32 context;
3000   i32 retval;
3001   u8 locator_set_name[64];
3002 };
3003
3004 /** \brief Request for lisp pitr status
3005     @param client_index - opaque cookie to identify the sender
3006     @param context - sender context, to match reply w/ request
3007 */
3008 define show_lisp_pitr
3009 {
3010   u32 client_index;
3011   u32 context;
3012 };
3013
3014 /** \brief Status of lisp pitr, enable or disable
3015     @param context - sender context, to match reply w/ request
3016     @param status - lisp pitr enable if non-zero, else disable
3017     @param locator_set_name -  name of the locator_set
3018 */
3019 define show_lisp_pitr_reply
3020 {
3021   u32 context;
3022   i32 retval;
3023   u8 status;
3024   u8 locator_set_name[64];
3025 };
3026
3027 /* Gross kludge, DGMS */
3028 define interface_name_renumber
3029 {
3030   u32 client_index;
3031   u32 context;
3032   u32 sw_if_index;
3033   u32 new_show_dev_instance;
3034 };
3035
3036 define interface_name_renumber_reply
3037 {
3038   u32 context;
3039   i32 retval;
3040 };
3041
3042 /** \brief Register for ip4 arp resolution events
3043     @param client_index - opaque cookie to identify the sender
3044     @param context - sender context, to match reply w/ request
3045     @param enable_disable - 1 => register for events, 0 => cancel registration
3046     @param pid - sender's pid
3047     @param address - the exact ip4 address of interest
3048 */
3049 define want_ip4_arp_events
3050 {
3051   u32 client_index;
3052   u32 context;
3053   u8 enable_disable;
3054   u32 pid;
3055   u32 address;
3056 };
3057
3058 /** \brief Reply for interface events registration
3059     @param context - returned sender context, to match reply w/ request
3060     @param retval - return code
3061 */
3062 define want_ip4_arp_events_reply
3063 {
3064   u32 context;
3065   i32 retval;
3066 };
3067
3068 /** \brief Tell client about an ip4 arp resolution event
3069     @param client_index - opaque cookie to identify the sender
3070     @param context - sender context, to match reply w/ request
3071     @param address - the exact ip4 address of interest
3072     @param pid - client pid registered to receive notification
3073     @param sw_if_index - interface which received ARP packet
3074     @param new_mac - the new mac address 
3075     @param mac_ip - 0: resolution event, 1: mac/ip binding in bd
3076 */
3077 define ip4_arp_event
3078 {
3079   u32 client_index;
3080   u32 context;
3081   u32 address;
3082   u32 pid;
3083   u32 sw_if_index;
3084   u8 new_mac[6];
3085   u8 mac_ip;
3086 };
3087
3088 /** \brief Register for ip6 nd resolution events
3089     @param client_index - opaque cookie to identify the sender
3090     @param context - sender context, to match reply w/ request
3091     @param enable_disable - 1 => register for events, 0 => cancel registration
3092     @param pid - sender's pid
3093     @param address - the exact ip6 address of interest
3094 */
3095 define want_ip6_nd_events
3096 {
3097   u32 client_index;
3098   u32 context;
3099   u8 enable_disable;
3100   u32 pid;
3101   u8 address[16];
3102 };
3103
3104 /** \brief Reply for ip6 nd resolution events registration
3105     @param context - returned sender context, to match reply w/ request
3106     @param retval - return code
3107 */
3108 define want_ip6_nd_events_reply
3109 {
3110   u32 context;
3111   i32 retval;
3112 };
3113
3114 /** \brief Tell client about an ip6 nd resolution or mac/ip event
3115     @param client_index - opaque cookie to identify the sender
3116     @param context - sender context, to match reply w/ request
3117     @param pid - client pid registered to receive notification
3118     @param sw_if_index - interface which received ARP packet
3119     @param address - the exact ip6 address of interest
3120     @param new_mac - the new mac address 
3121     @param mac_ip - 0: resolution event, 1: mac/ip binding in bd
3122 */
3123 define ip6_nd_event
3124 {
3125   u32 client_index;
3126   u32 context;
3127   u32 pid;
3128   u32 sw_if_index;
3129   u8 address[16];
3130   u8 new_mac[6];
3131   u8 mac_ip;
3132 };
3133     
3134 /** \brief L2 bridge domain add or delete request
3135     @param client_index - opaque cookie to identify the sender
3136     @param context - sender context, to match reply w/ request
3137     @param bd_id - the bridge domain to create
3138     @param flood - enable/disable bcast/mcast flooding in the bd
3139     @param uu_flood - enable/disable uknown unicast flood in the bd
3140     @param forward - enable/disable forwarding on all interfaces in the bd
3141     @param learn - enable/disable learning on all interfaces in the bd
3142     @param arp_term - enable/disable arp termination in the bd
3143     @param is_add - add or delete flag
3144 */
3145 define bridge_domain_add_del
3146 {
3147   u32 client_index;
3148   u32 context;
3149   u32 bd_id;
3150   u8 flood;
3151   u8 uu_flood;
3152   u8 forward;
3153   u8 learn;
3154   u8 arp_term;
3155   u8 is_add;
3156 };
3157
3158 /** \brief L2 bridge domain add or delete response
3159     @param context - sender context, to match reply w/ request
3160     @param retval - return code for the set bridge flags request
3161 */
3162 define bridge_domain_add_del_reply
3163 {
3164   u32 context;
3165   i32 retval;
3166 };
3167
3168 /** \brief L2 bridge domain request operational state details
3169     @param client_index - opaque cookie to identify the sender
3170     @param context - sender context, to match reply w/ request
3171     @param bd_id - the bridge domain id desired or ~0 to request all bds
3172 */
3173 define bridge_domain_dump
3174 {
3175   u32 client_index;
3176   u32 context;
3177   u32 bd_id;
3178 };
3179
3180 /** \brief L2 bridge domain operational state response
3181     @param bd_id - the bridge domain id
3182     @param flood - bcast/mcast flooding state on all interfaces in the bd
3183     @param uu_flood - uknown unicast flooding state on all interfaces in the bd
3184     @param forward - forwarding state on all interfaces in the bd
3185     @param learn - learning state on all interfaces in the bd
3186     @param arp_term - arp termination state on all interfaces in the bd
3187     @param n_sw_ifs - number of sw_if_index's in the domain
3188 */
3189 define bridge_domain_details
3190 {
3191   u32 context;
3192   u32 bd_id;
3193   u8 flood;
3194   u8 uu_flood;
3195   u8 forward;
3196   u8 learn;
3197   u8 arp_term;
3198   u32 bvi_sw_if_index;
3199   u32 n_sw_ifs;
3200 };
3201
3202 /** \brief L2 bridge domain sw interface operational state response
3203     @param bd_id - the bridge domain id
3204     @param sw_if_index - sw_if_index in the domain
3205     @param shg - split horizon group for the interface
3206 */
3207 define bridge_domain_sw_if_details
3208 {
3209   u32 context;
3210   u32 bd_id;
3211   u32 sw_if_index;
3212   u8 shg;
3213 };
3214
3215 /** \brief DHCP Client config add / del request
3216     @param client_index - opaque cookie to identify the sender
3217     @param context - sender context, to match reply w/ request
3218     @param sw_if_index - index of the interface for DHCP client
3219     @param hostname - hostname
3220     @param is_add - add the config if non-zero, else delete
3221     @param want_dhcp_event - DHCP event sent to the sender
3222            via dhcp_compl_event API message if non-zero
3223     @param pid - sender's pid
3224 */
3225 define dhcp_client_config
3226 {
3227   u32 client_index;
3228   u32 context;
3229   u32 sw_if_index;
3230   u8 hostname[64];
3231   u8 is_add;
3232   u8 want_dhcp_event;
3233   u32 pid;
3234 };
3235
3236 /** \brief DHCP Client config response
3237     @param context - sender context, to match reply w/ request
3238     @param retval - return code for the request
3239 */
3240 define dhcp_client_config_reply
3241 {
3242   u32 context;
3243   i32 retval;
3244 };
3245
3246 /** \brief Set/unset input ACL interface
3247     @param client_index - opaque cookie to identify the sender
3248     @param context - sender context, to match reply w/ request
3249     @param sw_if_index - interface to set/unset input ACL
3250     @param ip4_table_index - ip4 classify table index (~0 for skip)
3251     @param ip6_table_index - ip6 classify table index (~0 for skip)
3252     @param l2_table_index  -  l2 classify table index (~0 for skip)
3253     @param is_add - Set input ACL if non-zero, else unset
3254     Note: User is recommeneded to use just one valid table_index per call.
3255           (ip4_table_index, ip6_table_index, or l2_table_index)
3256 */
3257 define input_acl_set_interface
3258 {
3259   u32 client_index;
3260   u32 context;
3261   u32 sw_if_index;
3262   u32 ip4_table_index;
3263   u32 ip6_table_index;
3264   u32 l2_table_index;
3265   u8 is_add;
3266 };
3267
3268 /** \brief Set/unset input ACL interface response
3269     @param context - sender context, to match reply w/ request
3270     @param retval - return code for the request
3271 */
3272 define input_acl_set_interface_reply
3273 {
3274   u32 context;
3275   i32 retval;
3276 };
3277
3278 /** \brief IPsec: Add/delete Security Policy Database
3279     @param client_index - opaque cookie to identify the sender
3280     @param context - sender context, to match reply w/ request
3281     @param is_add - add SPD if non-zero, else delete
3282     @param spd_id - SPD instance id (control plane allocated)
3283 */
3284
3285 define ipsec_spd_add_del
3286 {
3287   u32 client_index;
3288   u32 context;
3289   u8 is_add;
3290   u32 spd_id;
3291 };
3292
3293 /** \brief Reply for IPsec: Add/delete Security Policy Database entry
3294     @param context - returned sender context, to match reply w/ request
3295     @param retval - return code
3296 */
3297
3298 define ipsec_spd_add_del_reply
3299 {
3300   u32 context;
3301   i32 retval;
3302 };
3303
3304 /** \brief IPsec: Add/delete SPD from interface
3305
3306     @param client_index - opaque cookie to identify the sender
3307     @param context - sender context, to match reply w/ request
3308     @param is_add - add security mode if non-zero, else delete
3309     @param sw_if_index - index of the interface
3310     @param spd_id - SPD instance id to use for lookups
3311 */
3312
3313
3314 define ipsec_interface_add_del_spd
3315 {
3316   u32 client_index;
3317   u32 context;
3318
3319   u8 is_add;
3320   u32 sw_if_index;
3321   u32 spd_id;
3322 };
3323
3324 /** \brief Reply for IPsec: Add/delete SPD from interface
3325     @param context - returned sender context, to match reply w/ request
3326     @param retval - return code
3327 */
3328
3329 define ipsec_interface_add_del_spd_reply
3330 {
3331   u32 context;
3332   i32 retval;
3333 };
3334
3335 /** \brief IPsec: Add/delete Security Policy Database entry
3336
3337     See RFC 4301, 4.4.1.1 on how to match packet to selectors
3338
3339     @param client_index - opaque cookie to identify the sender
3340     @param context - sender context, to match reply w/ request
3341     @param is_add - add SPD if non-zero, else delete
3342     @param spd_id - SPD instance id (control plane allocated)
3343     @param priority - priority of SPD entry (non-unique value).  Used to order SPD matching - higher priorities match before lower
3344     @param is_outbound - entry applies to outbound traffic if non-zero, otherwise applies to inbound traffic
3345     @param is_ipv6 - remote/local address are IPv6 if non-zero, else IPv4
3346     @param remote_address_start - start of remote address range to match
3347     @param remote_address_stop - end of remote address range to match
3348     @param local_address_start - start of local address range to match
3349     @param local_address_stop - end of local address range to match
3350     @param protocol - protocol type to match [0 means any]
3351     @param remote_port_start - start of remote port range to match ...
3352     @param remote_port_stop - end of remote port range to match [0 to 65535 means ANY, 65535 to 0 means OPAQUE]
3353     @param local_port_start - start of local port range to match ...
3354     @param local_port_stop - end of remote port range to match [0 to 65535 means ANY, 65535 to 0 means OPAQUE]
3355     @param policy - 0 = bypass (no IPsec processing), 1 = discard (discard packet with ICMP processing), 2 = resolve (send request to control plane for SA resolving, and discard without ICMP processing), 3 = protect (apply IPsec policy using following parameters)
3356     @param sa_id - SAD instance id (control plane allocated)
3357
3358 */
3359
3360 define ipsec_spd_add_del_entry
3361 {
3362   u32 client_index;
3363   u32 context;
3364   u8 is_add;
3365
3366   u32 spd_id;
3367   i32 priority;
3368   u8 is_outbound;
3369
3370   // Selector
3371   u8 is_ipv6;
3372   u8 is_ip_any;
3373   u8 remote_address_start[16];
3374   u8 remote_address_stop[16];
3375   u8 local_address_start[16];
3376   u8 local_address_stop[16];
3377
3378   u8 protocol;
3379
3380   u16 remote_port_start;
3381   u16 remote_port_stop;
3382   u16 local_port_start;
3383   u16 local_port_stop;
3384
3385   // Policy
3386   u8 policy;
3387   u32 sa_id;
3388 };
3389
3390 /** \brief Reply for IPsec: Add/delete Security Policy Database entry
3391     @param context - returned sender context, to match reply w/ request
3392     @param retval - return code
3393 */
3394
3395 define ipsec_spd_add_del_entry_reply
3396 {
3397   u32 context;
3398   i32 retval;
3399 };
3400
3401 /** \brief IPsec: Add/delete Security Association Database entry
3402     @param client_index - opaque cookie to identify the sender
3403     @param context - sender context, to match reply w/ request
3404     @param is_add - add SAD entry if non-zero, else delete
3405
3406     @param sad_id - sad id
3407
3408     @param spi - security parameter index
3409
3410     @param protocol - 0 = AH, 1 = ESP
3411
3412     @param crypto_algorithm - 0 = Null, 1 = AES-CBC-128, 2 = AES-CBC-192, 3 = AES-CBC-256, 4 = 3DES-CBC
3413     @param crypto_key_length - length of crypto_key in bytes
3414     @param crypto_key - crypto keying material
3415
3416     @param integrity_algorithm - 0 = None, 1 = MD5-96, 2 = SHA1-96, 3 = SHA-256, 4 = SHA-384, 5=SHA-512
3417     @param integrity_key_length - length of integrity_key in bytes
3418     @param integrity_key - integrity keying material
3419
3420     @param use_extended_sequence_number - use ESN when non-zero
3421
3422     @param is_tunnel - IPsec tunnel mode if non-zero, else transport mode
3423     @param is_tunnel_ipv6 - IPsec tunnel mode is IPv6 if non-zero, else IPv4 tunnel only valid if is_tunnel is non-zero
3424     @param tunnel_src_address - IPsec tunnel source address IPv6 if is_tunnel_ipv6 is non-zero, else IPv4. Only valid if is_tunnel is non-zero
3425     @param tunnel_dst_address - IPsec tunnel destination address IPv6 if is_tunnel_ipv6 is non-zero, else IPv4. Only valid if is_tunnel is non-zero
3426
3427     To be added:
3428      Anti-replay
3429      IPsec tunnel address copy mode (to support GDOI)
3430  */
3431
3432 define ipsec_sad_add_del_entry
3433 {
3434   u32 client_index;
3435   u32 context;
3436   u8 is_add;
3437
3438   u32 sad_id;
3439
3440   u32 spi;
3441
3442   u8 protocol;
3443
3444   u8 crypto_algorithm;
3445   u8 crypto_key_length;
3446   u8 crypto_key[128];
3447
3448   u8 integrity_algorithm;
3449   u8 integrity_key_length;
3450   u8 integrity_key[128];
3451
3452   u8 use_extended_sequence_number;
3453
3454   u8 is_tunnel;
3455   u8 is_tunnel_ipv6;
3456   u8 tunnel_src_address[16];
3457   u8 tunnel_dst_address[16];
3458 };
3459
3460 /** \brief Reply for IPsec: Add/delete Security Association Database entry
3461     @param context - returned sender context, to match reply w/ request
3462     @param retval - return code
3463 */
3464
3465 define ipsec_sad_add_del_entry_reply
3466 {
3467   u32 context;
3468   i32 retval;
3469 };
3470
3471 /** \brief IPsec: Update Security Association keys
3472     @param client_index - opaque cookie to identify the sender
3473     @param context - sender context, to match reply w/ request
3474
3475     @param sa_id - sa id
3476
3477     @param crypto_key_length - length of crypto_key in bytes
3478     @param crypto_key - crypto keying material
3479
3480     @param integrity_key_length - length of integrity_key in bytes
3481     @param integrity_key - integrity keying material
3482 */
3483
3484 define ipsec_sa_set_key
3485 {
3486   u32 client_index;
3487   u32 context;
3488
3489   u32 sa_id;
3490
3491   u8 crypto_key_length;
3492   u8 crypto_key[128];
3493
3494   u8 integrity_key_length;
3495   u8 integrity_key[128];
3496 };
3497
3498 /** \brief Reply for IPsec: Update Security Association keys
3499     @param context - returned sender context, to match reply w/ request
3500     @param retval - return code
3501 */
3502
3503 define ipsec_sa_set_key_reply
3504 {
3505   u32 context;
3506   i32 retval;
3507 };
3508
3509 /** \brief IKEv2: Add/delete profile
3510     @param client_index - opaque cookie to identify the sender
3511     @param context - sender context, to match reply w/ request
3512
3513     @param name - IKEv2 profile name
3514     @param is_add - Add IKEv2 profile if non-zero, else delete
3515 */
3516 define ikev2_profile_add_del
3517 {
3518   u32 client_index;
3519   u32 context;
3520
3521   u8 name[64];
3522   u8 is_add;
3523 };
3524
3525 /** \brief Reply for IKEv2: Add/delete profile
3526     @param context - returned sender context, to match reply w/ request
3527     @param retval - return code
3528 */
3529 define ikev2_profile_add_del_reply
3530 {
3531   u32 context;
3532   i32 retval;
3533 };
3534
3535 /** \brief IKEv2: Set IKEv2 profile authentication method
3536     @param client_index - opaque cookie to identify the sender
3537     @param context - sender context, to match reply w/ request
3538
3539     @param name - IKEv2 profile name
3540     @param auth_method - IKEv2 authentication method (shared-key-mic/rsa-sig)
3541     @param is_hex - Authentication data in hex format if non-zero, else string
3542     @param data_len - Authentication data length
3543     @param data - Authentication data (for rsa-sig cert file path)
3544 */
3545 define ikev2_profile_set_auth
3546 {
3547   u32 client_index;
3548   u32 context;
3549
3550   u8 name[64];
3551   u8 auth_method;
3552   u8 is_hex;
3553   u32 data_len;
3554   u8 data[0];
3555 };
3556
3557 /** \brief Reply for IKEv2: Set IKEv2 profile authentication method
3558     @param context - returned sender context, to match reply w/ request
3559     @param retval - return code
3560 */
3561 define ikev2_profile_set_auth_reply
3562 {
3563   u32 context;
3564   i32 retval;
3565 };
3566
3567 /** \brief IKEv2: Set IKEv2 profile local/remote identification
3568     @param client_index - opaque cookie to identify the sender
3569     @param context - sender context, to match reply w/ request
3570
3571     @param name - IKEv2 profile name
3572     @param is_local - Identification is local if non-zero, else remote
3573     @param id_type - Identification type
3574     @param data_len - Identification data length
3575     @param data - Identification data
3576 */
3577 define ikev2_profile_set_id
3578 {
3579   u32 client_index;
3580   u32 context;
3581
3582   u8 name[64];
3583   u8 is_local;
3584   u8 id_type;
3585   u32 data_len;
3586   u8 data[0];
3587 };
3588
3589 /** \brief Reply for IKEv2:
3590     @param context - returned sender context, to match reply w/ request
3591     @param retval - return code
3592 */
3593 define ikev2_profile_set_id_reply
3594 {
3595   u32 context;
3596   i32 retval;
3597 };
3598
3599 /** \brief IKEv2: Set IKEv2 profile traffic selector parameters
3600     @param client_index - opaque cookie to identify the sender
3601     @param context - sender context, to match reply w/ request
3602
3603     @param name - IKEv2 profile name
3604     @param is_local - Traffic selector is local if non-zero, else remote
3605     @param proto - Traffic selector IP protocol (if zero not relevant)
3606     @param start_port - The smallest port number allowed by traffic selector
3607     @param end_port - The largest port number allowed by traffic selector
3608     @param start_addr - The smallest address included in traffic selector
3609     @param end_addr - The largest address included in traffic selector
3610 */
3611 define ikev2_profile_set_ts
3612 {
3613   u32 client_index;
3614   u32 context;
3615
3616   u8 name[64];
3617   u8 is_local;
3618   u8 proto;
3619   u16 start_port;
3620   u16 end_port;
3621   u32 start_addr;
3622   u32 end_addr;
3623 };
3624
3625 /** \brief Reply for IKEv2: Set IKEv2 profile traffic selector parameters
3626     @param context - returned sender context, to match reply w/ request
3627     @param retval - return code
3628 */
3629 define ikev2_profile_set_ts_reply
3630 {
3631   u32 context;
3632   i32 retval;
3633 };
3634
3635 /** \brief IKEv2: Set IKEv2 local RSA private key
3636     @param client_index - opaque cookie to identify the sender
3637     @param context - sender context, to match reply w/ request
3638
3639     @param key_file - Key file absolute path
3640 */
3641 define ikev2_set_local_key
3642 {
3643   u32 client_index;
3644   u32 context;
3645
3646   u8 key_file[256];
3647 };
3648
3649 /** \brief Reply for IKEv2: Set IKEv2 local key
3650     @param context - returned sender context, to match reply w/ request
3651     @param retval - return code
3652 */
3653 define ikev2_set_local_key_reply
3654 {
3655   u32 context;
3656   i32 retval;
3657 };
3658
3659 /** \brief Tell client about a DHCP completion event
3660     @param client_index - opaque cookie to identify the sender
3661     @param pid - client pid registered to receive notification
3662     @param is_ipv6 - if non-zero the address is ipv6, else ipv4
3663     @param host_address - Host IP address
3664     @param router_address - Router IP address
3665     @param host_mac - Host MAC address
3666 */
3667 define dhcp_compl_event
3668 {
3669   u32 client_index;
3670   u32 pid;
3671   u8 hostname[64];
3672   u8 is_ipv6;
3673   u8 host_address[16];
3674   u8 router_address[16];
3675   u8 host_mac[6];
3676 };
3677
3678 /** \brief Add MAP domains
3679     @param client_index - opaque cookie to identify the sender
3680     @param context - sender context, to match reply w/ request
3681     @param ip6_prefix - Rule IPv6 prefix
3682     @param ip4_prefix - Rule IPv4 prefix
3683     @param ip6_src - MAP domain IPv6 BR address / Tunnel source
3684     @param ip6_prefix_len - Rule IPv6 prefix length
3685     @param ip4_prefix_len - Rule IPv4 prefix length
3686     @param ea_bits_len - Embedded Address bits length
3687     @param psid_offset - Port Set Identifider (PSID) offset
3688     @param psid_length - PSID length
3689     @param is_translation - MAP-E / MAP-T
3690     @param mtu - MTU
3691 */
3692 define map_add_domain
3693 {
3694   u32 client_index;
3695   u32 context;
3696   u8 ip6_prefix[16];
3697   u8 ip4_prefix[4];
3698   u8 ip6_src[16];
3699   u8 ip6_prefix_len;
3700   u8 ip4_prefix_len;
3701   u8 ip6_src_prefix_len;
3702   u8 ea_bits_len;
3703   u8 psid_offset;
3704   u8 psid_length;
3705   u8 is_translation;
3706   u16 mtu;
3707 };
3708
3709 /** \brief Reply for MAP domain add
3710     @param context - returned sender context, to match reply w/ request
3711     @param index - MAP domain index
3712     @param retval - return code
3713 */
3714 define map_add_domain_reply
3715 {
3716   u32 context;
3717   u32 index;
3718   i32 retval;
3719 };
3720
3721 /** \brief Delete MAP domain
3722     @param client_index - opaque cookie to identify the sender
3723     @param context - sender context, to match reply w/ request
3724     @param index - MAP Domain index
3725 */
3726 define map_del_domain
3727 {
3728   u32 client_index;
3729   u32 context;
3730   u32 index;
3731 };
3732
3733 /** \brief Reply for MAP domain del
3734     @param context - returned sender context, to match reply w/ request
3735     @param retval - return code
3736 */
3737 define map_del_domain_reply
3738 {
3739   u32 context;
3740   i32 retval;
3741 };
3742
3743 /** \brief Add or Delete MAP rule from a domain (Only used for shared IPv4 per subscriber)
3744     @param client_index - opaque cookie to identify the sender
3745     @param context - sender context, to match reply w/ request
3746     @param index - MAP Domain index
3747     @param is_add - If 1 add rule, if 0 delete rule
3748     @param ip6_dst - MAP CE IPv6 address
3749     @param psid - Rule PSID
3750 */
3751 define map_add_del_rule
3752 {
3753   u32 client_index;
3754   u32 context;
3755   u32 index;
3756   u32 is_add;
3757   u8 ip6_dst[16];
3758   u16 psid;
3759 };
3760
3761 /** \brief Reply for MAP rule add/del
3762     @param context - returned sender context, to match reply w/ request
3763     @param retval - return code
3764 */
3765 define map_add_del_rule_reply
3766 {
3767   u32 context;
3768   i32 retval;
3769 };
3770
3771 /** \brief Get list of map domains
3772     @param client_index - opaque cookie to identify the sender
3773 */
3774 define map_domain_dump
3775 {
3776   u32 client_index;
3777   u32 context;
3778 };
3779
3780 define map_domain_details
3781 {
3782   u32 context;
3783   u32 domain_index;
3784   u8 ip6_prefix[16];
3785   u8 ip4_prefix[4];
3786   u8 ip6_src[16];
3787   u8 ip6_prefix_len;
3788   u8 ip4_prefix_len;
3789   u8 ip6_src_len;
3790   u8 ea_bits_len;
3791   u8 psid_offset;
3792   u8 psid_length;
3793   u8 flags;
3794   u16 mtu;
3795   u8 is_translation;
3796 };
3797
3798 define map_rule_dump
3799 {
3800   u32 client_index;
3801   u32 context;
3802   u32 domain_index;
3803 };
3804
3805 define map_rule_details
3806 {
3807   u32 context;
3808   u8 ip6_dst[16];
3809   u16 psid;
3810 };
3811
3812 /** \brief Request for a single block of summary stats
3813     @param client_index - opaque cookie to identify the sender
3814     @param context - sender context, to match reply w/ request
3815 */
3816 define map_summary_stats
3817 {
3818   u32 client_index;
3819   u32 context;
3820 };
3821
3822 /** \brief Reply for map_summary_stats request
3823     @param context - sender context, to match reply w/ request
3824     @param retval - return code for request
3825     @param total_bindings -  
3826     @param total_pkts -  
3827     @param total_ip4_fragments -
3828     @param total_security_check - 
3829 */
3830 define map_summary_stats_reply
3831 {
3832   u32 context;
3833   i32 retval;
3834   u64 total_bindings;
3835   u64 total_pkts[2];
3836   u64 total_bytes[2];
3837   u64 total_ip4_fragments;
3838   u64 total_security_check[2];
3839 };
3840
3841 /** \brief cop: enable/disable junk filtration features on an interface
3842     @param client_index - opaque cookie to identify the sender
3843     @param context - sender context, to match reply w/ request
3844     @param sw_if_inded - desired interface
3845     @param enable_disable - 1 => enable, 0 => disable
3846 */
3847
3848 define cop_interface_enable_disable
3849 {
3850   u32 client_index;
3851   u32 context;
3852   u32 sw_if_index;
3853   u8 enable_disable;
3854 };
3855
3856 /** \brief cop: interface enable/disable junk filtration reply
3857     @param context - returned sender context, to match reply w/ request
3858     @param retval - return code
3859 */
3860
3861 define cop_interface_enable_disable_reply
3862 {
3863   u32 context;
3864   i32 retval;
3865 };
3866
3867 /** \brief cop: enable/disable whitelist filtration features on an interface
3868     Note: the supplied fib_id must match in order to remove the feature!
3869     
3870     @param client_index - opaque cookie to identify the sender
3871     @param context - sender context, to match reply w/ request
3872     @param sw_if_index - interface handle, physical interfaces only
3873     @param fib_id - fib identifier for the whitelist / blacklist fib
3874     @param ip4 - 1 => enable ip4 filtration, 0=> disable ip4 filtration
3875     @param ip6 - 1 => enable ip6 filtration, 0=> disable ip6 filtration
3876     @param default_cop -  1 => enable non-ip4, non-ip6 filtration 0=> disable it
3877 */
3878
3879 define cop_whitelist_enable_disable
3880 {
3881   u32 client_index;
3882   u32 context;
3883   u32 sw_if_index;
3884   u32 fib_id;
3885   u8 ip4;
3886   u8 ip6;
3887   u8 default_cop;
3888 };
3889
3890 /** \brief cop: interface enable/disable junk filtration reply
3891     @param context - returned sender context, to match reply w/ request
3892     @param retval - return code
3893 */
3894
3895 define cop_whitelist_enable_disable_reply
3896 {
3897   u32 context;
3898   i32 retval;
3899 };
3900
3901 /** \brief get_node_graph - get a copy of the vpp node graph
3902     including the current set of graph arcs.
3903
3904     @param client_index - opaque cookie to identify the sender
3905     @param context - sender context, to match reply w/ request
3906 */
3907
3908 define get_node_graph
3909 {
3910   u32 client_index;
3911   u32 context;
3912 };
3913
3914 /** \brief get_node_graph_reply
3915     @param context - returned sender context, to match reply w/ request
3916     @param retval - return code
3917     @param reply_in_shmem - result from vlib_node_serialize, in shared
3918     memory. Process with vlib_node_unserialize, remember to switch
3919     heaps and free the result.
3920 */
3921
3922 define get_node_graph_reply
3923 {
3924   u32 context;
3925   i32 retval;
3926   u64 reply_in_shmem;
3927 };
3928
3929 /** \brief Clear interface statistics
3930     @param client_index - opaque cookie to identify the sender
3931     @param context - sender context, to match reply w/ request
3932     @param sw_if_index - index of the interface to clear statistics
3933 */
3934 define sw_interface_clear_stats
3935 {
3936   u32 client_index;
3937   u32 context;
3938   u32 sw_if_index;
3939 };
3940
3941 /** \brief Reply to sw_interface_clear_stats 
3942     @param context - sender context which was passed in the request
3943     @param retval - return code of the set flags request
3944 */
3945 define sw_interface_clear_stats_reply
3946 {
3947   u32 context;
3948   i32 retval;
3949 };
3950
3951 /** \brief IOAM Trace : Set TRACE profile
3952     @param id - profile id
3953     @param trace_type - Trace type
3954     @param trace_num_elt - Number of nodes in trace path
3955     @param trace_ppc - Trace PPC (none/encap/decap)
3956     @param trace_tsp - Trace timestamp precision (0-sec,1-ms,2-us,3-ns)
3957     @param trace_app_data - Trace application data, can be any 4 bytes
3958     @param pow_enable - Proof of Work enabled or not flag
3959     @param node_id - Id of this node
3960 */
3961 define trace_profile_add
3962 {
3963   u32 client_index;
3964   u32 context;
3965   u16 id;
3966   u8 trace_type;
3967   u8 trace_num_elt;
3968   u8 trace_ppc;
3969   u8 trace_tsp;
3970   u32 trace_app_data;
3971   u8 pow_enable;
3972   u32 node_id;
3973 };
3974
3975 /** \brief Trace profile add / del response
3976     @param context - sender context, to match reply w/ request
3977     @param retval - return value for request
3978 */
3979 define trace_profile_add_reply
3980 {
3981   u32 context;
3982   i32 retval;
3983 };
3984
3985 /** \brief IOAM Trace enable trace profile for a flow
3986     @param id - id of the trace profile to be applied
3987     @param dest_ipv6 - Destination IPv6 address
3988     @param prefix_length - prefix mask
3989     @param vrf_id - VRF ID
3990     @param trace_op - Trace operation (add/mod/del)
3991     @param enable - apply/remove the trace profile for the flow
3992 */
3993 define trace_profile_apply
3994 {
3995   u32 client_index;
3996   u32 context;
3997   u16 id;
3998   u8 dest_ipv6[16];
3999   u32 prefix_length;
4000   u32 vrf_id;
4001   u8 trace_op;
4002   u8 enable;
4003 };
4004
4005 /** \brief Trace profile apply response
4006     @param context - sender context, to match reply w/ request   
4007     @param retval - return value for request
4008 */
4009 define trace_profile_apply_reply
4010 {
4011   u32 context;
4012   i32 retval;
4013 };
4014
4015 /** \brief Delete Trace Profile 
4016     @param client_index - opaque cookie to identify the sender
4017     @param context - sender context, to match reply w/ request
4018     @param index - MAP Domain index
4019 */
4020 define trace_profile_del
4021 {
4022   u32 client_index;
4023   u32 context;
4024   u16 id;
4025 };
4026
4027 /** \brief Trace profile add / del response
4028     @param context - sender context, to match reply w/ request
4029     @param retval - return value for request
4030 */
4031 define trace_profile_del_reply
4032 {
4033   u32 context;
4034   i32 retval;
4035 };
4036
4037 /** \brief Create host-interface
4038     @param client_index - opaque cookie to identify the sender
4039     @param context - sender context, to match reply w/ request
4040     @param host_if_name - interface name
4041     @param hw_addr - interface MAC
4042     @param use_random_hw_addr - use random generated MAC
4043 */
4044 define af_packet_create
4045 {
4046   u32 client_index;
4047   u32 context;
4048
4049   u8 host_if_name[64];
4050   u8 hw_addr[6];
4051   u8 use_random_hw_addr;
4052 };
4053
4054 /** \brief Create host-interface response
4055     @param context - sender context, to match reply w/ request
4056     @param retval - return value for request
4057 */
4058 define af_packet_create_reply
4059 {
4060   u32 context;
4061   i32 retval;
4062   u32 sw_if_index;
4063 };
4064
4065 /** \brief Delete host-interface
4066     @param client_index - opaque cookie to identify the sender
4067     @param context - sender context, to match reply w/ request
4068     @param host_if_name - interface name
4069 */
4070 define af_packet_delete
4071 {
4072   u32 client_index;
4073   u32 context;
4074
4075   u8 host_if_name[64];
4076 };
4077
4078 /** \brief Delete host-interface response
4079     @param context - sender context, to match reply w/ request
4080     @param retval - return value for request
4081 */
4082 define af_packet_delete_reply
4083 {
4084   u32 context;
4085   i32 retval;
4086 };
4087
4088 /** \brief Add/del policer
4089     @param client_index - opaque cookie to identify the sender
4090     @param context - sender context, to match reply w/ request
4091     @param is_add - add policer if non-zero, else delete
4092     @param name - policer name
4093     @param cir - CIR
4094     @param eir - EIR
4095     @param cb - Committed Burst
4096     @param eb - Excess or Peak Burst
4097     @param rate_type - rate type
4098     @param round_type - rounding type
4099     @param type - policer algorithm
4100     @param color_aware - 0=color-blind, 1=color-aware
4101     @param conform_action_type - conform action type
4102     @param conform_dscp - DSCP for conform mar-and-transmit action
4103     @param exceed_action_type - exceed action type
4104     @param exceed_dscp - DSCP for exceed mar-and-transmit action
4105     @param violate_action_type - violate action type
4106     @param violate_dscp - DSCP for violate mar-and-transmit action
4107 */
4108 define policer_add_del
4109 {
4110   u32 client_index;
4111   u32 context;
4112
4113   u8 is_add;
4114   u8 name[64];
4115   u32 cir;
4116   u32 eir;
4117   u64 cb;
4118   u64 eb;
4119   u8 rate_type;
4120   u8 round_type;
4121   u8 type;
4122   u8 color_aware;
4123   u8 conform_action_type;
4124   u8 conform_dscp;
4125   u8 exceed_action_type;
4126   u8 exceed_dscp;
4127   u8 violate_action_type;
4128   u8 violate_dscp;
4129 };
4130
4131 /** \brief Add/del policer response
4132     @param context - sender context, to match reply w/ request
4133     @param retval - return value for request
4134     @param policer_index - for add, returned index of the new policer
4135 */
4136 define policer_add_del_reply
4137 {
4138   u32 context;
4139   i32 retval;
4140   u32 policer_index;
4141 };
4142
4143 /** \brief Get list of policers
4144     @param client_index - opaque cookie to identify the sender
4145     @param context - sender context, to match reply w/ request
4146     @param match_name_valid - if 0 request all policers otherwise use match_name
4147     @param match_name - policer name
4148 */
4149 define policer_dump
4150 {
4151   u32 client_index;
4152   u32 context;
4153
4154   u8 match_name_valid;
4155   u8 match_name[64];
4156 };
4157
4158 /** \brief Policer operational state response.
4159     @param context - sender context, to match reply w/ request
4160     @param name - policer name
4161     @param cir - CIR
4162     @param eir - EIR
4163     @param cb - Committed Burst
4164     @param eb - Excess or Peak Burst
4165     @param rate_type - rate type
4166     @param round_type - rounding type
4167     @param type - policer algorithm
4168     @param conform_action_type - conform action type
4169     @param conform_dscp - DSCP for conform mar-and-transmit action
4170     @param exceed_action_type - exceed action type
4171     @param exceed_dscp - DSCP for exceed mar-and-transmit action
4172     @param violate_action_type - violate action type
4173     @param violate_dscp - DSCP for violate mar-and-transmit action
4174     @param single_rate - 1 = single rate policer, 0 = two rate policer
4175     @param color_aware - for hierarchical policing
4176     @param scale - power-of-2 shift amount for lower rates
4177     @param cir_tokens_per_period - number of tokens for each period
4178     @param pir_tokens_per_period - number of tokens for each period for 2-rate policer
4179     @param current_limit - current limit
4180     @param current_bucket - current bucket
4181     @param extended_limit - extended limit
4182     @param extended_bucket - extended bucket
4183     @param last_update_time - last update time
4184 */
4185 define policer_details
4186 {
4187   u32 context;
4188
4189   u8 name[64];
4190   u32 cir;
4191   u32 eir;
4192   u64 cb;
4193   u64 eb;
4194   u8 rate_type;
4195   u8 round_type;
4196   u8 type;
4197   u8 conform_action_type;
4198   u8 conform_dscp;
4199   u8 exceed_action_type;
4200   u8 exceed_dscp;
4201   u8 violate_action_type;
4202   u8 violate_dscp;
4203   u8 single_rate;
4204   u8 color_aware;
4205   u32 scale;
4206   u32 cir_tokens_per_period;
4207   u32 pir_tokens_per_period;
4208   u32 current_limit;
4209   u32 current_bucket;
4210   u32 extended_limit;
4211   u32 extended_bucket;
4212   u64 last_update_time;
4213 };
4214
4215 /** \brief Set/unset policer classify interface
4216     @param client_index - opaque cookie to identify the sender
4217     @param context - sender context, to match reply w/ request
4218     @param sw_if_index - interface to set/unset policer classify
4219     @param ip4_table_index - ip4 classify table index (~0 for skip)
4220     @param ip6_table_index - ip6 classify table index (~0 for skip)
4221     @param l2_table_index  -  l2 classify table index (~0 for skip)
4222     @param is_add - Set if non-zero, else unset
4223     Note: User is recommeneded to use just one valid table_index per call.
4224           (ip4_table_index, ip6_table_index, or l2_table_index)
4225 */
4226 define policer_classify_set_interface
4227 {
4228   u32 client_index;
4229   u32 context;
4230   u32 sw_if_index;
4231   u32 ip4_table_index;
4232   u32 ip6_table_index;
4233   u32 l2_table_index;
4234   u8 is_add;
4235 };
4236
4237 /** \brief Set/unset policer classify interface response
4238     @param context - sender context, to match reply w/ request
4239     @param retval - return value for request
4240 */
4241 define policer_classify_set_interface_reply
4242 {
4243   u32 context;
4244   i32 retval;
4245 };
4246
4247 /** \brief Get list of policer classify interfaces and tables
4248     @param client_index - opaque cookie to identify the sender
4249     @param context - sender context, to match reply w/ request
4250     @param type - classify table type
4251 */
4252 define policer_classify_dump
4253 {
4254   u32 client_index;
4255   u32 context;
4256   u8 type;
4257 };
4258
4259 /** \brief Policer iclassify operational state response.
4260     @param context - sender context, to match reply w/ request
4261     @param sw_if_index - software interface index
4262     @param table_index - classify table index
4263 */
4264 define policer_classify_details
4265 {
4266   u32 context;
4267   u32 sw_if_index;
4268   u32 table_index;
4269 };
4270
4271 /** \brief Create netmap
4272     @param client_index - opaque cookie to identify the sender
4273     @param context - sender context, to match reply w/ request
4274     @param netmap_if_name - interface name
4275     @param hw_addr - interface MAC
4276     @param use_random_hw_addr - use random generated MAC
4277     @param is_pipe - is pipe
4278     @param is_master - 0=slave, 1=master
4279 */
4280 define netmap_create
4281 {
4282   u32 client_index;
4283   u32 context;
4284
4285   u8 netmap_if_name[64];
4286   u8 hw_addr[6];
4287   u8 use_random_hw_addr;
4288   u8 is_pipe;
4289   u8 is_master;
4290 };
4291
4292 /** \brief Create netmap response
4293     @param context - sender context, to match reply w/ request
4294     @param retval - return value for request
4295 */
4296 define netmap_create_reply
4297 {
4298   u32 context;
4299   i32 retval;
4300 };
4301
4302 /** \brief Delete netmap
4303     @param client_index - opaque cookie to identify the sender
4304     @param context - sender context, to match reply w/ request
4305     @param netmap_if_name - interface name
4306 */
4307 define netmap_delete
4308 {
4309   u32 client_index;
4310   u32 context;
4311
4312   u8 netmap_if_name[64];
4313 };
4314
4315 /** \brief Delete netmap response
4316     @param context - sender context, to match reply w/ request
4317     @param retval - return value for request
4318 */
4319 define netmap_delete_reply
4320 {
4321   u32 context;
4322   i32 retval;
4323 };
4324
4325 /** \brief Dump mpls gre tunnel table
4326     @param client_index - opaque cookie to identify the sender
4327     @param tunnel_index - gre tunnel identifier or -1 in case of all tunnels
4328 */
4329 define mpls_gre_tunnel_dump
4330 {
4331   u32 client_index;
4332   u32 context;
4333   i32 tunnel_index;
4334 };
4335
4336 /** \brief mpls gre tunnel operational state response
4337     @param tunnel_index - gre tunnel identifier
4338     @param intfc_address - interface ipv4 addr
4339     @param mask_width - interface ipv4 addr mask
4340     @param hw_if_index - interface id
4341     @param l2_only -
4342     @param tunnel_src - tunnel source ipv4 addr
4343     @param tunnel_dst - tunnel destination ipv4 addr
4344     @param outer_fib_index - gre tunnel identifier
4345     @param encap_index - reference to mpls label table
4346     @param nlabels - number of resolved labels
4347     @param labels - resolved labels
4348 */
4349 define mpls_gre_tunnel_details
4350 {
4351   u32 context;
4352   u32 tunnel_index;
4353
4354   u32 intfc_address;
4355   u32 inner_fib_index;
4356   u32 mask_width;
4357   u32 encap_index;
4358   u32 hw_if_index;
4359   u8 l2_only;
4360   u32 tunnel_src;
4361   u32 tunnel_dst;
4362   u32 outer_fib_index;
4363   u32 nlabels;
4364   u32 labels[nlabels];
4365 };
4366
4367 /** \brief Dump mpls eth tunnel table
4368     @param client_index - opaque cookie to identify the sender
4369     @param tunnel_index - eth tunnel identifier or -1 in case of all tunnels
4370 */
4371 define mpls_eth_tunnel_dump
4372 {
4373   u32 client_index;
4374   u32 context;
4375   i32 tunnel_index;
4376 };
4377
4378 /** \brief mpls eth tunnel operational state response
4379     @param tunnel_index - eth tunnel identifier
4380     @param intfc_address - interface ipv4 addr
4381     @param mask_width - interface ipv4 addr mask
4382     @param hw_if_index - interface id
4383     @param l2_only -
4384     @param tunnel_dst_mac -
4385     @param tx_sw_if_index -
4386     @param encap_index - reference to mpls label table
4387     @param nlabels - number of resolved labels
4388     @param labels - resolved labels
4389 */
4390 define mpls_eth_tunnel_details
4391 {
4392   u32 context;
4393   u32 tunnel_index;
4394
4395   u32 intfc_address;
4396   u32 inner_fib_index;
4397   u32 mask_width;
4398   u32 encap_index;
4399   u32 hw_if_index;
4400   u8 l2_only;
4401   u8 tunnel_dst_mac[6];
4402   u32 tx_sw_if_index;
4403   u32 nlabels;
4404   u32 labels[nlabels];
4405 };
4406
4407 /** \brief Dump mpls fib table
4408     @param client_index - opaque cookie to identify the sender
4409     @param fib_index    - mpls fib entry identifier or -1 in case of all entries
4410 */
4411 define mpls_fib_encap_dump
4412 {
4413   u32 client_index;
4414   u32 context;
4415 };
4416
4417 /** \brief mpls fib encap table response
4418     @param fib_index - fib table id
4419     @param dest - destination ipv4 addr
4420     @param s_bit -
4421     @param entry_index - reference to mpls label table
4422     @param nlabels - number of resolved labels
4423     @param labels - resolved labels
4424 */
4425 define mpls_fib_encap_details
4426 {
4427   u32 context;
4428
4429   u32 fib_index;
4430   u32 entry_index;
4431   u32 dest;
4432   u32 s_bit;
4433   u32 nlabels;
4434   u32 labels[nlabels];
4435 };
4436
4437 /** \brief Dump mpls fib decap table
4438     @param client_index - opaque cookie to identify the sender
4439     @param fib_index    - mpls fib entry identifier or -1 in case of all entries
4440 */
4441 define mpls_fib_decap_dump
4442 {
4443   u32 client_index;
4444   u32 context;
4445 };
4446
4447 /** \brief mpls fib decap table response
4448     @param fib_index - fib table id
4449     @param entry_index - reference to mpls label table
4450     @param dest - destination ipv4 addr
4451     @param s_bit -
4452     @param label - mpls labels
4453     @param rx_table_id - rx fib id
4454     @param tx_table_id - tx fib id
4455     @param swif_tag -
4456 */
4457 define mpls_fib_decap_details
4458 {
4459   u32 context;
4460
4461   u32 fib_index;
4462   u32 entry_index;
4463   u32 dest;
4464   u32 s_bit;
4465   u32 label;
4466   u32 rx_table_id;
4467   u32 tx_table_id;
4468   u8 swif_tag[8];
4469 };
4470
4471 /** \brief Classify get table IDs request
4472     @param client_index - opaque cookie to identify the sender
4473     @param context - sender context, to match reply w/ request
4474 */
4475 define classify_table_ids
4476 {
4477   u32 client_index;
4478   u32 context;
4479 };
4480
4481 /** \brief Reply for classify get table IDs request
4482     @param context - sender context which was passed in the request
4483     @param count - number of ids returned in response
4484     @param ids - array of classify table ids
4485 */
4486 define classify_table_ids_reply
4487 {
4488   u32 context;
4489   i32 retval;
4490   u32 count;
4491   u32 ids[count];
4492 };
4493
4494 /** \brief Classify table ids by interface index request
4495     @param client_index - opaque cookie to identify the sender
4496     @param context - sender context, to match reply w/ request
4497     @param sw_if_index - index of the interface
4498 */
4499 define classify_table_by_interface
4500 {
4501   u32 client_index;
4502   u32 context;
4503   u32 sw_if_index;
4504 };
4505
4506 /** \brief Reply for classify table id by interface index request
4507     @param context - sender context which was passed in the request
4508     @param count - number of ids returned in response
4509     @param sw_if_index - index of the interface
4510     @param l2_table_id - l2 classify table index
4511     @param ip4_table_id - ip4 classify table index
4512     @param ip6_table_id - ip6 classify table index
4513 */
4514 define classify_table_by_interface_reply
4515 {
4516   u32 context;
4517   i32 retval;
4518   u32 sw_if_index;
4519   u32 l2_table_id;
4520   u32 ip4_table_id;
4521   u32 ip6_table_id;
4522 };
4523
4524 /** \brief Classify table info
4525     @param client_index - opaque cookie to identify the sender
4526     @param context - sender context, to match reply w/ request
4527     @param table_id - classify table index
4528 */
4529 define classify_table_info
4530 {
4531   u32 client_index;
4532   u32 context;
4533   u32 table_id;
4534 };
4535
4536 /** \brief Reply for classify table info request
4537     @param context - sender context which was passed in the request
4538     @param count - number of ids returned in response
4539     @param table_id - classify table index
4540     @param nbuckets - number of buckets when adding a table
4541     @param match_n_vectors - number of match vectors
4542     @param skip_n_vectors - number of skip_n_vectors
4543     @param active_sessions - number of sessions (active entries)
4544     @param next_table_index - index of next table
4545     @param miss_next_index - index of miss table
4546     @param mask[] - match mask
4547 */
4548 define classify_table_info_reply
4549 {
4550   u32 context;
4551   i32 retval;
4552   u32 table_id;
4553   u32 nbuckets;
4554   u32 match_n_vectors;
4555   u32 skip_n_vectors;
4556   u32 active_sessions;
4557   u32 next_table_index;
4558   u32 miss_next_index;
4559   u32 mask_length;
4560   u8 mask[mask_length];
4561 };
4562
4563 /** \brief Classify sessions dump request
4564     @param client_index - opaque cookie to identify the sender
4565     @param context - sender context, to match reply w/ request
4566     @param table_id - classify table index
4567 */
4568 define classify_session_dump
4569 {
4570   u32 client_index;
4571   u32 context;
4572   u32 table_id;
4573 };
4574
4575 /** \brief Reply for classify table session dump request
4576     @param context - sender context which was passed in the request
4577     @param count - number of ids returned in response
4578     @param table_id - classify table index
4579     @param hit_next_index - hit_next_index of session
4580     @param opaque_index - for add, opaque_index of session
4581     @param advance - advance value of session
4582     @param match[] - match value for session
4583 */
4584 define classify_session_details
4585 {
4586   u32 context;
4587   i32 retval;
4588   u32 table_id;
4589   u32 hit_next_index;
4590   i32 advance;
4591   u32 opaque_index;
4592   u32 match_length;
4593   u8 match[match_length];
4594 };
4595
4596 /** \brief Enable and configure IPFIX exporter process request
4597     @param client_index - opaque cookie to identify the sender
4598     @param context - sender context, to match reply w/ request
4599     @param collector_address - address of IPFIX collector
4600     @param collector_port - port of IPFIX IPFIX collector
4601     @param src_address - address of IPFIX exporter
4602     @param vrf_id - VRF / fib table ID
4603     @param path_mtu - Path MTU between exporter and collector
4604     @param template_interval - number of seconds after which to resend template
4605 */
4606 define ipfix_enable
4607 {
4608   u32 client_index;
4609   u32 context;
4610   u8 collector_address[16];
4611   u16 collector_port;
4612   u8 src_address[16];
4613   u32 vrf_id;
4614   u32 path_mtu;
4615   u32 template_interval;
4616 };
4617
4618 /** \brief Reply to IPFIX enable and configure request
4619     @param context - sender context which was passed in the request
4620 */
4621 define ipfix_enable_reply
4622 {
4623   u32 context;
4624   i32 retval;
4625 };
4626
4627 /** \brief IPFIX dump request
4628     @param client_index - opaque cookie to identify the sender
4629     @param context - sender context, to match reply w/ request
4630 */
4631 define ipfix_dump
4632 {
4633   u32 client_index;
4634   u32 context;
4635 };
4636
4637 /** \brief Reply to IPFIX dump request
4638     @param context - sender context which was passed in the request
4639     @param collector_address - address of IPFIX collector
4640     @param collector_port - port of IPFIX IPFIX collector
4641     @param src_address - address of IPFIX exporter
4642     @param fib_index - fib table index
4643     @param path_mtu - Path MTU between exporter and collector
4644     @param template_interval - number of seconds after which to resend template
4645 */
4646 define ipfix_details
4647 {
4648   u32 context;
4649   u8 collector_address[16];
4650   u16 collector_port;
4651   u8 src_address[16];
4652   u32 fib_index;
4653   u32 path_mtu;
4654   u32 template_interval;
4655 };
4656
4657 /** \brief Query relative index via node names
4658     @param client_index - opaque cookie to identify the sender
4659     @param context - sender context, to match reply w/ request
4660     @param node_name - name of node to find relative index from
4661     @param next_name - next node from node_name to find relative index of
4662 */
4663 define get_next_index
4664 {
4665   u32 client_index;
4666   u32 context;
4667   u8 node_name[64];
4668   u8 next_name[64];
4669 };
4670
4671 /** \brief Reply for get next node index
4672     @param context - sender context which was passed in the request
4673     @param retval - return value
4674     @param next_index - index of the next_node
4675 */
4676 define get_next_index_reply
4677 {
4678   u32 context;
4679   i32 retval;
4680   u32 next_index;
4681 };
4682
4683 /** \brief PacketGenerator create interface request
4684     @param client_index - opaque cookie to identify the sender
4685     @param context - sender context, to match reply w/ request
4686     @param interface_id - interface index
4687 */
4688 define pg_create_interface
4689 {
4690   u32 client_index;
4691   u32 context;
4692   u32 interface_id;
4693 };
4694
4695 /** \brief PacketGenerator create interface response
4696     @param context - sender context, to match reply w/ request
4697     @param retval - return value for request
4698 */
4699 define pg_create_interface_reply
4700 {
4701   u32 context;
4702   i32 retval;
4703   u32 sw_if_index;
4704 };
4705
4706 /** \brief PacketGenerator capture packets on given interface request
4707     @param client_index - opaque cookie to identify the sender
4708     @param context - sender context, to match reply w/ request
4709     @param interface_id - pg interface index
4710     @param is_enabled - 1 if enabling streams, 0 if disabling
4711     @param count - number of packets to be captured
4712     @param pcap_file - pacp file name to store captured packets
4713 */
4714 define pg_capture
4715 {
4716   u32 client_index;
4717   u32 context;
4718   u32 interface_id;
4719   u8 is_enabled;
4720   u32 count;
4721   u32 pcap_name_length;
4722   u8 pcap_file_name[pcap_name_length];
4723 };
4724
4725 /** \brief PacketGenerator capture packets response
4726     @param context - sender context, to match reply w/ request
4727     @param retval - return value for request
4728 */
4729 define pg_capture_reply
4730 {
4731   u32 context;
4732   i32 retval;
4733 };
4734
4735 /** \brief Enable / disable packet generator request
4736     @param client_index - opaque cookie to identify the sender
4737     @param context - sender context, to match reply w/ request
4738     @param is_enabled - 1 if enabling streams, 0 if disabling
4739     @param stream - stream name to be enable/disabled, if not specified handle all streams
4740 */
4741 define pg_enable_disable
4742 {
4743   u32 client_index;
4744   u32 context;
4745   u8 is_enabled;
4746   u32 stream_name_length;
4747   u8 stream_name[stream_name_length];
4748 };
4749
4750 /** \brief Reply for enable / disable packet generator
4751     @param context - returned sender context, to match reply w/ request
4752     @param retval - return code
4753 */
4754 define pg_enable_disable_reply
4755 {
4756   u32 context;
4757   i32 retval;
4758 };
4759
4760 /** \brief Configure IP source and L4 port-range check
4761     @param client_index - opaque cookie to identify the sender
4762     @param context - sender context, to match reply w/ request
4763     @param is_ip6 - 1 if source address type is IPv6
4764     @param is_add - 1 if add, 0 if delete
4765     @param mask_length - mask length for address entry
4766     @param address - array of address bytes
4767     @param number_of_ranges - length of low_port and high_port arrays (must match)
4768     @param low_ports[32] - up to 32 low end of port range entries (must have corresponding high_ports entry)
4769     @param high_ports[32] - up to 32 high end of port range entries (must have corresponding low_ports entry)
4770     @param vrf_id - fib table/vrf id to associate the source and port-range check with
4771     @note To specify a single port set low_port and high_port entry the same
4772 */
4773 define ip_source_and_port_range_check_add_del
4774 {
4775   u32 client_index;
4776   u32 context;
4777   u8 is_ipv6;
4778   u8 is_add;
4779   u8 mask_length;
4780   u8 address[16];
4781   u8 number_of_ranges;
4782   u16 low_ports[32];
4783   u16 high_ports[32];
4784   u32 vrf_id;
4785 };
4786
4787 /** \brief Configure IP source and L4 port-range check reply
4788     @param context - returned sender context, to match reply w/ request
4789     @param retval - return code
4790 */
4791 define ip_source_and_port_range_check_add_del_reply
4792 {
4793   u32 context;
4794   i32 retval;
4795 };
4796
4797 /** \brief Set interface source and L4 port-range request
4798     @param client_index - opaque cookie to identify the sender
4799     @param context - sender context, to match reply w/ request
4800     @param interface_id - interface index
4801     @param tcp_vrf_id - VRF associated with source and TCP port-range check
4802     @param udp_vrf_id - VRF associated with source and TCP port-range check
4803 */
4804 define ip_source_and_port_range_check_interface_add_del
4805 {
4806   u32 client_index;
4807   u32 context;
4808   u8 is_add;
4809   u32 sw_if_index;
4810   u32 tcp_in_vrf_id;
4811   u32 tcp_out_vrf_id;
4812   u32 udp_in_vrf_id;
4813   u32 udp_out_vrf_id;
4814 };
4815
4816 /** \brief Set interface source and L4 port-range response
4817     @param context - sender context, to match reply w/ request
4818     @param retval - return value for request
4819 */
4820 define ip_source_and_port_range_check_interface_add_del_reply
4821 {
4822   u32 context;
4823   i32 retval;
4824 };
4825
4826 /** \brief Add / del ipsec gre tunnel request
4827     @param client_index - opaque cookie to identify the sender
4828     @param context - sender context, to match reply w/ request
4829     @param local_sa_id - local SA id
4830     @param remote_sa_id - remote SA id
4831     @param is_add - 1 if adding the tunnel, 0 if deleting
4832     @param src_address - tunnel source address
4833     @param dst_address - tunnel destination address
4834 */
4835 define ipsec_gre_add_del_tunnel {
4836     u32 client_index;
4837     u32 context;
4838     u32 local_sa_id;
4839     u32 remote_sa_id;
4840     u8 is_add;
4841     u8 src_address[4];
4842     u8 dst_address[4];
4843 };
4844
4845 /** \brief Reply for add / del ipsec gre tunnel request
4846     @param context - returned sender context, to match reply w/ request
4847     @param retval - return code
4848     @param sw_if_index - software index of the new ipsec gre tunnel
4849 */
4850 define ipsec_gre_add_del_tunnel_reply {
4851     u32 context;
4852     i32 retval;
4853     u32 sw_if_index;
4854 };
4855
4856 /** \brief Dump ipsec gre tunnel table
4857     @param client_index - opaque cookie to identify the sender
4858     @param context - sender context, to match reply w/ request
4859     @param tunnel_index - gre tunnel identifier or -1 in case of all tunnels
4860 */
4861 define ipsec_gre_tunnel_dump {
4862     u32 client_index;
4863     u32 context;
4864     u32 sw_if_index;
4865 };
4866
4867 /** \brief mpls gre tunnel operational state response
4868     @param context - returned sender context, to match reply w/ request
4869     @param sw_if_index - software index of the ipsec gre tunnel
4870     @param local_sa_id - local SA id
4871     @param remote_sa_id - remote SA id
4872     @param src_address - tunnel source address
4873     @param dst_address - tunnel destination address
4874 */
4875 define ipsec_gre_tunnel_details {
4876     u32 context;
4877     u32 sw_if_index;
4878     u32 local_sa_id;
4879     u32 remote_sa_id;
4880     u8 src_address[4];
4881     u8 dst_address[4];
4882 };
4883
4884 /** \brief Delete sub interface request
4885     @param client_index - opaque cookie to identify the sender
4886     @param context - sender context, to match reply w/ request
4887     @param sw_if_index - sw index of the interface that was created by create_subif
4888 */
4889 define delete_subif {
4890   u32 client_index;
4891   u32 context;
4892   u32 sw_if_index;
4893 };
4894
4895 /** \brief Delete sub interface response
4896     @param context - sender context, to match reply w/ request
4897     @param retval - return code for the request
4898 */
4899 define delete_subif_reply {
4900   u32 context;
4901   i32 retval;
4902 };