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