Add vxlan-bypass feature to IP4 forwarding path
[vpp.git] / vpp / vpp-api / custom_dump.c
1 /*
2  *------------------------------------------------------------------
3  * custom_dump.c - pretty-print API messages for replay
4  *
5  * Copyright (c) 2014-2016 Cisco and/or its affiliates.
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at:
9  *
10  *     http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *------------------------------------------------------------------
18  */
19
20 #include <vnet/vnet.h>
21 #include <vnet/ip/ip.h>
22 #include <vnet/unix/tuntap.h>
23 #include <vnet/mpls/mpls.h>
24 #include <vnet/dhcp/proxy.h>
25 #include <vnet/dhcpv6/proxy.h>
26 #include <vnet/l2tp/l2tp.h>
27 #include <vnet/l2/l2_input.h>
28 #include <vnet/sr/sr_packet.h>
29 #include <vnet/vxlan-gpe/vxlan_gpe.h>
30 #include <vnet/classify/policer_classify.h>
31 #include <vnet/policer/xlate.h>
32 #include <vnet/policer/policer.h>
33 #include <vnet/classify/flow_classify.h>
34 #include <vlib/vlib.h>
35 #include <vlib/unix/unix.h>
36 #include <vlibapi/api.h>
37 #include <vlibmemory/api.h>
38
39 #include <stats/stats.h>
40 #include <oam/oam.h>
41
42 #include <vnet/ethernet/ethernet.h>
43 #include <vnet/l2/l2_vtr.h>
44
45 #include <vpp-api/vpe_msg_enum.h>
46
47 #define vl_typedefs             /* define message structures */
48 #include <vpp-api/vpe_all_api_h.h>
49 #undef vl_typedefs
50
51 #define vl_endianfun            /* define message structures */
52 #include <vpp-api/vpe_all_api_h.h>
53 #undef vl_endianfun
54
55 #define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__)
56
57 #define FINISH                                  \
58     vec_add1 (s, 0);                            \
59     vl_print (handle, (char *)s);               \
60     vec_free (s);                               \
61     return handle;
62
63
64 static void *vl_api_create_loopback_t_print
65   (vl_api_create_loopback_t * mp, void *handle)
66 {
67   u8 *s;
68
69   s = format (0, "SCRIPT: create_loopback ");
70   s = format (s, "mac %U ", format_ethernet_address, &mp->mac_address);
71
72   FINISH;
73 }
74
75 static void *vl_api_delete_loopback_t_print
76   (vl_api_delete_loopback_t * mp, void *handle)
77 {
78   u8 *s;
79
80   s = format (0, "SCRIPT: delete_loopback ");
81   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
82
83   FINISH;
84 }
85
86 static void *vl_api_sw_interface_set_flags_t_print
87   (vl_api_sw_interface_set_flags_t * mp, void *handle)
88 {
89   u8 *s;
90   s = format (0, "SCRIPT: sw_interface_set_flags ");
91
92   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
93
94   if (mp->admin_up_down)
95     s = format (s, "admin-up ");
96   else
97     s = format (s, "admin-down ");
98
99   if (mp->link_up_down)
100     s = format (s, "link-up");
101   else
102     s = format (s, "link-down");
103
104   FINISH;
105 }
106
107 static void *vl_api_sw_interface_add_del_address_t_print
108   (vl_api_sw_interface_add_del_address_t * mp, void *handle)
109 {
110   u8 *s;
111
112   s = format (0, "SCRIPT: sw_interface_add_del_address ");
113
114   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
115
116   if (mp->is_ipv6)
117     s = format (s, "%U/%d ", format_ip6_address,
118                 (ip6_address_t *) mp->address, mp->address_length);
119   else
120     s = format (s, "%U/%d ", format_ip4_address,
121                 (ip4_address_t *) mp->address, mp->address_length);
122
123   if (mp->is_add == 0)
124     s = format (s, "del ");
125   if (mp->del_all)
126     s = format (s, "del-all ");
127
128   FINISH;
129 }
130
131 static void *vl_api_sw_interface_set_table_t_print
132   (vl_api_sw_interface_set_table_t * mp, void *handle)
133 {
134   u8 *s;
135
136   s = format (0, "SCRIPT: sw_interface_set_table ");
137
138   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
139
140   if (mp->vrf_id)
141     s = format (s, "vrf %d ", ntohl (mp->vrf_id));
142
143   if (mp->is_ipv6)
144     s = format (s, "ipv6 ");
145
146   FINISH;
147 }
148
149 static void *vl_api_sw_interface_set_mpls_enable_t_print
150   (vl_api_sw_interface_set_mpls_enable_t * mp, void *handle)
151 {
152   u8 *s;
153
154   s = format (0, "SCRIPT: sw_interface_set_mpls_enable ");
155
156   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
157
158   if (mp->enable == 0)
159     s = format (s, "disable");
160
161   FINISH;
162 }
163
164 static void *vl_api_sw_interface_set_vpath_t_print
165   (vl_api_sw_interface_set_vpath_t * mp, void *handle)
166 {
167   u8 *s;
168
169   s = format (0, "SCRIPT: sw_interface_set_vpath ");
170
171   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
172
173   if (mp->enable)
174     s = format (s, "enable ");
175   else
176     s = format (s, "disable ");
177
178   FINISH;
179 }
180
181 static void *vl_api_sw_interface_set_vxlan_bypass_t_print
182   (vl_api_sw_interface_set_vxlan_bypass_t * mp, void *handle)
183 {
184   u8 *s;
185
186   s = format (0, "SCRIPT: sw_interface_set_vxlan_bypass ");
187
188   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
189
190   if (mp->is_ipv6)
191     s = format (s, "ip6");
192
193   if (mp->enable)
194     s = format (s, "enable ");
195   else
196     s = format (s, "disable ");
197
198   FINISH;
199 }
200
201 static void *vl_api_sw_interface_set_l2_xconnect_t_print
202   (vl_api_sw_interface_set_l2_xconnect_t * mp, void *handle)
203 {
204   u8 *s;
205
206   s = format (0, "SCRIPT: sw_interface_set_l2_xconnect ");
207
208   s = format (s, "sw_if_index %d ", ntohl (mp->rx_sw_if_index));
209
210   if (mp->enable)
211     {
212       s = format (s, "tx_sw_if_index %d ", ntohl (mp->tx_sw_if_index));
213     }
214   else
215     s = format (s, "delete ");
216
217   FINISH;
218 }
219
220 static void *vl_api_sw_interface_set_l2_bridge_t_print
221   (vl_api_sw_interface_set_l2_bridge_t * mp, void *handle)
222 {
223   u8 *s;
224
225   s = format (0, "SCRIPT: sw_interface_set_l2_bridge ");
226
227   s = format (s, "sw_if_index %d ", ntohl (mp->rx_sw_if_index));
228
229   if (mp->enable)
230     {
231       s = format (s, "bd_id %d shg %d %senable ", ntohl (mp->bd_id),
232                   mp->shg, ((mp->bvi) ? "bvi " : " "));
233     }
234   else
235     s = format (s, "disable ");
236
237   FINISH;
238 }
239
240 static void *vl_api_sw_interface_set_dpdk_hqos_pipe_t_print
241   (vl_api_sw_interface_set_dpdk_hqos_pipe_t * mp, void *handle)
242 {
243   u8 *s;
244
245   s = format (0, "SCRIPT: sw_interface_set_dpdk_hqos_pipe ");
246
247   s = format (s, "sw_if_index %u ", ntohl (mp->sw_if_index));
248
249   s = format (s, "subport %u  pipe %u  profile %u ",
250               ntohl (mp->subport), ntohl (mp->pipe), ntohl (mp->profile));
251
252   FINISH;
253 }
254
255 static void *vl_api_sw_interface_set_dpdk_hqos_subport_t_print
256   (vl_api_sw_interface_set_dpdk_hqos_subport_t * mp, void *handle)
257 {
258   u8 *s;
259
260   s = format (0, "SCRIPT: sw_interface_set_dpdk_hqos_subport ");
261
262   s = format (s, "sw_if_index %u ", ntohl (mp->sw_if_index));
263
264   s =
265     format (s,
266             "subport %u  rate %u  bkt_size %u  tc0 %u tc1 %u tc2 %u tc3 %u period %u",
267             ntohl (mp->subport), ntohl (mp->tb_rate), ntohl (mp->tb_size),
268             ntohl (mp->tc_rate[0]), ntohl (mp->tc_rate[1]),
269             ntohl (mp->tc_rate[2]), ntohl (mp->tc_rate[3]),
270             ntohl (mp->tc_period));
271
272   FINISH;
273 }
274
275 static void *vl_api_sw_interface_set_dpdk_hqos_tctbl_t_print
276   (vl_api_sw_interface_set_dpdk_hqos_tctbl_t * mp, void *handle)
277 {
278   u8 *s;
279
280   s = format (0, "SCRIPT: sw_interface_set_dpdk_hqos_tctbl ");
281
282   s = format (s, "sw_if_index %u ", ntohl (mp->sw_if_index));
283
284   s = format (s, "entry %u  tc %u  queue %u",
285               ntohl (mp->entry), ntohl (mp->tc), ntohl (mp->queue));
286
287   FINISH;
288 }
289
290 static void *vl_api_bridge_domain_add_del_t_print
291   (vl_api_bridge_domain_add_del_t * mp, void *handle)
292 {
293   u8 *s;
294
295   s = format (0, "SCRIPT: bridge_domain_add_del ");
296
297   s = format (s, "bd_id %d ", ntohl (mp->bd_id));
298
299   if (mp->is_add)
300     {
301       s = format (s, "flood %d uu-flood %d forward %d learn %d arp-term %d",
302                   mp->flood, mp->uu_flood, mp->forward, mp->learn,
303                   mp->arp_term);
304     }
305   else
306     s = format (s, "del ");
307
308   FINISH;
309 }
310
311 static void *vl_api_bridge_domain_dump_t_print
312   (vl_api_bridge_domain_dump_t * mp, void *handle)
313 {
314   u8 *s;
315   u32 bd_id = ntohl (mp->bd_id);
316
317   s = format (0, "SCRIPT: bridge_domain_dump ");
318
319   if (bd_id != ~0)
320     s = format (s, "bd_id %d ", bd_id);
321
322   FINISH;
323 }
324
325 static void *vl_api_l2fib_add_del_t_print
326   (vl_api_l2fib_add_del_t * mp, void *handle)
327 {
328   u8 *s;
329
330   s = format (0, "SCRIPT: l2fib_add_del ");
331
332   s = format (s, "mac %U ", format_ethernet_address, &mp->mac);
333
334   s = format (s, "bd_id %d ", ntohl (mp->bd_id));
335
336
337   if (mp->is_add)
338     {
339       s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
340       if (mp->static_mac)
341         s = format (s, "%s", "static ");
342       if (mp->filter_mac)
343         s = format (s, "%s", "filter ");
344       if (mp->bvi_mac)
345         s = format (s, "%s", "bvi ");
346     }
347   else
348     {
349       s = format (s, "del ");
350     }
351
352   FINISH;
353 }
354
355 static void *
356 vl_api_l2_flags_t_print (vl_api_l2_flags_t * mp, void *handle)
357 {
358   u8 *s;
359   u32 flags = ntohl (mp->feature_bitmap);
360
361   s = format (0, "SCRIPT: l2_flags ");
362
363   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
364
365 #define _(a,b) \
366     if (flags & L2INPUT_FEAT_ ## a) s = format (s, #a " ");
367   foreach_l2input_feat;
368 #undef _
369
370   FINISH;
371 }
372
373 static void *vl_api_bridge_flags_t_print
374   (vl_api_bridge_flags_t * mp, void *handle)
375 {
376   u8 *s;
377   u32 flags = ntohl (mp->feature_bitmap);
378
379   s = format (0, "SCRIPT: bridge_flags ");
380
381   s = format (s, "bd_id %d ", ntohl (mp->bd_id));
382
383   if (flags & L2_LEARN)
384     s = format (s, "learn ");
385   if (flags & L2_FWD)
386     s = format (s, "forward ");
387   if (flags & L2_FLOOD)
388     s = format (s, "flood ");
389   if (flags & L2_UU_FLOOD)
390     s = format (s, "uu-flood ");
391   if (flags & L2_ARP_TERM)
392     s = format (s, "arp-term ");
393
394   if (mp->is_set == 0)
395     s = format (s, "clear ");
396
397   FINISH;
398 }
399
400 static void *vl_api_bd_ip_mac_add_del_t_print
401   (vl_api_bd_ip_mac_add_del_t * mp, void *handle)
402 {
403   u8 *s;
404
405   s = format (0, "SCRIPT: bd_ip_mac_add_del ");
406   s = format (s, "bd_id %d ", ntohl (mp->bd_id));
407
408   if (mp->is_ipv6)
409     s = format (s, "%U ", format_ip6_address,
410                 (ip6_address_t *) mp->ip_address);
411   else
412     s = format (s, "%U ", format_ip4_address,
413                 (ip4_address_t *) mp->ip_address);
414
415   s = format (s, "%U ", format_ethernet_address, mp->mac_address);
416   if (mp->is_add == 0)
417     s = format (s, "del ");
418
419   FINISH;
420 }
421
422 static void *vl_api_tap_connect_t_print
423   (vl_api_tap_connect_t * mp, void *handle)
424 {
425   u8 *s;
426   u8 null_mac[6];
427
428   memset (null_mac, 0, sizeof (null_mac));
429
430   s = format (0, "SCRIPT: tap_connect ");
431   s = format (s, "tapname %s ", mp->tap_name);
432   if (mp->use_random_mac)
433     s = format (s, "random-mac ");
434
435   if (memcmp (mp->mac_address, null_mac, 6))
436     s = format (s, "mac %U ", format_ethernet_address, mp->mac_address);
437
438   FINISH;
439 }
440
441 static void *vl_api_tap_modify_t_print
442   (vl_api_tap_modify_t * mp, void *handle)
443 {
444   u8 *s;
445   u8 null_mac[6];
446
447   memset (null_mac, 0, sizeof (null_mac));
448
449   s = format (0, "SCRIPT: tap_modify ");
450   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
451   s = format (s, "tapname %s ", mp->tap_name);
452   if (mp->use_random_mac)
453     s = format (s, "random-mac ");
454
455   if (memcmp (mp->mac_address, null_mac, 6))
456     s = format (s, "mac %U ", format_ethernet_address, mp->mac_address);
457
458   FINISH;
459 }
460
461 static void *vl_api_tap_delete_t_print
462   (vl_api_tap_delete_t * mp, void *handle)
463 {
464   u8 *s;
465
466   s = format (0, "SCRIPT: tap_delete ");
467   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
468
469   FINISH;
470 }
471
472 static void *vl_api_sw_interface_tap_dump_t_print
473   (vl_api_sw_interface_tap_dump_t * mp, void *handle)
474 {
475   u8 *s;
476
477   s = format (0, "SCRIPT: sw_interface_tap_dump ");
478
479   FINISH;
480 }
481
482
483 static void *vl_api_ip_add_del_route_t_print
484   (vl_api_ip_add_del_route_t * mp, void *handle)
485 {
486   u8 *s;
487
488   s = format (0, "SCRIPT: ip_add_del_route ");
489   if (mp->is_add == 0)
490     s = format (s, "del ");
491
492   if (mp->next_hop_sw_if_index)
493     s = format (s, "sw_if_index %d ", ntohl (mp->next_hop_sw_if_index));
494
495   if (mp->is_ipv6)
496     s = format (s, "%U/%d ", format_ip6_address, mp->dst_address,
497                 mp->dst_address_length);
498   else
499     s = format (s, "%U/%d ", format_ip4_address, mp->dst_address,
500                 mp->dst_address_length);
501   if (mp->is_local)
502     s = format (s, "local ");
503   else if (mp->is_drop)
504     s = format (s, "drop ");
505   else if (mp->is_classify)
506     s = format (s, "classify %d", ntohl (mp->classify_table_index));
507   else
508     {
509       if (mp->is_ipv6)
510         s = format (s, "via %U ", format_ip6_address, mp->next_hop_address);
511       else
512         s = format (s, "via %U ", format_ip4_address, mp->next_hop_address);
513     }
514
515   if (mp->table_id != 0)
516     s = format (s, "vrf %d ", ntohl (mp->table_id));
517
518   if (mp->create_vrf_if_needed)
519     s = format (s, "create-vrf ");
520
521   if (mp->resolve_attempts != 0)
522     s = format (s, "resolve-attempts %d ", ntohl (mp->resolve_attempts));
523
524   if (mp->next_hop_weight != 1)
525     s = format (s, "weight %d ", mp->next_hop_weight);
526
527   if (mp->not_last)
528     s = format (s, "not-last ");
529
530   if (mp->is_multipath)
531     s = format (s, "multipath ");
532
533   if (mp->is_multipath)
534     s = format (s, "multipath ");
535
536   if (mp->next_hop_table_id)
537     s = format (s, "lookup-in-vrf %d ", ntohl (mp->next_hop_table_id));
538
539   FINISH;
540 }
541
542 static void *vl_api_proxy_arp_add_del_t_print
543   (vl_api_proxy_arp_add_del_t * mp, void *handle)
544 {
545   u8 *s;
546
547   s = format (0, "SCRIPT: proxy_arp_add_del ");
548
549   s = format (s, "%U - %U ", format_ip4_address, mp->low_address,
550               format_ip4_address, mp->hi_address);
551
552   if (mp->vrf_id)
553     s = format (s, "vrf %d ", ntohl (mp->vrf_id));
554
555   if (mp->is_add == 0)
556     s = format (s, "del ");
557
558   FINISH;
559 }
560
561 static void *vl_api_proxy_arp_intfc_enable_disable_t_print
562   (vl_api_proxy_arp_intfc_enable_disable_t * mp, void *handle)
563 {
564   u8 *s;
565
566   s = format (0, "SCRIPT: proxy_arp_intfc_enable_disable ");
567
568   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
569
570   s = format (s, "enable %d ", mp->enable_disable);
571
572   FINISH;
573 }
574
575 static void *vl_api_mpls_add_del_encap_t_print
576   (vl_api_mpls_add_del_encap_t * mp, void *handle)
577 {
578   u8 *s;
579   int i;
580
581   s = format (0, "SCRIPT: mpls_add_del_encap ");
582
583   s = format (s, "vrf_id %d ", ntohl (mp->vrf_id));
584
585   s = format (s, "dst %U ", format_ip4_address, mp->dst_address);
586
587   for (i = 0; i < mp->nlabels; i++)
588     s = format (s, "label %d ", ntohl (mp->labels[i]));
589
590   if (mp->is_add == 0)
591     s = format (s, "del ");
592
593   FINISH;
594 }
595
596 static void *vl_api_mpls_ethernet_add_del_tunnel_t_print
597   (vl_api_mpls_ethernet_add_del_tunnel_t * mp, void *handle)
598 {
599   u8 *s;
600
601   s = format (0, "SCRIPT: mpls_ethernet_add_del_tunnel ");
602
603   s = format (s, "tx_sw_if_index %d ", ntohl (mp->tx_sw_if_index));
604
605   s = format (s, "dst %U", format_ethernet_address, mp->dst_mac_address);
606
607   s = format (s, "adj %U/%d ", format_ip4_address,
608               (ip4_address_t *) mp->adj_address, mp->adj_address_length);
609
610   s = format (s, "vrf_id %d ", ntohl (mp->vrf_id));
611
612   if (mp->l2_only)
613     s = format (s, "l2-only ");
614
615   if (mp->is_add == 0)
616     s = format (s, "del ");
617
618   FINISH;
619 }
620
621 static void *vl_api_mpls_ethernet_add_del_tunnel_2_t_print
622   (vl_api_mpls_ethernet_add_del_tunnel_2_t * mp, void *handle)
623 {
624   u8 *s;
625
626   s = format (0, "SCRIPT: mpls_ethernet_add_del_tunnel_2 ");
627
628   s = format (s, "adj %U/%d ", format_ip4_address,
629               (ip4_address_t *) mp->adj_address, mp->adj_address_length);
630
631   s = format (s, "next-hop %U ", format_ip4_address,
632               (ip4_address_t *) mp->next_hop_ip4_address_in_outer_vrf);
633
634   s = format (s, "inner_vrf_id %d ", ntohl (mp->inner_vrf_id));
635
636   s = format (s, "outer_vrf_id %d ", ntohl (mp->outer_vrf_id));
637
638   s = format (s, "resolve-if-needed %d ", mp->resolve_if_needed);
639
640   s = format (s, "resolve-attempts %d ", ntohl (mp->resolve_attempts));
641
642   if (mp->l2_only)
643     s = format (s, "l2-only ");
644
645   if (mp->is_add == 0)
646     s = format (s, "del ");
647
648   FINISH;
649 }
650
651 static void *vl_api_sw_interface_set_unnumbered_t_print
652   (vl_api_sw_interface_set_unnumbered_t * mp, void *handle)
653 {
654   u8 *s;
655
656   s = format (0, "SCRIPT: sw_interface_set_unnumbered ");
657
658   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
659
660   s = format (s, "unnum_if_index %d ", ntohl (mp->unnumbered_sw_if_index));
661
662   if (mp->is_add == 0)
663     s = format (s, "del ");
664
665   FINISH;
666 }
667
668 static void *vl_api_ip_neighbor_add_del_t_print
669   (vl_api_ip_neighbor_add_del_t * mp, void *handle)
670 {
671   u8 *s;
672   u8 null_mac[6];
673
674   memset (null_mac, 0, sizeof (null_mac));
675
676   s = format (0, "SCRIPT: ip_neighbor_add_del ");
677
678   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
679
680   if (mp->is_static)
681     s = format (s, "is_static ");
682
683   s = format (s, "vrf_id %d ", ntohl (mp->vrf_id));
684
685   if (memcmp (mp->mac_address, null_mac, 6))
686     s = format (s, "mac %U ", format_ethernet_address, mp->mac_address);
687
688   if (mp->is_ipv6)
689     s =
690       format (s, "dst %U ", format_ip6_address,
691               (ip6_address_t *) mp->dst_address);
692   else
693     s =
694       format (s, "dst %U ", format_ip4_address,
695               (ip4_address_t *) mp->dst_address);
696
697   if (mp->is_add == 0)
698     s = format (s, "del ");
699
700   FINISH;
701 }
702
703 static void *
704 vl_api_reset_vrf_t_print (vl_api_reset_vrf_t * mp, void *handle)
705 {
706   u8 *s;
707
708   s = format (0, "SCRIPT: reset_vrf ");
709
710   if (mp->vrf_id)
711     s = format (s, "vrf %d ", ntohl (mp->vrf_id));
712
713   if (mp->is_ipv6 != 0)
714     s = format (s, "ipv6 ");
715
716   FINISH;
717 }
718
719 static void *vl_api_create_vlan_subif_t_print
720   (vl_api_create_vlan_subif_t * mp, void *handle)
721 {
722   u8 *s;
723
724   s = format (0, "SCRIPT: create_vlan_subif ");
725
726   if (mp->sw_if_index)
727     s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
728
729   if (mp->vlan_id)
730     s = format (s, "vlan_id %d ", ntohl (mp->vlan_id));
731
732   FINISH;
733 }
734
735 #define foreach_create_subif_bit                \
736 _(no_tags)                                      \
737 _(one_tag)                                      \
738 _(two_tags)                                     \
739 _(dot1ad)                                       \
740 _(exact_match)                                  \
741 _(default_sub)                                  \
742 _(outer_vlan_id_any)                            \
743 _(inner_vlan_id_any)
744
745 static void *vl_api_create_subif_t_print
746   (vl_api_create_subif_t * mp, void *handle)
747 {
748   u8 *s;
749
750   s = format (0, "SCRIPT: create_subif ");
751
752   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
753
754   s = format (s, "sub_id %d ", ntohl (mp->sub_id));
755
756   if (mp->outer_vlan_id)
757     s = format (s, "outer_vlan_id %d ", ntohs (mp->outer_vlan_id));
758
759   if (mp->inner_vlan_id)
760     s = format (s, "inner_vlan_id %d ", ntohs (mp->inner_vlan_id));
761
762 #define _(a) if (mp->a) s = format (s, "%s ", #a);
763   foreach_create_subif_bit;
764 #undef _
765
766   FINISH;
767 }
768
769 static void *vl_api_delete_subif_t_print
770   (vl_api_delete_subif_t * mp, void *handle)
771 {
772   u8 *s;
773
774   s = format (0, "SCRIPT: delete_subif ");
775   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
776
777   FINISH;
778 }
779
780 static void *vl_api_oam_add_del_t_print
781   (vl_api_oam_add_del_t * mp, void *handle)
782 {
783   u8 *s;
784
785   s = format (0, "SCRIPT: oam_add_del ");
786
787   if (mp->vrf_id)
788     s = format (s, "vrf %d ", ntohl (mp->vrf_id));
789
790   s = format (s, "src %U ", format_ip4_address, mp->src_address);
791
792   s = format (s, "dst %U ", format_ip4_address, mp->dst_address);
793
794   if (mp->is_add == 0)
795     s = format (s, "del ");
796
797   FINISH;
798 }
799
800 static void *
801 vl_api_reset_fib_t_print (vl_api_reset_fib_t * mp, void *handle)
802 {
803   u8 *s;
804
805   s = format (0, "SCRIPT: reset_fib ");
806
807   if (mp->vrf_id)
808     s = format (s, "vrf %d ", ntohl (mp->vrf_id));
809
810   if (mp->is_ipv6 != 0)
811     s = format (s, "ipv6 ");
812
813   FINISH;
814 }
815
816 static void *vl_api_dhcp_proxy_config_t_print
817   (vl_api_dhcp_proxy_config_t * mp, void *handle)
818 {
819   u8 *s;
820
821   s = format (0, "SCRIPT: dhcp_proxy_config ");
822
823   s = format (s, "vrf_id %d ", ntohl (mp->vrf_id));
824
825   if (mp->is_ipv6)
826     {
827       s = format (s, "svr %U ", format_ip6_address,
828                   (ip6_address_t *) mp->dhcp_server);
829       s = format (s, "src %U ", format_ip6_address,
830                   (ip6_address_t *) mp->dhcp_src_address);
831     }
832   else
833     {
834       s = format (s, "svr %U ", format_ip4_address,
835                   (ip4_address_t *) mp->dhcp_server);
836       s = format (s, "src %U ", format_ip4_address,
837                   (ip4_address_t *) mp->dhcp_src_address);
838     }
839   if (mp->is_add == 0)
840     s = format (s, "del ");
841
842   s = format (s, "insert-cid %d ", mp->insert_circuit_id);
843
844   FINISH;
845 }
846
847 static void *vl_api_dhcp_proxy_config_2_t_print
848   (vl_api_dhcp_proxy_config_2_t * mp, void *handle)
849 {
850   u8 *s;
851
852   s = format (0, "SCRIPT: dhcp_proxy_config_2 ");
853
854   s = format (s, "rx_vrf_id %d ", ntohl (mp->rx_vrf_id));
855   s = format (s, "server_vrf_id %d ", ntohl (mp->server_vrf_id));
856
857   if (mp->is_ipv6)
858     {
859       s = format (s, "svr %U ", format_ip6_address,
860                   (ip6_address_t *) mp->dhcp_server);
861       s = format (s, "src %U ", format_ip6_address,
862                   (ip6_address_t *) mp->dhcp_src_address);
863     }
864   else
865     {
866       s = format (s, "svr %U ", format_ip4_address,
867                   (ip4_address_t *) mp->dhcp_server);
868       s = format (s, "src %U ", format_ip4_address,
869                   (ip4_address_t *) mp->dhcp_src_address);
870     }
871   if (mp->is_add == 0)
872     s = format (s, "del ");
873
874   s = format (s, "insert-cid %d ", mp->insert_circuit_id);
875
876   FINISH;
877 }
878
879 static void *vl_api_dhcp_proxy_set_vss_t_print
880   (vl_api_dhcp_proxy_set_vss_t * mp, void *handle)
881 {
882   u8 *s;
883
884   s = format (0, "SCRIPT: dhcp_proxy_set_vss ");
885
886   s = format (s, "tbl_id %d ", ntohl (mp->tbl_id));
887
888   s = format (s, "fib_id %d ", ntohl (mp->fib_id));
889
890   s = format (s, "oui %d ", ntohl (mp->oui));
891
892   if (mp->is_ipv6 != 0)
893     s = format (s, "ipv6 ");
894
895   if (mp->is_add == 0)
896     s = format (s, "del ");
897
898   FINISH;
899 }
900
901 static void *vl_api_dhcp_client_config_t_print
902   (vl_api_dhcp_client_config_t * mp, void *handle)
903 {
904   u8 *s;
905
906   s = format (0, "SCRIPT: dhcp_client_config ");
907
908   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
909
910   s = format (s, "hostname %s ", mp->hostname);
911
912   s = format (s, "want_dhcp_event %d ", mp->want_dhcp_event);
913
914   s = format (s, "pid %d ", mp->pid);
915
916   if (mp->is_add == 0)
917     s = format (s, "del ");
918
919   FINISH;
920 }
921
922
923 static void *vl_api_set_ip_flow_hash_t_print
924   (vl_api_set_ip_flow_hash_t * mp, void *handle)
925 {
926   u8 *s;
927
928   s = format (0, "SCRIPT: set_ip_flow_hash ");
929
930   s = format (s, "vrf_id %d ", ntohl (mp->vrf_id));
931
932   if (mp->src)
933     s = format (s, "src ");
934
935   if (mp->dst)
936     s = format (s, "dst ");
937
938   if (mp->sport)
939     s = format (s, "sport ");
940
941   if (mp->dport)
942     s = format (s, "dport ");
943
944   if (mp->proto)
945     s = format (s, "proto ");
946
947   if (mp->reverse)
948     s = format (s, "reverse ");
949
950   if (mp->is_ipv6 != 0)
951     s = format (s, "ipv6 ");
952
953   FINISH;
954 }
955
956 static void *vl_api_sw_interface_ip6_set_link_local_address_t_print
957   (vl_api_sw_interface_ip6_set_link_local_address_t * mp, void *handle)
958 {
959   u8 *s;
960
961   s = format (0, "SCRIPT: sw_interface_ip6_set_link_local_address ");
962
963   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
964
965   s = format (s, "%U/%d ", format_ip6_address, mp->address,
966               mp->address_length);
967
968   FINISH;
969 }
970
971 static void *vl_api_sw_interface_ip6nd_ra_prefix_t_print
972   (vl_api_sw_interface_ip6nd_ra_prefix_t * mp, void *handle)
973 {
974   u8 *s;
975
976   s = format (0, "SCRIPT: sw_interface_ip6nd_ra_prefix ");
977
978   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
979
980   s = format (s, "%U/%d ", format_ip6_address, mp->address,
981               mp->address_length);
982
983   s = format (s, "val_life %d ", ntohl (mp->val_lifetime));
984
985   s = format (s, "pref_life %d ", ntohl (mp->pref_lifetime));
986
987   if (mp->use_default)
988     s = format (s, "def ");
989
990   if (mp->no_advertise)
991     s = format (s, "noadv ");
992
993   if (mp->off_link)
994     s = format (s, "offl ");
995
996   if (mp->no_autoconfig)
997     s = format (s, "noauto ");
998
999   if (mp->no_onlink)
1000     s = format (s, "nolink ");
1001
1002   if (mp->is_no)
1003     s = format (s, "isno ");
1004
1005   FINISH;
1006 }
1007
1008 static void *vl_api_sw_interface_ip6nd_ra_config_t_print
1009   (vl_api_sw_interface_ip6nd_ra_config_t * mp, void *handle)
1010 {
1011   u8 *s;
1012
1013   s = format (0, "SCRIPT: sw_interface_ip6nd_ra_config ");
1014
1015   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1016
1017   s = format (s, "maxint %d ", ntohl (mp->max_interval));
1018
1019   s = format (s, "minint %d ", ntohl (mp->min_interval));
1020
1021   s = format (s, "life %d ", ntohl (mp->lifetime));
1022
1023   s = format (s, "count %d ", ntohl (mp->initial_count));
1024
1025   s = format (s, "interval %d ", ntohl (mp->initial_interval));
1026
1027   if (mp->suppress)
1028     s = format (s, "suppress ");
1029
1030   if (mp->managed)
1031     s = format (s, "managed ");
1032
1033   if (mp->other)
1034     s = format (s, "other ");
1035
1036   if (mp->ll_option)
1037     s = format (s, "ll ");
1038
1039   if (mp->send_unicast)
1040     s = format (s, "send ");
1041
1042   if (mp->cease)
1043     s = format (s, "cease ");
1044
1045   if (mp->is_no)
1046     s = format (s, "isno ");
1047
1048   if (mp->default_router)
1049     s = format (s, "def ");
1050
1051   FINISH;
1052 }
1053
1054 static void *vl_api_set_arp_neighbor_limit_t_print
1055   (vl_api_set_arp_neighbor_limit_t * mp, void *handle)
1056 {
1057   u8 *s;
1058
1059   s = format (0, "SCRIPT: set_arp_neighbor_limit ");
1060
1061   s = format (s, "arp_nbr_limit %d ", ntohl (mp->arp_neighbor_limit));
1062
1063   if (mp->is_ipv6 != 0)
1064     s = format (s, "ipv6 ");
1065
1066   FINISH;
1067 }
1068
1069 static void *vl_api_l2_patch_add_del_t_print
1070   (vl_api_l2_patch_add_del_t * mp, void *handle)
1071 {
1072   u8 *s;
1073
1074   s = format (0, "SCRIPT: l2_patch_add_del ");
1075
1076   s = format (s, "rx_sw_if_index %d ", ntohl (mp->rx_sw_if_index));
1077
1078   s = format (s, "tx_sw_if_index %d ", ntohl (mp->tx_sw_if_index));
1079
1080   if (mp->is_add == 0)
1081     s = format (s, "del ");
1082
1083   FINISH;
1084 }
1085
1086 static void *vl_api_sr_tunnel_add_del_t_print
1087   (vl_api_sr_tunnel_add_del_t * mp, void *handle)
1088 {
1089   u8 *s;
1090   ip6_address_t *this_address;
1091   int i;
1092   u16 flags_host_byte_order;
1093   u8 pl_flag;
1094
1095   s = format (0, "SCRIPT: sr_tunnel_add_del ");
1096
1097   if (mp->name[0])
1098     s = format (s, "name %s ", mp->name);
1099
1100   s = format (s, "src %U dst %U/%d ", format_ip6_address,
1101               (ip6_address_t *) mp->src_address,
1102               format_ip6_address,
1103               (ip6_address_t *) mp->dst_address, mp->dst_mask_width);
1104
1105   this_address = (ip6_address_t *) mp->segs_and_tags;
1106   for (i = 0; i < mp->n_segments; i++)
1107     {
1108       s = format (s, "next %U ", format_ip6_address, this_address);
1109       this_address++;
1110     }
1111   for (i = 0; i < mp->n_tags; i++)
1112     {
1113       s = format (s, "tag %U ", format_ip6_address, this_address);
1114       this_address++;
1115     }
1116
1117   flags_host_byte_order = clib_net_to_host_u16 (mp->flags_net_byte_order);
1118
1119   if (flags_host_byte_order & IP6_SR_HEADER_FLAG_CLEANUP)
1120     s = format (s, " clean ");
1121
1122   if (flags_host_byte_order & IP6_SR_HEADER_FLAG_PROTECTED)
1123     s = format (s, "protected ");
1124
1125   for (i = 1; i <= 4; i++)
1126     {
1127       pl_flag = ip6_sr_policy_list_flags (flags_host_byte_order, i);
1128
1129       switch (pl_flag)
1130         {
1131         case IP6_SR_HEADER_FLAG_PL_ELT_NOT_PRESENT:
1132           continue;
1133
1134         case IP6_SR_HEADER_FLAG_PL_ELT_INGRESS_PE:
1135           s = format (s, "InPE %d ", i);
1136           break;
1137
1138         case IP6_SR_HEADER_FLAG_PL_ELT_EGRESS_PE:
1139           s = format (s, "EgPE %d ", i);
1140           break;
1141
1142         case IP6_SR_HEADER_FLAG_PL_ELT_ORIG_SRC_ADDR:
1143           s = format (s, "OrgSrc %d ", i);
1144           break;
1145
1146         default:
1147           clib_warning ("BUG: pl elt %d value %d", i, pl_flag);
1148           break;
1149         }
1150     }
1151
1152   if (mp->policy_name[0])
1153     s = format (s, "policy_name %s ", mp->policy_name);
1154
1155   if (mp->is_add == 0)
1156     s = format (s, "del ");
1157
1158   FINISH;
1159 }
1160
1161 static void *vl_api_sr_policy_add_del_t_print
1162   (vl_api_sr_policy_add_del_t * mp, void *handle)
1163 {
1164   u8 *s;
1165   int i;
1166
1167   s = format (0, "SCRIPT: sr_policy_add_del ");
1168
1169   if (mp->name[0])
1170     s = format (s, "name %s ", mp->name);
1171
1172
1173   if (mp->tunnel_names[0])
1174     {
1175       // start deserializing tunnel_names
1176       int num_tunnels = mp->tunnel_names[0];    //number of tunnels
1177       u8 *deser_tun_names = mp->tunnel_names;
1178       deser_tun_names += 1;     //moving along
1179
1180       u8 *tun_name = 0;
1181       int tun_name_len = 0;
1182
1183       for (i = 0; i < num_tunnels; i++)
1184         {
1185           tun_name_len = *deser_tun_names;
1186           deser_tun_names += 1;
1187           vec_resize (tun_name, tun_name_len);
1188           memcpy (tun_name, deser_tun_names, tun_name_len);
1189           s = format (s, "tunnel %s ", tun_name);
1190           deser_tun_names += tun_name_len;
1191           tun_name = 0;
1192         }
1193     }
1194
1195   if (mp->is_add == 0)
1196     s = format (s, "del ");
1197
1198   FINISH;
1199 }
1200
1201 static void *vl_api_sr_multicast_map_add_del_t_print
1202   (vl_api_sr_multicast_map_add_del_t * mp, void *handle)
1203 {
1204
1205   u8 *s = 0;
1206   /* int i; */
1207
1208   s = format (0, "SCRIPT: sr_multicast_map_add_del ");
1209
1210   if (mp->multicast_address[0])
1211     s = format (s, "address %U ", format_ip6_address, &mp->multicast_address);
1212
1213   if (mp->policy_name[0])
1214     s = format (s, "sr-policy %s ", &mp->policy_name);
1215
1216
1217   if (mp->is_add == 0)
1218     s = format (s, "del ");
1219
1220   FINISH;
1221 }
1222
1223
1224 static void *vl_api_classify_add_del_table_t_print
1225   (vl_api_classify_add_del_table_t * mp, void *handle)
1226 {
1227   u8 *s;
1228   int i;
1229
1230   s = format (0, "SCRIPT: classify_add_del_table ");
1231
1232   if (mp->is_add == 0)
1233     {
1234       s = format (s, "table %d ", ntohl (mp->table_index));
1235       s = format (s, "del ");
1236     }
1237   else
1238     {
1239       s = format (s, "nbuckets %d ", ntohl (mp->nbuckets));
1240       s = format (s, "memory_size %d ", ntohl (mp->memory_size));
1241       s = format (s, "skip %d ", ntohl (mp->skip_n_vectors));
1242       s = format (s, "match %d ", ntohl (mp->match_n_vectors));
1243       s = format (s, "next-table %d ", ntohl (mp->next_table_index));
1244       s = format (s, "miss-next %d ", ntohl (mp->miss_next_index));
1245       s = format (s, "current-data-flag %d ", ntohl (mp->current_data_flag));
1246       if (mp->current_data_flag)
1247         s = format (s, "current-data-offset %d ",
1248                     ntohl (mp->current_data_offset));
1249       s = format (s, "mask hex ");
1250       for (i = 0; i < ntohl (mp->match_n_vectors) * sizeof (u32x4); i++)
1251         s = format (s, "%02x", mp->mask[i]);
1252       vec_add1 (s, ' ');
1253     }
1254
1255   FINISH;
1256 }
1257
1258 static void *vl_api_classify_add_del_session_t_print
1259   (vl_api_classify_add_del_session_t * mp, void *handle)
1260 {
1261   u8 *s;
1262   int i, limit = 0;
1263
1264   s = format (0, "SCRIPT: classify_add_del_session ");
1265
1266   s = format (s, "table_index %d ", ntohl (mp->table_index));
1267   s = format (s, "hit_next_index %d ", ntohl (mp->hit_next_index));
1268   s = format (s, "opaque_index %d ", ntohl (mp->opaque_index));
1269   s = format (s, "advance %d ", ntohl (mp->advance));
1270   s = format (s, "action %d ", mp->action);
1271   if (mp->action)
1272     s = format (s, "metadata %d ", ntohl (mp->metadata));
1273   if (mp->is_add == 0)
1274     s = format (s, "del ");
1275
1276   s = format (s, "match hex ");
1277   for (i = 5 * sizeof (u32x4) - 1; i > 0; i--)
1278     {
1279       if (mp->match[i] != 0)
1280         {
1281           limit = i + 1;
1282           break;
1283         }
1284     }
1285
1286   for (i = 0; i < limit; i++)
1287     s = format (s, "%02x", mp->match[i]);
1288
1289   FINISH;
1290 }
1291
1292 static void *vl_api_classify_set_interface_ip_table_t_print
1293   (vl_api_classify_set_interface_ip_table_t * mp, void *handle)
1294 {
1295   u8 *s;
1296
1297   s = format (0, "SCRIPT: classify_set_interface_ip_table ");
1298
1299   if (mp->is_ipv6)
1300     s = format (s, "ipv6 ");
1301
1302   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1303   s = format (s, "table %d ", ntohl (mp->table_index));
1304
1305   FINISH;
1306 }
1307
1308 static void *vl_api_classify_set_interface_l2_tables_t_print
1309   (vl_api_classify_set_interface_l2_tables_t * mp, void *handle)
1310 {
1311   u8 *s;
1312
1313   s = format (0, "SCRIPT: classify_set_interface_l2_tables ");
1314
1315   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1316   s = format (s, "ip4-table %d ", ntohl (mp->ip4_table_index));
1317   s = format (s, "ip6-table %d ", ntohl (mp->ip6_table_index));
1318   s = format (s, "other-table %d ", ntohl (mp->other_table_index));
1319   s = format (s, "is-input %d ", mp->is_input);
1320
1321   FINISH;
1322 }
1323
1324 static void *vl_api_add_node_next_t_print
1325   (vl_api_add_node_next_t * mp, void *handle)
1326 {
1327   u8 *s;
1328
1329   s = format (0, "SCRIPT: add_node_next ");
1330
1331   s = format (0, "node %s next %s ", mp->node_name, mp->next_name);
1332
1333   FINISH;
1334 }
1335
1336 static void *vl_api_l2tpv3_create_tunnel_t_print
1337   (vl_api_l2tpv3_create_tunnel_t * mp, void *handle)
1338 {
1339   u8 *s;
1340
1341   s = format (0, "SCRIPT: l2tpv3_create_tunnel ");
1342
1343   s = format (s, "client_address %U our_address %U ",
1344               format_ip6_address, (ip6_address_t *) (mp->client_address),
1345               format_ip6_address, (ip6_address_t *) (mp->our_address));
1346   s = format (s, "local_session_id %d ", ntohl (mp->local_session_id));
1347   s = format (s, "remote_session_id %d ", ntohl (mp->remote_session_id));
1348   s = format (s, "local_cookie %lld ",
1349               clib_net_to_host_u64 (mp->local_cookie));
1350   s = format (s, "remote_cookie %lld ",
1351               clib_net_to_host_u64 (mp->remote_cookie));
1352   if (mp->l2_sublayer_present)
1353     s = format (s, "l2-sublayer-present ");
1354
1355   FINISH;
1356 }
1357
1358 static void *vl_api_l2tpv3_set_tunnel_cookies_t_print
1359   (vl_api_l2tpv3_set_tunnel_cookies_t * mp, void *handle)
1360 {
1361   u8 *s;
1362
1363   s = format (0, "SCRIPT: l2tpv3_set_tunnel_cookies ");
1364
1365   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1366
1367   s = format (s, "new_local_cookie %llu ",
1368               clib_net_to_host_u64 (mp->new_local_cookie));
1369
1370   s = format (s, "new_remote_cookie %llu ",
1371               clib_net_to_host_u64 (mp->new_remote_cookie));
1372
1373   FINISH;
1374 }
1375
1376 static void *vl_api_l2tpv3_interface_enable_disable_t_print
1377   (vl_api_l2tpv3_interface_enable_disable_t * mp, void *handle)
1378 {
1379   u8 *s;
1380
1381   s = format (0, "SCRIPT: l2tpv3_interface_enable_disable ");
1382
1383   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1384
1385   if (mp->enable_disable == 0)
1386     s = format (s, "del ");
1387
1388   FINISH;
1389 }
1390
1391 static void *vl_api_l2tpv3_set_lookup_key_t_print
1392   (vl_api_l2tpv3_set_lookup_key_t * mp, void *handle)
1393 {
1394   u8 *s;
1395   char *str = "unknown";
1396
1397   s = format (0, "SCRIPT: l2tpv3_set_lookup_key ");
1398
1399   switch (mp->key)
1400     {
1401     case L2T_LOOKUP_SRC_ADDRESS:
1402       str = "lookup_v6_src";
1403       break;
1404     case L2T_LOOKUP_DST_ADDRESS:
1405       str = "lookup_v6_dst";
1406       break;
1407     case L2T_LOOKUP_SESSION_ID:
1408       str = "lookup_session_id";
1409       break;
1410     default:
1411       break;
1412     }
1413
1414   s = format (s, "%s ", str);
1415
1416   FINISH;
1417 }
1418
1419 static void *vl_api_sw_if_l2tpv3_tunnel_dump_t_print
1420   (vl_api_sw_if_l2tpv3_tunnel_dump_t * mp, void *handle)
1421 {
1422   u8 *s;
1423
1424   s = format (0, "SCRIPT: sw_if_l2tpv3_tunnel_dump ");
1425
1426   FINISH;
1427 }
1428
1429 static void *vl_api_vxlan_add_del_tunnel_t_print
1430   (vl_api_vxlan_add_del_tunnel_t * mp, void *handle)
1431 {
1432   u8 *s;
1433   s = format (0, "SCRIPT: vxlan_add_del_tunnel ");
1434
1435   ip46_address_t src, dst;
1436
1437   ip46_from_addr_buf (mp->is_ipv6, mp->dst_address, &dst);
1438   ip46_from_addr_buf (mp->is_ipv6, mp->src_address, &src);
1439
1440   u8 is_grp = ip46_address_is_multicast (&dst);
1441   char *dst_name = is_grp ? "group" : "dst";
1442
1443   s = format (s, "src %U ", format_ip46_address, &src, IP46_TYPE_ANY);
1444   s = format (s, "%s %U ", dst_name, format_ip46_address,
1445               &dst, IP46_TYPE_ANY);
1446
1447   if (is_grp)
1448     s = format (s, "mcast_sw_if_index %d ", ntohl (mp->mcast_sw_if_index));
1449
1450   if (mp->encap_vrf_id)
1451     s = format (s, "encap-vrf-id %d ", ntohl (mp->encap_vrf_id));
1452
1453   s = format (s, "decap-next %d ", ntohl (mp->decap_next_index));
1454
1455   s = format (s, "vni %d ", ntohl (mp->vni));
1456
1457   if (mp->is_add == 0)
1458     s = format (s, "del ");
1459
1460   if (mp->is_add == 0)
1461     s = format (s, "del ");
1462
1463   FINISH;
1464 }
1465
1466 static void *vl_api_vxlan_tunnel_dump_t_print
1467   (vl_api_vxlan_tunnel_dump_t * mp, void *handle)
1468 {
1469   u8 *s;
1470
1471   s = format (0, "SCRIPT: vxlan_tunnel_dump ");
1472
1473   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1474
1475   FINISH;
1476 }
1477
1478 static void *vl_api_gre_add_del_tunnel_t_print
1479   (vl_api_gre_add_del_tunnel_t * mp, void *handle)
1480 {
1481   u8 *s;
1482
1483   s = format (0, "SCRIPT: gre_add_del_tunnel ");
1484
1485   s = format (s, "dst %U ", format_ip46_address,
1486               (ip46_address_t *) & (mp->dst_address),
1487               mp->is_ipv6 ? IP46_TYPE_IP6 : IP46_TYPE_IP4);
1488
1489   s = format (s, "src %U ", format_ip46_address,
1490               (ip46_address_t *) & (mp->src_address),
1491               mp->is_ipv6 ? IP46_TYPE_IP6 : IP46_TYPE_IP4);
1492
1493   if (mp->teb)
1494     s = format (s, "teb ");
1495
1496   if (mp->outer_fib_id)
1497     s = format (s, "outer-fib-id %d ", ntohl (mp->outer_fib_id));
1498
1499   if (mp->is_add == 0)
1500     s = format (s, "del ");
1501
1502   FINISH;
1503 }
1504
1505 static void *vl_api_gre_tunnel_dump_t_print
1506   (vl_api_gre_tunnel_dump_t * mp, void *handle)
1507 {
1508   u8 *s;
1509
1510   s = format (0, "SCRIPT: gre_tunnel_dump ");
1511
1512   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1513
1514   FINISH;
1515 }
1516
1517 static void *vl_api_l2_fib_clear_table_t_print
1518   (vl_api_l2_fib_clear_table_t * mp, void *handle)
1519 {
1520   u8 *s;
1521
1522   s = format (0, "SCRIPT: l2_fib_clear_table ");
1523
1524   FINISH;
1525 }
1526
1527 static void *vl_api_l2_interface_efp_filter_t_print
1528   (vl_api_l2_interface_efp_filter_t * mp, void *handle)
1529 {
1530   u8 *s;
1531
1532   s = format (0, "SCRIPT: l2_interface_efp_filter ");
1533
1534   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1535   if (mp->enable_disable)
1536     s = format (s, "enable ");
1537   else
1538     s = format (s, "disable ");
1539
1540   FINISH;
1541 }
1542
1543 static void *vl_api_l2_interface_vlan_tag_rewrite_t_print
1544   (vl_api_l2_interface_vlan_tag_rewrite_t * mp, void *handle)
1545 {
1546   u8 *s;
1547
1548   s = format (0, "SCRIPT: l2_interface_vlan_tag_rewrite ");
1549
1550   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1551   s = format (s, "vtr_op %d ", ntohl (mp->vtr_op));
1552   s = format (s, "push_dot1q %d ", ntohl (mp->push_dot1q));
1553   s = format (s, "tag1 %d ", ntohl (mp->tag1));
1554   s = format (s, "tag2 %d ", ntohl (mp->tag2));
1555
1556   FINISH;
1557 }
1558
1559 static void *vl_api_create_vhost_user_if_t_print
1560   (vl_api_create_vhost_user_if_t * mp, void *handle)
1561 {
1562   u8 *s;
1563
1564   s = format (0, "SCRIPT: create_vhost_user_if ");
1565
1566   s = format (s, "socket %s ", mp->sock_filename);
1567   if (mp->is_server)
1568     s = format (s, "server ");
1569   if (mp->renumber)
1570     s = format (s, "renumber %d ", ntohl (mp->custom_dev_instance));
1571
1572   FINISH;
1573 }
1574
1575 static void *vl_api_modify_vhost_user_if_t_print
1576   (vl_api_modify_vhost_user_if_t * mp, void *handle)
1577 {
1578   u8 *s;
1579
1580   s = format (0, "SCRIPT: modify_vhost_user_if ");
1581
1582   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1583   s = format (s, "socket %s ", mp->sock_filename);
1584   if (mp->is_server)
1585     s = format (s, "server ");
1586   if (mp->renumber)
1587     s = format (s, "renumber %d ", ntohl (mp->custom_dev_instance));
1588
1589   FINISH;
1590 }
1591
1592 static void *vl_api_delete_vhost_user_if_t_print
1593   (vl_api_delete_vhost_user_if_t * mp, void *handle)
1594 {
1595   u8 *s;
1596
1597   s = format (0, "SCRIPT: delete_vhost_user_if ");
1598   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1599
1600   FINISH;
1601 }
1602
1603 static void *vl_api_sw_interface_vhost_user_dump_t_print
1604   (vl_api_sw_interface_vhost_user_dump_t * mp, void *handle)
1605 {
1606   u8 *s;
1607
1608   s = format (0, "SCRIPT: sw_interface_vhost_user_dump ");
1609
1610   FINISH;
1611 }
1612
1613 static void *vl_api_sw_interface_dump_t_print
1614   (vl_api_sw_interface_dump_t * mp, void *handle)
1615 {
1616   u8 *s;
1617
1618   s = format (0, "SCRIPT: sw_interface_dump ");
1619
1620   if (mp->name_filter_valid)
1621     s = format (s, "name_filter %s ", mp->name_filter);
1622   else
1623     s = format (s, "all ");
1624
1625   FINISH;
1626 }
1627
1628 static void *vl_api_l2_fib_table_dump_t_print
1629   (vl_api_l2_fib_table_dump_t * mp, void *handle)
1630 {
1631   u8 *s;
1632
1633   s = format (0, "SCRIPT: l2_fib_table_dump ");
1634
1635   s = format (s, "bd_id %d ", ntohl (mp->bd_id));
1636
1637   FINISH;
1638 }
1639
1640 static void *vl_api_control_ping_t_print
1641   (vl_api_control_ping_t * mp, void *handle)
1642 {
1643   u8 *s;
1644
1645   s = format (0, "SCRIPT: control_ping ");
1646
1647   FINISH;
1648 }
1649
1650 static void *vl_api_want_interface_events_t_print
1651   (vl_api_want_interface_events_t * mp, void *handle)
1652 {
1653   u8 *s;
1654
1655   s = format (0, "SCRIPT: want_interface_events pid %d enable %d ",
1656               ntohl (mp->pid), ntohl (mp->enable_disable));
1657
1658   FINISH;
1659 }
1660
1661 static void *vl_api_cli_request_t_print
1662   (vl_api_cli_request_t * mp, void *handle)
1663 {
1664   u8 *s;
1665
1666   s = format (0, "SCRIPT: cli_request ");
1667
1668   FINISH;
1669 }
1670
1671 static void *vl_api_cli_inband_t_print
1672   (vl_api_cli_inband_t * mp, void *handle)
1673 {
1674   u8 *s;
1675
1676   s = format (0, "SCRIPT: cli_inband ");
1677
1678   FINISH;
1679 }
1680
1681 static void *vl_api_memclnt_create_t_print
1682   (vl_api_memclnt_create_t * mp, void *handle)
1683 {
1684   u8 *s;
1685
1686   s = format (0, "SCRIPT: memclnt_create name %s ", mp->name);
1687
1688   FINISH;
1689 }
1690
1691 static void *vl_api_show_version_t_print
1692   (vl_api_show_version_t * mp, void *handle)
1693 {
1694   u8 *s;
1695
1696   s = format (0, "SCRIPT: show_version ");
1697
1698   FINISH;
1699 }
1700
1701 static void *vl_api_vxlan_gpe_add_del_tunnel_t_print
1702   (vl_api_vxlan_gpe_add_del_tunnel_t * mp, void *handle)
1703 {
1704   u8 *s;
1705
1706   s = format (0, "SCRIPT: vxlan_gpe_add_del_tunnel ");
1707
1708   s = format (s, "local %U ", format_ip46_address, &mp->local, mp->is_ipv6);
1709
1710   s = format (s, "remote %U ", format_ip46_address, &mp->remote, mp->is_ipv6);
1711
1712   s = format (s, "protocol %d ", ntohl (mp->protocol));
1713
1714   s = format (s, "vni %d ", ntohl (mp->vni));
1715
1716   if (mp->is_add == 0)
1717     s = format (s, "del ");
1718
1719   if (mp->encap_vrf_id)
1720     s = format (s, "encap-vrf-id %d ", ntohl (mp->encap_vrf_id));
1721
1722   if (mp->decap_vrf_id)
1723     s = format (s, "decap-vrf-id %d ", ntohl (mp->decap_vrf_id));
1724
1725   FINISH;
1726 }
1727
1728 static void *vl_api_vxlan_gpe_tunnel_dump_t_print
1729   (vl_api_vxlan_gpe_tunnel_dump_t * mp, void *handle)
1730 {
1731   u8 *s;
1732
1733   s = format (0, "SCRIPT: vxlan_gpe_tunnel_dump ");
1734
1735   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1736
1737   FINISH;
1738 }
1739
1740 static void *vl_api_interface_name_renumber_t_print
1741   (vl_api_interface_name_renumber_t * mp, void *handle)
1742 {
1743   u8 *s;
1744
1745   s = format (0, "SCRIPT: interface_renumber ");
1746
1747   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1748
1749   s = format (s, "new_show_dev_instance %d ",
1750               ntohl (mp->new_show_dev_instance));
1751
1752   FINISH;
1753 }
1754
1755 static void *vl_api_want_ip4_arp_events_t_print
1756   (vl_api_want_ip4_arp_events_t * mp, void *handle)
1757 {
1758   u8 *s;
1759
1760   s = format (0, "SCRIPT: want_ip4_arp_events ");
1761   s = format (s, "pid %d address %U ", mp->pid,
1762               format_ip4_address, &mp->address);
1763   if (mp->enable_disable == 0)
1764     s = format (s, "del ");
1765
1766   FINISH;
1767 }
1768
1769 static void *vl_api_want_ip6_nd_events_t_print
1770   (vl_api_want_ip6_nd_events_t * mp, void *handle)
1771 {
1772   u8 *s;
1773
1774   s = format (0, "SCRIPT: want_ip6_nd_events ");
1775   s = format (s, "pid %d address %U ", mp->pid,
1776               format_ip6_address, mp->address);
1777   if (mp->enable_disable == 0)
1778     s = format (s, "del ");
1779
1780   FINISH;
1781 }
1782
1783 static void *vl_api_input_acl_set_interface_t_print
1784   (vl_api_input_acl_set_interface_t * mp, void *handle)
1785 {
1786   u8 *s;
1787
1788   s = format (0, "SCRIPT: input_acl_set_interface ");
1789
1790   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1791   s = format (s, "ip4-table %d ", ntohl (mp->ip4_table_index));
1792   s = format (s, "ip6-table %d ", ntohl (mp->ip6_table_index));
1793   s = format (s, "l2-table %d ", ntohl (mp->l2_table_index));
1794
1795   if (mp->is_add == 0)
1796     s = format (s, "del ");
1797
1798   FINISH;
1799 }
1800
1801 static void *vl_api_ip_address_dump_t_print
1802   (vl_api_ip_address_dump_t * mp, void *handle)
1803 {
1804   u8 *s;
1805
1806   s = format (0, "SCRIPT: ip6_address_dump ");
1807   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1808   s = format (s, "is_ipv6 %d ", mp->is_ipv6 != 0);
1809
1810   FINISH;
1811 }
1812
1813 static void *
1814 vl_api_ip_dump_t_print (vl_api_ip_dump_t * mp, void *handle)
1815 {
1816   u8 *s;
1817
1818   s = format (0, "SCRIPT: ip_dump ");
1819   s = format (s, "is_ipv6 %d ", mp->is_ipv6 != 0);
1820
1821   FINISH;
1822 }
1823
1824 static void *vl_api_cop_interface_enable_disable_t_print
1825   (vl_api_cop_interface_enable_disable_t * mp, void *handle)
1826 {
1827   u8 *s;
1828
1829   s = format (0, "SCRIPT: cop_interface_enable_disable ");
1830   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1831   if (mp->enable_disable)
1832     s = format (s, "enable ");
1833   else
1834     s = format (s, "disable ");
1835
1836   FINISH;
1837 }
1838
1839 static void *vl_api_cop_whitelist_enable_disable_t_print
1840   (vl_api_cop_whitelist_enable_disable_t * mp, void *handle)
1841 {
1842   u8 *s;
1843
1844   s = format (0, "SCRIPT: cop_whitelist_enable_disable ");
1845   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
1846   s = format (s, "fib-id %d ", ntohl (mp->fib_id));
1847   if (mp->ip4)
1848     s = format (s, "ip4 ");
1849   if (mp->ip6)
1850     s = format (s, "ip6 ");
1851   if (mp->default_cop)
1852     s = format (s, "default ");
1853
1854   FINISH;
1855 }
1856
1857 static void *vl_api_af_packet_create_t_print
1858   (vl_api_af_packet_create_t * mp, void *handle)
1859 {
1860   u8 *s;
1861
1862   s = format (0, "SCRIPT: af_packet_create ");
1863   s = format (s, "host_if_name %s ", mp->host_if_name);
1864   if (mp->use_random_hw_addr)
1865     s = format (s, "hw_addr random ");
1866   else
1867     s = format (s, "hw_addr %U ", format_ethernet_address, mp->hw_addr);
1868
1869   FINISH;
1870 }
1871
1872 static void *vl_api_af_packet_delete_t_print
1873   (vl_api_af_packet_delete_t * mp, void *handle)
1874 {
1875   u8 *s;
1876
1877   s = format (0, "SCRIPT: af_packet_delete ");
1878   s = format (s, "host_if_name %s ", mp->host_if_name);
1879
1880   FINISH;
1881 }
1882
1883 static u8 *
1884 format_policer_action (u8 * s, va_list * va)
1885 {
1886   u32 action = va_arg (*va, u32);
1887   u32 dscp = va_arg (*va, u32);
1888   char *t = 0;
1889
1890   if (action == SSE2_QOS_ACTION_DROP)
1891     s = format (s, "drop");
1892   else if (action == SSE2_QOS_ACTION_TRANSMIT)
1893     s = format (s, "transmit");
1894   else if (action == SSE2_QOS_ACTION_MARK_AND_TRANSMIT)
1895     {
1896       s = format (s, "mark-and-transmit ");
1897       switch (dscp)
1898         {
1899 #define _(v,f,str) case VNET_DSCP_##f: t = str; break;
1900           foreach_vnet_dscp
1901 #undef _
1902         default:
1903           break;
1904         }
1905       s = format (s, "%s", t);
1906     }
1907
1908   return s;
1909 }
1910
1911 static void *vl_api_policer_add_del_t_print
1912   (vl_api_policer_add_del_t * mp, void *handle)
1913 {
1914   u8 *s;
1915
1916   s = format (0, "SCRIPT: policer_add_del ");
1917   s = format (s, "name %s ", mp->name);
1918   s = format (s, "cir %d ", mp->cir);
1919   s = format (s, "eir %d ", mp->eir);
1920   s = format (s, "cb %d ", mp->cb);
1921   s = format (s, "eb %d ", mp->eb);
1922
1923   switch (mp->rate_type)
1924     {
1925     case SSE2_QOS_RATE_KBPS:
1926       s = format (s, "rate_type kbps ");
1927       break;
1928     case SSE2_QOS_RATE_PPS:
1929       s = format (s, "rate_type pps ");
1930       break;
1931     default:
1932       break;
1933     }
1934
1935   switch (mp->round_type)
1936     {
1937     case SSE2_QOS_ROUND_TO_CLOSEST:
1938       s = format (s, "round_type closest ");
1939       break;
1940     case SSE2_QOS_ROUND_TO_UP:
1941       s = format (s, "round_type up ");
1942       break;
1943     case SSE2_QOS_ROUND_TO_DOWN:
1944       s = format (s, "round_type down ");
1945       break;
1946     default:
1947       break;
1948     }
1949
1950   switch (mp->type)
1951     {
1952     case SSE2_QOS_POLICER_TYPE_1R2C:
1953       s = format (s, "type 1r2c ");
1954       break;
1955     case SSE2_QOS_POLICER_TYPE_1R3C_RFC_2697:
1956       s = format (s, "type 1r3c ");
1957       break;
1958     case SSE2_QOS_POLICER_TYPE_2R3C_RFC_2698:
1959       s = format (s, "type 2r3c-2698 ");
1960       break;
1961     case SSE2_QOS_POLICER_TYPE_2R3C_RFC_4115:
1962       s = format (s, "type 2r3c-4115 ");
1963       break;
1964     case SSE2_QOS_POLICER_TYPE_2R3C_RFC_MEF5CF1:
1965       s = format (s, "type 2r3c-mef5cf1 ");
1966       break;
1967     default:
1968       break;
1969     }
1970
1971   s = format (s, "conform_action %U ", format_policer_action,
1972               mp->conform_action_type, mp->conform_dscp);
1973   s = format (s, "exceed_action %U ", format_policer_action,
1974               mp->exceed_action_type, mp->exceed_dscp);
1975   s = format (s, "violate_action %U ", format_policer_action,
1976               mp->violate_action_type, mp->violate_dscp);
1977
1978   if (mp->color_aware)
1979     s = format (s, "color-aware ");
1980   if (mp->is_add == 0)
1981     s = format (s, "del ");
1982
1983   FINISH;
1984 }
1985
1986 static void *vl_api_policer_dump_t_print
1987   (vl_api_policer_dump_t * mp, void *handle)
1988 {
1989   u8 *s;
1990
1991   s = format (0, "SCRIPT: policer_dump ");
1992   if (mp->match_name_valid)
1993     s = format (s, "name %s ", mp->match_name);
1994
1995   FINISH;
1996 }
1997
1998 static void *vl_api_policer_classify_set_interface_t_print
1999   (vl_api_policer_classify_set_interface_t * mp, void *handle)
2000 {
2001   u8 *s;
2002
2003   s = format (0, "SCRIPT: policer_classify_set_interface ");
2004   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
2005   if (mp->ip4_table_index != ~0)
2006     s = format (s, "ip4-table %d ", ntohl (mp->ip4_table_index));
2007   if (mp->ip6_table_index != ~0)
2008     s = format (s, "ip6-table %d ", ntohl (mp->ip6_table_index));
2009   if (mp->l2_table_index != ~0)
2010     s = format (s, "l2-table %d ", ntohl (mp->l2_table_index));
2011   if (mp->is_add == 0)
2012     s = format (s, "del ");
2013
2014   FINISH;
2015 }
2016
2017 static void *vl_api_policer_classify_dump_t_print
2018   (vl_api_policer_classify_dump_t * mp, void *handle)
2019 {
2020   u8 *s;
2021
2022   s = format (0, "SCRIPT: policer_classify_dump ");
2023   switch (mp->type)
2024     {
2025     case POLICER_CLASSIFY_TABLE_IP4:
2026       s = format (s, "type ip4 ");
2027       break;
2028     case POLICER_CLASSIFY_TABLE_IP6:
2029       s = format (s, "type ip6 ");
2030       break;
2031     case POLICER_CLASSIFY_TABLE_L2:
2032       s = format (s, "type l2 ");
2033       break;
2034     default:
2035       break;
2036     }
2037
2038   FINISH;
2039 }
2040
2041 static void *vl_api_sw_interface_clear_stats_t_print
2042   (vl_api_sw_interface_clear_stats_t * mp, void *handle)
2043 {
2044   u8 *s;
2045
2046   s = format (0, "SCRIPT: sw_interface_clear_stats ");
2047   if (mp->sw_if_index != ~0)
2048     s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
2049
2050   FINISH;
2051 }
2052
2053 static void *vl_api_mpls_eth_tunnel_dump_t_print
2054   (vl_api_mpls_eth_tunnel_dump_t * mp, void *handle)
2055 {
2056   u8 *s;
2057
2058   s = format (0, "SCRIPT: mpls_eth_tunnel_dump ");
2059
2060   s = format (s, "tunnel_index %d ", ntohl (mp->tunnel_index));
2061
2062   FINISH;
2063 }
2064
2065 static void *vl_api_mpls_fib_encap_dump_t_print
2066   (vl_api_mpls_fib_encap_dump_t * mp, void *handle)
2067 {
2068   u8 *s;
2069
2070   s = format (0, "SCRIPT: mpls_fib_encap_dump ");
2071
2072   FINISH;
2073 }
2074
2075 static void *vl_api_mpls_fib_dump_t_print
2076   (vl_api_mpls_fib_dump_t * mp, void *handle)
2077 {
2078   u8 *s;
2079
2080   s = format (0, "SCRIPT: mpls_fib_decap_dump ");
2081
2082   FINISH;
2083 }
2084
2085 static void *vl_api_ip_fib_dump_t_print
2086   (vl_api_ip_fib_dump_t * mp, void *handle)
2087 {
2088   u8 *s;
2089
2090   s = format (0, "SCRIPT: ip_fib_dump ");
2091
2092   FINISH;
2093 }
2094
2095 static void *vl_api_ip6_fib_dump_t_print
2096   (vl_api_ip6_fib_dump_t * mp, void *handle)
2097 {
2098   u8 *s;
2099
2100   s = format (0, "SCRIPT: ip6_fib_dump ");
2101
2102   FINISH;
2103 }
2104
2105 static void *vl_api_classify_table_ids_t_print
2106   (vl_api_classify_table_ids_t * mp, void *handle)
2107 {
2108   u8 *s;
2109
2110   s = format (0, "SCRIPT: classify_table_ids ");
2111
2112   FINISH;
2113 }
2114
2115 static void *vl_api_classify_table_by_interface_t_print
2116   (vl_api_classify_table_by_interface_t * mp, void *handle)
2117 {
2118   u8 *s;
2119
2120   s = format (0, "SCRIPT: classify_table_by_interface ");
2121   if (mp->sw_if_index != ~0)
2122     s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
2123
2124   FINISH;
2125 }
2126
2127 static void *vl_api_classify_table_info_t_print
2128   (vl_api_classify_table_info_t * mp, void *handle)
2129 {
2130   u8 *s;
2131
2132   s = format (0, "SCRIPT: classify_table_info ");
2133   if (mp->table_id != ~0)
2134     s = format (s, "table_id %d ", ntohl (mp->table_id));
2135
2136   FINISH;
2137 }
2138
2139 static void *vl_api_classify_session_dump_t_print
2140   (vl_api_classify_session_dump_t * mp, void *handle)
2141 {
2142   u8 *s;
2143
2144   s = format (0, "SCRIPT: classify_session_dump ");
2145   if (mp->table_id != ~0)
2146     s = format (s, "table_id %d ", ntohl (mp->table_id));
2147
2148   FINISH;
2149 }
2150
2151 static void *vl_api_set_ipfix_exporter_t_print
2152   (vl_api_set_ipfix_exporter_t * mp, void *handle)
2153 {
2154   u8 *s;
2155
2156   s = format (0, "SCRIPT: set_ipfix_exporter ");
2157
2158   s = format (s, "collector-address %U ", format_ip4_address,
2159               (ip4_address_t *) mp->collector_address);
2160   s = format (s, "collector-port %d ", ntohs (mp->collector_port));
2161   s = format (s, "src-address %U ", format_ip4_address,
2162               (ip4_address_t *) mp->src_address);
2163   s = format (s, "vrf-id %d ", ntohl (mp->vrf_id));
2164   s = format (s, "path-mtu %d ", ntohl (mp->path_mtu));
2165   s = format (s, "template-interval %d ", ntohl (mp->template_interval));
2166   s = format (s, "udp-checksum %d ", mp->udp_checksum);
2167
2168   FINISH;
2169 }
2170
2171 static void *vl_api_ipfix_exporter_dump_t_print
2172   (vl_api_ipfix_exporter_dump_t * mp, void *handle)
2173 {
2174   u8 *s;
2175
2176   s = format (0, "SCRIPT: ipfix_exporter_dump ");
2177
2178   FINISH;
2179 }
2180
2181 static void *vl_api_set_ipfix_classify_stream_t_print
2182   (vl_api_set_ipfix_classify_stream_t * mp, void *handle)
2183 {
2184   u8 *s;
2185
2186   s = format (0, "SCRIPT: set_ipfix_classify_stream ");
2187
2188   s = format (s, "domain-id %d ", ntohl (mp->domain_id));
2189   s = format (s, "src-port %d ", ntohs (mp->src_port));
2190
2191   FINISH;
2192 }
2193
2194 static void *vl_api_ipfix_classify_stream_dump_t_print
2195   (vl_api_ipfix_classify_stream_dump_t * mp, void *handle)
2196 {
2197   u8 *s;
2198
2199   s = format (0, "SCRIPT: ipfix_classify_stream_dump ");
2200
2201   FINISH;
2202 }
2203
2204 static void *vl_api_ipfix_classify_table_add_del_t_print
2205   (vl_api_ipfix_classify_table_add_del_t * mp, void *handle)
2206 {
2207   u8 *s;
2208
2209   s = format (0, "SCRIPT: ipfix_classify_table_add_del ");
2210
2211   s = format (s, "table-id %d ", ntohl (mp->table_id));
2212   s = format (s, "ip-version %d ", mp->ip_version);
2213   s = format (s, "transport-protocol %d ", mp->transport_protocol);
2214
2215   FINISH;
2216 }
2217
2218 static void *vl_api_ipfix_classify_table_dump_t_print
2219   (vl_api_ipfix_classify_table_dump_t * mp, void *handle)
2220 {
2221   u8 *s;
2222
2223   s = format (0, "SCRIPT: ipfix_classify_table_dump ");
2224
2225   FINISH;
2226 }
2227
2228 static void *vl_api_sw_interface_span_enable_disable_t_print
2229   (vl_api_sw_interface_span_enable_disable_t * mp, void *handle)
2230 {
2231   u8 *s;
2232
2233   s = format (0, "SCRIPT: sw_interface_span_enable_disable ");
2234   s = format (s, "src_sw_if_index %u ", ntohl (mp->sw_if_index_from));
2235   s = format (s, "dst_sw_if_index %u ", ntohl (mp->sw_if_index_to));
2236   if (!mp->enable)
2237     s = format (s, "disable ");
2238
2239   FINISH;
2240 }
2241
2242 static void *
2243 vl_api_sw_interface_span_dump_t_print (vl_api_sw_interface_span_dump_t * mp,
2244                                        void *handle)
2245 {
2246   u8 *s;
2247
2248   s = format (0, "SCRIPT: sw_interface_span_dump ");
2249
2250   FINISH;
2251 }
2252
2253 static void *vl_api_get_next_index_t_print
2254   (vl_api_get_next_index_t * mp, void *handle)
2255 {
2256   u8 *s;
2257
2258   s = format (0, "SCRIPT: get_next_index ");
2259   s = format (s, "node-name %s ", mp->node_name);
2260   s = format (s, "next-node-name %s ", mp->next_name);
2261
2262   FINISH;
2263 }
2264
2265 static void *vl_api_pg_create_interface_t_print
2266   (vl_api_pg_create_interface_t * mp, void *handle)
2267 {
2268   u8 *s;
2269
2270   s = format (0, "SCRIPT: pg_create_interface ");
2271   s = format (0, "if_id %d", ntohl (mp->interface_id));
2272
2273   FINISH;
2274 }
2275
2276 static void *vl_api_pg_capture_t_print
2277   (vl_api_pg_capture_t * mp, void *handle)
2278 {
2279   u8 *s;
2280
2281   s = format (0, "SCRIPT: pg_capture ");
2282   s = format (0, "if_id %d ", ntohl (mp->interface_id));
2283   s = format (0, "pcap %s", mp->pcap_file_name);
2284   if (mp->count != ~0)
2285     s = format (s, "count %d ", ntohl (mp->count));
2286   if (!mp->is_enabled)
2287     s = format (s, "disable");
2288
2289   FINISH;
2290 }
2291
2292 static void *vl_api_pg_enable_disable_t_print
2293   (vl_api_pg_enable_disable_t * mp, void *handle)
2294 {
2295   u8 *s;
2296
2297   s = format (0, "SCRIPT: pg_enable_disable ");
2298   if (ntohl (mp->stream_name_length) > 0)
2299     s = format (s, "stream %s", mp->stream_name);
2300   if (!mp->is_enabled)
2301     s = format (s, "disable");
2302
2303   FINISH;
2304 }
2305
2306 static void *vl_api_ip_source_and_port_range_check_add_del_t_print
2307   (vl_api_ip_source_and_port_range_check_add_del_t * mp, void *handle)
2308 {
2309   u8 *s;
2310   int i;
2311
2312   s = format (0, "SCRIPT: ip_source_and_port_range_check_add_del ");
2313   if (mp->is_ipv6)
2314     s = format (s, "%U/%d ", format_ip6_address, mp->address,
2315                 mp->mask_length);
2316   else
2317     s = format (s, "%U/%d ", format_ip4_address, mp->address,
2318                 mp->mask_length);
2319
2320   for (i = 0; i < mp->number_of_ranges; i++)
2321     {
2322       s = format (s, "range %d - %d ", mp->low_ports[i], mp->high_ports[i]);
2323     }
2324
2325   s = format (s, "vrf %d ", ntohl (mp->vrf_id));
2326
2327   if (mp->is_add == 0)
2328     s = format (s, "del ");
2329
2330   FINISH;
2331 }
2332
2333 static void *vl_api_ip_source_and_port_range_check_interface_add_del_t_print
2334   (vl_api_ip_source_and_port_range_check_interface_add_del_t * mp,
2335    void *handle)
2336 {
2337   u8 *s;
2338
2339   s = format (0, "SCRIPT: ip_source_and_port_range_check_interface_add_del ");
2340
2341   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
2342
2343   if (mp->tcp_out_vrf_id != ~0)
2344     s = format (s, "tcp-out-vrf %d ", ntohl (mp->tcp_out_vrf_id));
2345
2346   if (mp->udp_out_vrf_id != ~0)
2347     s = format (s, "udp-out-vrf %d ", ntohl (mp->udp_out_vrf_id));
2348
2349   if (mp->tcp_in_vrf_id != ~0)
2350     s = format (s, "tcp-in-vrf %d ", ntohl (mp->tcp_in_vrf_id));
2351
2352   if (mp->udp_in_vrf_id != ~0)
2353     s = format (s, "udp-in-vrf %d ", ntohl (mp->udp_in_vrf_id));
2354
2355   if (mp->is_add == 0)
2356     s = format (s, "del ");
2357
2358   FINISH;
2359 }
2360
2361 static void *vl_api_lisp_enable_disable_t_print
2362   (vl_api_lisp_enable_disable_t * mp, void *handle)
2363 {
2364   u8 *s;
2365
2366   s = format (0, "SCRIPT: lisp_enable_disable %s",
2367               mp->is_en ? "enable" : "disable");
2368
2369   FINISH;
2370 }
2371
2372 static void *vl_api_lisp_gpe_add_del_iface_t_print
2373   (vl_api_lisp_gpe_add_del_iface_t * mp, void *handle)
2374 {
2375   u8 *s;
2376
2377   s = format (0, "SCRIPT: lisp_gpe_add_del_iface ");
2378
2379   s = format (s, "%s ", mp->is_add ? "up" : "down");
2380   s = format (s, "vni %d ", mp->vni);
2381   s = format (s, "%s %d ", mp->is_l2 ? "bd_id" : "table_id", mp->dp_table);
2382
2383   FINISH;
2384 }
2385
2386 static void *vl_api_lisp_pitr_set_locator_set_t_print
2387   (vl_api_lisp_pitr_set_locator_set_t * mp, void *handle)
2388 {
2389   u8 *s;
2390
2391   s = format (0, "SCRIPT: lisp_pitr_set_locator_set ");
2392
2393   if (mp->is_add)
2394     s = format (s, "locator-set %s ", mp->ls_name);
2395   else
2396     s = format (s, "del");
2397
2398   FINISH;
2399 }
2400
2401 static u8 *
2402 format_lisp_flat_eid (u8 * s, va_list * args)
2403 {
2404   u32 type = va_arg (*args, u32);
2405   u8 *eid = va_arg (*args, u8 *);
2406   u32 eid_len = va_arg (*args, u32);
2407
2408   switch (type)
2409     {
2410     case 0:
2411       return format (s, "%U/%d", format_ip4_address, eid, eid_len);
2412     case 1:
2413       return format (s, "%U/%d", format_ip6_address, eid, eid_len);
2414     case 3:
2415       return format (s, "%U", format_ethernet_address, eid);
2416     }
2417   return 0;
2418 }
2419
2420 /** Used for transferring locators via VPP API */
2421 typedef CLIB_PACKED (struct
2422                      {
2423                      u8 is_ip4;
2424              /**< is locator an IPv4 address */
2425                      u8 priority;
2426                /**< locator priority */
2427                      u8 weight;
2428                /**< locator weight */
2429                      u8 addr[16];
2430                /**< IPv4/IPv6 address */
2431                      }) rloc_t;
2432
2433 static u8 *
2434 format_rloc (u8 * s, va_list * args)
2435 {
2436   rloc_t *rloc = va_arg (*args, rloc_t *);
2437
2438   if (rloc->is_ip4)
2439     s = format (s, "%U ", format_ip4_address, rloc->addr);
2440   else
2441     s = format (s, "%U ", format_ip6_address, rloc->addr);
2442
2443   s = format (s, "p %d w %d", rloc->priority, rloc->weight);
2444
2445   return s;
2446 }
2447
2448 static void *vl_api_lisp_add_del_remote_mapping_t_print
2449   (vl_api_lisp_add_del_remote_mapping_t * mp, void *handle)
2450 {
2451   u8 *s;
2452   u32 i, rloc_num = 0;
2453
2454   s = format (0, "SCRIPT: lisp_add_del_remote_mapping ");
2455
2456   if (mp->del_all)
2457     s = format (s, "del-all ");
2458
2459   s = format (s, "%s ", mp->is_add ? "add" : "del");
2460   s = format (s, "vni %d ", clib_net_to_host_u32 (mp->vni));
2461
2462   s = format (s, "eid %U ", format_lisp_flat_eid,
2463               mp->eid_type, mp->eid, mp->eid_len);
2464
2465   if (mp->is_src_dst)
2466     {
2467       s = format (s, "seid %U ", format_lisp_flat_eid,
2468                   mp->eid_type, mp->seid, mp->seid_len);
2469     }
2470
2471   rloc_num = clib_net_to_host_u32 (mp->rloc_num);
2472
2473   if (0 == rloc_num)
2474     s = format (s, "action %d", mp->action);
2475   else
2476     {
2477       rloc_t *rloc = (rloc_t *) mp->rlocs;
2478       for (i = 0; i < rloc_num; i++)
2479         s = format (s, "%U ", format_rloc, &rloc[i]);
2480     }
2481
2482   FINISH;
2483 }
2484
2485 static void *vl_api_lisp_add_del_adjacency_t_print
2486   (vl_api_lisp_add_del_adjacency_t * mp, void *handle)
2487 {
2488   u8 *s;
2489
2490   s = format (0, "SCRIPT: lisp_add_del_adjacency ");
2491
2492   s = format (s, "%s ", mp->is_add ? "add" : "del");
2493   s = format (s, "vni %d ", clib_net_to_host_u32 (mp->vni));
2494   s = format (s, "reid %U leid %U ",
2495               format_lisp_flat_eid, mp->eid_type, mp->reid, mp->reid_len,
2496               format_lisp_flat_eid, mp->eid_type, mp->leid, mp->leid_len);
2497
2498   FINISH;
2499 }
2500
2501 static void *vl_api_lisp_add_del_map_request_itr_rlocs_t_print
2502   (vl_api_lisp_add_del_map_request_itr_rlocs_t * mp, void *handle)
2503 {
2504   u8 *s;
2505
2506   s = format (0, "SCRIPT: lisp_add_del_map_request_itr_rlocs ");
2507
2508   if (mp->is_add)
2509     s = format (s, "%s", mp->locator_set_name);
2510   else
2511     s = format (s, "del");
2512
2513   FINISH;
2514 }
2515
2516 static void *vl_api_lisp_eid_table_add_del_map_t_print
2517   (vl_api_lisp_eid_table_add_del_map_t * mp, void *handle)
2518 {
2519   u8 *s;
2520
2521   s = format (0, "SCRIPT: lisp_eid_table_add_del_map ");
2522
2523   if (!mp->is_add)
2524     s = format (s, "del ");
2525
2526   s = format (s, "vni %d ", clib_net_to_host_u32 (mp->vni));
2527   s = format (s, "%s %d ",
2528               mp->is_l2 ? "bd_index" : "vrf",
2529               clib_net_to_host_u32 (mp->dp_table));
2530   FINISH;
2531 }
2532
2533 static void *vl_api_lisp_add_del_local_eid_t_print
2534   (vl_api_lisp_add_del_local_eid_t * mp, void *handle)
2535 {
2536   u8 *s;
2537
2538   s = format (0, "SCRIPT: lisp_add_del_local_eid ");
2539
2540   if (!mp->is_add)
2541     s = format (s, "del ");
2542
2543   s = format (s, "vni %d ", clib_net_to_host_u32 (mp->vni));
2544   s = format (s, "eid %U ", format_lisp_flat_eid, mp->eid_type, mp->eid,
2545               mp->prefix_len);
2546   s = format (s, "locator-set %s ", mp->locator_set_name);
2547   FINISH;
2548 }
2549
2550 static void *vl_api_lisp_gpe_add_del_fwd_entry_t_print
2551   (vl_api_lisp_gpe_add_del_fwd_entry_t * mp, void *handle)
2552 {
2553   u8 *s;
2554
2555   s = format (0, "SCRIPT: lisp_gpe_add_del_fwd_entry TODO");
2556
2557   FINISH;
2558 }
2559
2560 static void *vl_api_lisp_add_del_map_resolver_t_print
2561   (vl_api_lisp_add_del_map_resolver_t * mp, void *handle)
2562 {
2563   u8 *s;
2564
2565   s = format (0, "SCRIPT: lisp_add_del_map_resolver ");
2566
2567   if (!mp->is_add)
2568     s = format (s, "del ");
2569
2570   if (mp->is_ipv6)
2571     s = format (s, "%U ", format_ip6_address, mp->ip_address);
2572   else
2573     s = format (s, "%U ", format_ip4_address, mp->ip_address);
2574
2575   FINISH;
2576 }
2577
2578 static void *vl_api_lisp_gpe_enable_disable_t_print
2579   (vl_api_lisp_gpe_enable_disable_t * mp, void *handle)
2580 {
2581   u8 *s;
2582
2583   s = format (0, "SCRIPT: lisp_gpe_enable_disable ");
2584
2585   s = format (s, "%s ", mp->is_en ? "enable" : "disable");
2586
2587   FINISH;
2588 }
2589
2590 typedef CLIB_PACKED (struct
2591                      {
2592                      u32 sw_if_index;
2593                    /**< locator sw_if_index */
2594                      u8 priority;
2595                /**< locator priority */
2596                      u8 weight;
2597                /**< locator weight */
2598                      }) ls_locator_t;
2599
2600 static u8 *
2601 format_locator (u8 * s, va_list * args)
2602 {
2603   ls_locator_t *l = va_arg (*args, ls_locator_t *);
2604
2605   return format (s, "sw_if_index %d p %d w %d",
2606                  l->sw_if_index, l->priority, l->weight);
2607 }
2608
2609 static void *vl_api_lisp_add_del_locator_set_t_print
2610   (vl_api_lisp_add_del_locator_set_t * mp, void *handle)
2611 {
2612   u8 *s;
2613   u32 loc_num = 0, i;
2614   ls_locator_t *locs;
2615
2616   s = format (0, "SCRIPT: lisp_add_del_locator_set ");
2617
2618   if (!mp->is_add)
2619     s = format (s, "del ");
2620
2621   s = format (s, "locator-set %s ", mp->locator_set_name);
2622
2623   loc_num = clib_net_to_host_u32 (mp->locator_num);
2624   locs = (ls_locator_t *) mp->locators;
2625
2626   for (i = 0; i < loc_num; i++)
2627     s = format (s, "%U ", format_locator, &locs[i]);
2628
2629   FINISH;
2630 }
2631
2632 static void *vl_api_lisp_add_del_locator_t_print
2633   (vl_api_lisp_add_del_locator_t * mp, void *handle)
2634 {
2635   u8 *s;
2636
2637   s = format (0, "SCRIPT: lisp_add_del_locator ");
2638
2639   if (!mp->is_add)
2640     s = format (s, "del ");
2641
2642   s = format (s, "locator-set %s ", mp->locator_set_name);
2643   s = format (s, "sw_if_index %d ", mp->sw_if_index);
2644   s = format (s, "p %d w %d ", mp->priority, mp->weight);
2645
2646   FINISH;
2647 }
2648
2649 static void *vl_api_lisp_locator_set_dump_t_print
2650   (vl_api_lisp_locator_set_dump_t * mp, void *handle)
2651 {
2652   u8 *s;
2653
2654   s = format (0, "SCRIPT: lisp_locator_set_dump ");
2655   if (mp->filter == 1)
2656     s = format (s, "local");
2657   else if (mp->filter == 2)
2658     s = format (s, "remote");
2659
2660   FINISH;
2661 }
2662
2663 static void *vl_api_lisp_locator_dump_t_print
2664   (vl_api_lisp_locator_dump_t * mp, void *handle)
2665 {
2666   u8 *s;
2667
2668   s = format (0, "SCRIPT: lisp_locator_dump ");
2669   if (mp->is_index_set)
2670     s = format (s, "ls_index %d", clib_net_to_host_u32 (mp->ls_index));
2671   else
2672     s = format (s, "ls_name %s", mp->ls_name);
2673
2674   FINISH;
2675 }
2676
2677 static void *vl_api_lisp_map_request_mode_t_print
2678   (vl_api_lisp_map_request_mode_t * mp, void *handle)
2679 {
2680   u8 *s;
2681
2682   s = format (0, "SCRIPT: lisp_map_request_mode ");
2683
2684   switch (mp->mode)
2685     {
2686     case 0:
2687       s = format (s, "dst-only");
2688       break;
2689     case 1:
2690       s = format (s, "src-dst");
2691     default:
2692       break;
2693     }
2694
2695   FINISH;
2696 }
2697
2698 static void *vl_api_lisp_eid_table_dump_t_print
2699   (vl_api_lisp_eid_table_dump_t * mp, void *handle)
2700 {
2701   u8 *s;
2702
2703   s = format (0, "SCRIPT: lisp_eid_table_dump ");
2704
2705   if (mp->eid_set)
2706     {
2707       s = format (s, "vni %d ", clib_net_to_host_u32 (mp->vni));
2708       s = format (s, "eid %U ", format_lisp_flat_eid, mp->eid_type,
2709                   mp->eid, mp->prefix_length);
2710       switch (mp->filter)
2711         {
2712         case 1:
2713           s = format (s, "local ");
2714           break;
2715         case 2:
2716           s = format (s, "remote ");
2717           break;
2718         }
2719     }
2720
2721   FINISH;
2722 }
2723
2724 static void *vl_api_lisp_adjacencies_get_t_print
2725   (vl_api_lisp_adjacencies_get_t * mp, void *handle)
2726 {
2727   u8 *s;
2728
2729   s = format (0, "SCRIPT: lisp_adjacencies_get ");
2730   s = format (s, "vni %d", clib_net_to_host_u32 (mp->vni));
2731
2732   FINISH;
2733 }
2734
2735 static void *vl_api_lisp_eid_table_map_dump_t_print
2736   (vl_api_lisp_eid_table_map_dump_t * mp, void *handle)
2737 {
2738   u8 *s;
2739
2740   s = format (0, "SCRIPT: lisp_eid_table_map_dump ");
2741
2742   if (mp->is_l2)
2743     s = format (s, "l2");
2744   else
2745     s = format (s, "l3");
2746
2747   FINISH;
2748 }
2749
2750 static void *vl_api_ipsec_gre_add_del_tunnel_t_print
2751   (vl_api_ipsec_gre_add_del_tunnel_t * mp, void *handle)
2752 {
2753   u8 *s;
2754
2755   s = format (0, "SCRIPT: ipsec_gre_add_del_tunnel ");
2756
2757   s = format (s, "dst %U ", format_ip4_address,
2758               (ip4_address_t *) & (mp->dst_address));
2759
2760   s = format (s, "src %U ", format_ip4_address,
2761               (ip4_address_t *) & (mp->src_address));
2762
2763   s = format (s, "local_sa %d ", ntohl (mp->local_sa_id));
2764
2765   s = format (s, "remote_sa %d ", ntohl (mp->remote_sa_id));
2766
2767   if (mp->is_add == 0)
2768     s = format (s, "del ");
2769
2770   FINISH;
2771 }
2772
2773 static void *vl_api_ipsec_gre_tunnel_dump_t_print
2774   (vl_api_ipsec_gre_tunnel_dump_t * mp, void *handle)
2775 {
2776   u8 *s;
2777
2778   s = format (0, "SCRIPT: ipsec_gre_tunnel_dump ");
2779
2780   if (mp->sw_if_index != ~0)
2781     s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
2782
2783   FINISH;
2784 }
2785
2786 static void *vl_api_l2_interface_pbb_tag_rewrite_t_print
2787   (vl_api_l2_interface_pbb_tag_rewrite_t * mp, void *handle)
2788 {
2789   u8 *s;
2790   u32 vtr_op = ntohl (mp->vtr_op);
2791
2792   s = format (0, "SCRIPT: l2_interface_pbb_tag_rewrite ");
2793
2794   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
2795   s = format (s, "vtr_op %d ", vtr_op);
2796   if (vtr_op != L2_VTR_DISABLED && vtr_op != L2_VTR_POP_2)
2797     {
2798       if (vtr_op == L2_VTR_TRANSLATE_2_2)
2799         s = format (s, "%d ", ntohs (mp->outer_tag));
2800       s = format (s, "dmac %U ", format_ethernet_address, &mp->b_dmac);
2801       s = format (s, "smac %U ", format_ethernet_address, &mp->b_smac);
2802       s = format (s, "sid %d ", ntohl (mp->i_sid));
2803       s = format (s, "vlanid %d ", ntohs (mp->b_vlanid));
2804     }
2805
2806   FINISH;
2807 }
2808
2809 static void *vl_api_flow_classify_set_interface_t_print
2810   (vl_api_flow_classify_set_interface_t * mp, void *handle)
2811 {
2812   u8 *s;
2813
2814   s = format (0, "SCRIPT: flow_classify_set_interface ");
2815   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
2816   if (mp->ip4_table_index != ~0)
2817     s = format (s, "ip4-table %d ", ntohl (mp->ip4_table_index));
2818   if (mp->ip6_table_index != ~0)
2819     s = format (s, "ip6-table %d ", ntohl (mp->ip6_table_index));
2820   if (mp->is_add == 0)
2821     s = format (s, "del ");
2822
2823   FINISH;
2824 }
2825
2826 static void *
2827 vl_api_punt_t_print (vl_api_punt_t * mp, void *handle)
2828 {
2829   u8 *s;
2830
2831   s = format (0, "SCRIPT: punt ");
2832
2833   if (mp->ipv != (u8) ~ 0)
2834     s = format (s, "ip %d ", mp->ipv);
2835
2836   s = format (s, "protocol %d ", mp->l4_protocol);
2837
2838   if (mp->l4_port != (u16) ~ 0)
2839     s = format (s, "port %d ", ntohs (mp->l4_port));
2840
2841   if (!mp->is_add)
2842     s = format (s, "del ");
2843
2844   FINISH;
2845 }
2846
2847 static void *vl_api_flow_classify_dump_t_print
2848   (vl_api_flow_classify_dump_t * mp, void *handle)
2849 {
2850   u8 *s;
2851
2852   s = format (0, "SCRIPT: flow_classify_dump ");
2853   switch (mp->type)
2854     {
2855     case FLOW_CLASSIFY_TABLE_IP4:
2856       s = format (s, "type ip4 ");
2857       break;
2858     case FLOW_CLASSIFY_TABLE_IP6:
2859       s = format (s, "type ip6 ");
2860       break;
2861     default:
2862       break;
2863     }
2864
2865   FINISH;
2866 }
2867
2868 static void *vl_api_get_first_msg_id_t_print
2869   (vl_api_get_first_msg_id_t * mp, void *handle)
2870 {
2871   u8 *s;
2872
2873   s = format (0, "SCRIPT: get_first_msg_id %s ", mp->name);
2874
2875   FINISH;
2876 }
2877
2878 static void *vl_api_ioam_enable_t_print
2879   (vl_api_ioam_enable_t * mp, void *handle)
2880 {
2881   u8 *s;
2882
2883   s = format (0, "SCRIPT: ioam_enable ");
2884
2885   if (mp->trace_enable)
2886     s = format (s, "trace enabled");
2887
2888   if (mp->pot_enable)
2889     s = format (s, "POT enabled");
2890
2891   if (mp->seqno)
2892     s = format (s, "Seqno enabled");
2893
2894   if (mp->analyse)
2895     s = format (s, "Analyse enabled");
2896
2897   FINISH;
2898 }
2899
2900 static void *vl_api_ioam_disable_t_print
2901   (vl_api_ioam_disable_t * mp, void *handle)
2902 {
2903   u8 *s;
2904
2905   s = format (0, "SCRIPT: ioam_disable ");
2906   s = format (s, "trace disabled");
2907   s = format (s, "POT disabled");
2908   s = format (s, "Seqno disabled");
2909   s = format (s, "Analyse disabled");
2910
2911   FINISH;
2912 }
2913
2914 static void *vl_api_feature_enable_disable_t_print
2915   (vl_api_feature_enable_disable_t * mp, void *handle)
2916 {
2917   u8 *s;
2918
2919   s = format (0, "SCRIPT: feature_enable_disable ");
2920   s = format (s, "arc_name %s ", mp->arc_name);
2921   s = format (s, "feature_name %s ", mp->feature_name);
2922   s = format (s, "sw_if_index %d ", ntohl (mp->sw_if_index));
2923   if (!mp->enable)
2924     s = format (s, "disable");
2925
2926   FINISH;
2927 }
2928
2929 #define foreach_custom_print_no_arg_function                            \
2930 _(lisp_eid_table_vni_dump)                                              \
2931 _(lisp_map_resolver_dump)                                               \
2932 _(show_lisp_map_request_mode)                                           \
2933 _(lisp_gpe_tunnel_dump)
2934
2935 #define _(f)                                                            \
2936 static void * vl_api_ ## f ## _t_print                                  \
2937   (vl_api_ ## f ## _t * mp, void * handle)                              \
2938 {                                                                       \
2939   u8 * s;                                                               \
2940   s = format (0, "SCRIPT: " #f );                                       \
2941   FINISH;                                                               \
2942 }
2943 foreach_custom_print_no_arg_function
2944 #undef _
2945 #define foreach_custom_print_function                                   \
2946 _(CREATE_LOOPBACK, create_loopback)                                     \
2947 _(SW_INTERFACE_SET_FLAGS, sw_interface_set_flags)                       \
2948 _(SW_INTERFACE_ADD_DEL_ADDRESS, sw_interface_add_del_address)           \
2949 _(SW_INTERFACE_SET_TABLE, sw_interface_set_table)                       \
2950 _(SW_INTERFACE_SET_MPLS_ENABLE, sw_interface_set_mpls_enable)           \
2951 _(SW_INTERFACE_SET_VPATH, sw_interface_set_vpath)                       \
2952 _(SW_INTERFACE_SET_VXLAN_BYPASS, sw_interface_set_vxlan_bypass)         \
2953 _(TAP_CONNECT, tap_connect)                                             \
2954 _(TAP_MODIFY, tap_modify)                                               \
2955 _(TAP_DELETE, tap_delete)                                               \
2956 _(SW_INTERFACE_TAP_DUMP, sw_interface_tap_dump)                         \
2957 _(IP_ADD_DEL_ROUTE, ip_add_del_route)                                   \
2958 _(PROXY_ARP_ADD_DEL, proxy_arp_add_del)                                 \
2959 _(PROXY_ARP_INTFC_ENABLE_DISABLE, proxy_arp_intfc_enable_disable)       \
2960 _(MPLS_ADD_DEL_ENCAP, mpls_add_del_encap)                               \
2961 _(MPLS_ETHERNET_ADD_DEL_TUNNEL, mpls_ethernet_add_del_tunnel)           \
2962 _(MPLS_ETHERNET_ADD_DEL_TUNNEL_2, mpls_ethernet_add_del_tunnel_2)       \
2963 _(SW_INTERFACE_SET_UNNUMBERED, sw_interface_set_unnumbered)             \
2964 _(IP_NEIGHBOR_ADD_DEL, ip_neighbor_add_del)                             \
2965 _(RESET_VRF, reset_vrf)                                                 \
2966 _(CREATE_VLAN_SUBIF, create_vlan_subif)                                 \
2967 _(CREATE_SUBIF, create_subif)                                           \
2968 _(OAM_ADD_DEL, oam_add_del)                                             \
2969 _(RESET_FIB, reset_fib)                                                 \
2970 _(DHCP_PROXY_CONFIG, dhcp_proxy_config)                                 \
2971 _(DHCP_PROXY_SET_VSS, dhcp_proxy_set_vss)                               \
2972 _(SET_IP_FLOW_HASH, set_ip_flow_hash)                                   \
2973 _(SW_INTERFACE_IP6_SET_LINK_LOCAL_ADDRESS,                              \
2974   sw_interface_ip6_set_link_local_address)                              \
2975 _(SW_INTERFACE_IP6ND_RA_PREFIX, sw_interface_ip6nd_ra_prefix)           \
2976 _(SW_INTERFACE_IP6ND_RA_CONFIG, sw_interface_ip6nd_ra_config)           \
2977 _(SET_ARP_NEIGHBOR_LIMIT, set_arp_neighbor_limit)                       \
2978 _(L2_PATCH_ADD_DEL, l2_patch_add_del)                                   \
2979 _(SR_TUNNEL_ADD_DEL, sr_tunnel_add_del)                                 \
2980 _(SR_POLICY_ADD_DEL, sr_policy_add_del)                                 \
2981 _(SR_MULTICAST_MAP_ADD_DEL, sr_multicast_map_add_del)                   \
2982 _(SW_INTERFACE_SET_L2_XCONNECT, sw_interface_set_l2_xconnect)           \
2983 _(L2FIB_ADD_DEL, l2fib_add_del)                                         \
2984 _(L2_FLAGS, l2_flags)                                                   \
2985 _(BRIDGE_FLAGS, bridge_flags)                                           \
2986 _(CLASSIFY_ADD_DEL_TABLE, classify_add_del_table)                       \
2987 _(CLASSIFY_ADD_DEL_SESSION, classify_add_del_session)                   \
2988 _(SW_INTERFACE_SET_L2_BRIDGE, sw_interface_set_l2_bridge)               \
2989 _(SW_INTERFACE_SET_DPDK_HQOS_PIPE, sw_interface_set_dpdk_hqos_pipe)     \
2990 _(SW_INTERFACE_SET_DPDK_HQOS_SUBPORT, sw_interface_set_dpdk_hqos_subport)\
2991 _(SW_INTERFACE_SET_DPDK_HQOS_TCTBL, sw_interface_set_dpdk_hqos_tctbl)   \
2992 _(BRIDGE_DOMAIN_ADD_DEL, bridge_domain_add_del)                         \
2993 _(BRIDGE_DOMAIN_DUMP, bridge_domain_dump)                               \
2994 _(CLASSIFY_SET_INTERFACE_IP_TABLE, classify_set_interface_ip_table)     \
2995 _(CLASSIFY_SET_INTERFACE_L2_TABLES, classify_set_interface_l2_tables)   \
2996 _(ADD_NODE_NEXT, add_node_next)                                         \
2997 _(DHCP_PROXY_CONFIG_2, dhcp_proxy_config_2)                             \
2998 _(DHCP_CLIENT_CONFIG, dhcp_client_config)                               \
2999 _(L2TPV3_CREATE_TUNNEL, l2tpv3_create_tunnel)                           \
3000 _(L2TPV3_SET_TUNNEL_COOKIES, l2tpv3_set_tunnel_cookies)                 \
3001 _(L2TPV3_INTERFACE_ENABLE_DISABLE, l2tpv3_interface_enable_disable)     \
3002 _(L2TPV3_SET_LOOKUP_KEY, l2tpv3_set_lookup_key)                         \
3003 _(SW_IF_L2TPV3_TUNNEL_DUMP, sw_if_l2tpv3_tunnel_dump)                   \
3004 _(VXLAN_ADD_DEL_TUNNEL, vxlan_add_del_tunnel)                           \
3005 _(VXLAN_TUNNEL_DUMP, vxlan_tunnel_dump)                                 \
3006 _(GRE_ADD_DEL_TUNNEL, gre_add_del_tunnel)                               \
3007 _(GRE_TUNNEL_DUMP, gre_tunnel_dump)                                     \
3008 _(L2_FIB_CLEAR_TABLE, l2_fib_clear_table)                               \
3009 _(L2_INTERFACE_EFP_FILTER, l2_interface_efp_filter)                     \
3010 _(L2_INTERFACE_VLAN_TAG_REWRITE, l2_interface_vlan_tag_rewrite)         \
3011 _(CREATE_VHOST_USER_IF, create_vhost_user_if)                           \
3012 _(MODIFY_VHOST_USER_IF, modify_vhost_user_if)                           \
3013 _(DELETE_VHOST_USER_IF, delete_vhost_user_if)                           \
3014 _(SW_INTERFACE_DUMP, sw_interface_dump)                                 \
3015 _(CONTROL_PING, control_ping)                                           \
3016 _(WANT_INTERFACE_EVENTS, want_interface_events)                         \
3017 _(CLI_REQUEST, cli_request)                                             \
3018 _(CLI_INBAND, cli_inband)                                               \
3019 _(MEMCLNT_CREATE, memclnt_create)                                       \
3020 _(SW_INTERFACE_VHOST_USER_DUMP, sw_interface_vhost_user_dump)           \
3021 _(SHOW_VERSION, show_version)                                           \
3022 _(L2_FIB_TABLE_DUMP, l2_fib_table_dump)                                 \
3023 _(VXLAN_GPE_ADD_DEL_TUNNEL, vxlan_gpe_add_del_tunnel)                   \
3024 _(VXLAN_GPE_TUNNEL_DUMP, vxlan_gpe_tunnel_dump)                         \
3025 _(INTERFACE_NAME_RENUMBER, interface_name_renumber)                     \
3026 _(WANT_IP4_ARP_EVENTS, want_ip4_arp_events)                             \
3027 _(WANT_IP6_ND_EVENTS, want_ip6_nd_events)                               \
3028 _(INPUT_ACL_SET_INTERFACE, input_acl_set_interface)                     \
3029 _(IP_ADDRESS_DUMP, ip_address_dump)                                     \
3030 _(IP_DUMP, ip_dump)                                                     \
3031 _(DELETE_LOOPBACK, delete_loopback)                                     \
3032 _(BD_IP_MAC_ADD_DEL, bd_ip_mac_add_del)                                 \
3033 _(COP_INTERFACE_ENABLE_DISABLE, cop_interface_enable_disable)           \
3034 _(COP_WHITELIST_ENABLE_DISABLE, cop_whitelist_enable_disable)           \
3035 _(AF_PACKET_CREATE, af_packet_create)                                   \
3036 _(AF_PACKET_DELETE, af_packet_delete)                                   \
3037 _(SW_INTERFACE_CLEAR_STATS, sw_interface_clear_stats)                   \
3038 _(MPLS_ETH_TUNNEL_DUMP, mpls_eth_tunnel_dump)                           \
3039 _(MPLS_FIB_ENCAP_DUMP, mpls_fib_encap_dump)                             \
3040 _(MPLS_FIB_DUMP, mpls_fib_dump)                                         \
3041 _(CLASSIFY_TABLE_IDS,classify_table_ids)                                \
3042 _(CLASSIFY_TABLE_BY_INTERFACE, classify_table_by_interface)             \
3043 _(CLASSIFY_TABLE_INFO,classify_table_info)                              \
3044 _(CLASSIFY_SESSION_DUMP,classify_session_dump)                          \
3045 _(SET_IPFIX_EXPORTER, set_ipfix_exporter)                               \
3046 _(IPFIX_EXPORTER_DUMP, ipfix_exporter_dump)                             \
3047 _(SET_IPFIX_CLASSIFY_STREAM, set_ipfix_classify_stream)                 \
3048 _(IPFIX_CLASSIFY_STREAM_DUMP, ipfix_classify_stream_dump)               \
3049 _(IPFIX_CLASSIFY_TABLE_ADD_DEL, ipfix_classify_table_add_del)           \
3050 _(IPFIX_CLASSIFY_TABLE_DUMP, ipfix_classify_table_dump)                 \
3051 _(SW_INTERFACE_SPAN_ENABLE_DISABLE, sw_interface_span_enable_disable)   \
3052 _(SW_INTERFACE_SPAN_DUMP, sw_interface_span_dump)                       \
3053 _(GET_NEXT_INDEX, get_next_index)                                       \
3054 _(PG_CREATE_INTERFACE,pg_create_interface)                              \
3055 _(PG_CAPTURE, pg_capture)                                               \
3056 _(PG_ENABLE_DISABLE, pg_enable_disable)                                 \
3057 _(POLICER_ADD_DEL, policer_add_del)                                     \
3058 _(POLICER_DUMP, policer_dump)                                           \
3059 _(POLICER_CLASSIFY_SET_INTERFACE, policer_classify_set_interface)       \
3060 _(POLICER_CLASSIFY_DUMP, policer_classify_dump)                         \
3061 _(IP_SOURCE_AND_PORT_RANGE_CHECK_ADD_DEL,                               \
3062   ip_source_and_port_range_check_add_del)                               \
3063 _(IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL,                     \
3064   ip_source_and_port_range_check_interface_add_del)                     \
3065 _(LISP_ENABLE_DISABLE, lisp_enable_disable)                             \
3066 _(LISP_GPE_ENABLE_DISABLE, lisp_gpe_enable_disable)                     \
3067 _(LISP_GPE_ADD_DEL_IFACE, lisp_gpe_add_del_iface)                       \
3068 _(LISP_PITR_SET_LOCATOR_SET, lisp_pitr_set_locator_set)                 \
3069 _(LISP_MAP_REQUEST_MODE, lisp_map_request_mode)                         \
3070 _(SHOW_LISP_MAP_REQUEST_MODE, show_lisp_map_request_mode)               \
3071 _(LISP_ADD_DEL_REMOTE_MAPPING, lisp_add_del_remote_mapping)             \
3072 _(LISP_ADD_DEL_ADJACENCY, lisp_add_del_adjacency)                       \
3073 _(LISP_ADD_DEL_MAP_REQUEST_ITR_RLOCS,                                   \
3074   lisp_add_del_map_request_itr_rlocs)                                   \
3075 _(LISP_EID_TABLE_ADD_DEL_MAP, lisp_eid_table_add_del_map)               \
3076 _(LISP_ADD_DEL_LOCAL_EID, lisp_add_del_local_eid)                       \
3077 _(LISP_GPE_ADD_DEL_FWD_ENTRY, lisp_gpe_add_del_fwd_entry)               \
3078 _(LISP_ADD_DEL_LOCATOR_SET, lisp_add_del_locator_set)                   \
3079 _(LISP_ADD_DEL_MAP_RESOLVER, lisp_add_del_map_resolver)                 \
3080 _(LISP_ADD_DEL_LOCATOR, lisp_add_del_locator)                           \
3081 _(LISP_EID_TABLE_DUMP, lisp_eid_table_dump)                             \
3082 _(LISP_EID_TABLE_MAP_DUMP, lisp_eid_table_map_dump)                     \
3083 _(LISP_EID_TABLE_VNI_DUMP, lisp_eid_table_vni_dump)                     \
3084 _(LISP_GPE_TUNNEL_DUMP, lisp_gpe_tunnel_dump)                           \
3085 _(LISP_MAP_RESOLVER_DUMP, lisp_map_resolver_dump)                       \
3086 _(LISP_LOCATOR_SET_DUMP, lisp_locator_set_dump)                         \
3087 _(LISP_LOCATOR_DUMP, lisp_locator_dump)                                 \
3088 _(LISP_ADJACENCIES_GET, lisp_adjacencies_get)                           \
3089 _(IPSEC_GRE_ADD_DEL_TUNNEL, ipsec_gre_add_del_tunnel)                   \
3090 _(IPSEC_GRE_TUNNEL_DUMP, ipsec_gre_tunnel_dump)                         \
3091 _(DELETE_SUBIF, delete_subif)                                           \
3092 _(L2_INTERFACE_PBB_TAG_REWRITE, l2_interface_pbb_tag_rewrite)           \
3093 _(PUNT, punt)                                                           \
3094 _(FLOW_CLASSIFY_SET_INTERFACE, flow_classify_set_interface)             \
3095 _(FLOW_CLASSIFY_DUMP, flow_classify_dump)                               \
3096 _(GET_FIRST_MSG_ID, get_first_msg_id)                                   \
3097 _(IOAM_ENABLE, ioam_enable)                                             \
3098 _(IOAM_DISABLE, ioam_disable)                                           \
3099 _(IP_FIB_DUMP, ip_fib_dump)                                             \
3100 _(IP6_FIB_DUMP, ip6_fib_dump)                                           \
3101 _(FEATURE_ENABLE_DISABLE, feature_enable_disable)
3102   void
3103 vl_msg_api_custom_dump_configure (api_main_t * am)
3104 {
3105 #define _(n,f) am->msg_print_handlers[VL_API_##n]       \
3106     = (void *) vl_api_##f##_t_print;
3107   foreach_custom_print_function;
3108 #undef _
3109 }
3110
3111 /*
3112  * fd.io coding-style-patch-verification: ON
3113  *
3114  * Local Variables:
3115  * eval: (c-set-style "gnu")
3116  * End:
3117  */