VPP-226 - adding UDP TCP to port-range
[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 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-gre/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 <vlib/vlib.h>
34 #include <vlib/unix/unix.h>
35 #include <vlibapi/api.h>
36 #include <vlibmemory/api.h>
37
38 #include <stats/stats.h>
39 #include <oam/oam.h>
40
41 #include <vnet/ethernet/ethernet.h>
42 #include <vnet/l2/l2_vtr.h>
43
44 #include <vpp-api/vpe_msg_enum.h>
45
46 #define vl_typedefs             /* define message structures */
47 #include <vpp-api/vpe_all_api_h.h>
48 #undef vl_typedefs
49
50 #define vl_endianfun             /* define message structures */
51 #include <vpp-api/vpe_all_api_h.h>
52 #undef vl_endianfun
53
54 #define vl_print(handle, ...) vlib_cli_output (handle, __VA_ARGS__)
55
56 #define FINISH                                  \
57     vec_add1 (s, 0);                            \
58     vl_print (handle, (char *)s);               \
59     vec_free (s);                               \
60     return handle;
61
62
63 static void *vl_api_create_loopback_t_print
64 (vl_api_create_loopback_t *mp, void *handle)
65 {
66    u8 * s;
67
68    s = format (0, "SCRIPT: create_loopback ");
69    s = format (s, "mac %U ", format_ethernet_address, &mp->mac_address);
70
71    FINISH;
72 }
73
74 static void *vl_api_delete_loopback_t_print
75 (vl_api_delete_loopback_t *mp, void *handle)
76 {
77    u8 * s;
78
79    s = format (0, "SCRIPT: delete_loopback ");
80    s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
81
82    FINISH;
83 }
84
85 static void *vl_api_sw_interface_set_flags_t_print
86 (vl_api_sw_interface_set_flags_t * mp, void *handle)
87 {
88     u8 * s;
89     s = format (0, "SCRIPT: sw_interface_set_flags ");
90
91     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
92
93     if (mp->admin_up_down)
94         s = format (s, "admin-up ");
95     else
96         s = format (s, "admin-down ");
97
98     if (mp->link_up_down)
99         s = format (s, "link-up");
100     else
101         s = format (s, "link-down");
102
103     FINISH;
104 }
105
106 static void *vl_api_sw_interface_add_del_address_t_print
107 (vl_api_sw_interface_add_del_address_t * mp, void *handle)
108 {
109     u8 * s;
110
111     s = format (0, "SCRIPT: sw_interface_add_del_address ");
112
113     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
114
115     if (mp->is_ipv6)
116         s = format (s, "%U/%d ", format_ip6_address,
117                     (ip6_address_t *) mp->address, mp->address_length);
118     else
119         s = format (s, "%U/%d ", format_ip4_address,
120                     (ip4_address_t *) mp->address, mp->address_length);
121
122     if (mp->is_add == 0)
123         s = format (s, "del ");
124     if (mp->del_all)
125         s = format (s, "del-all ");
126
127     FINISH;
128 }
129
130 static void *vl_api_sw_interface_set_table_t_print
131 (vl_api_sw_interface_set_table_t * mp, void * handle)
132 {
133     u8 * s;
134
135     s = format (0, "SCRIPT: sw_interface_set_table ");
136
137     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
138
139     if (mp->vrf_id)
140         s = format (s, "vrf %d ", ntohl(mp->vrf_id));
141
142     if (mp->is_ipv6)
143         s = format (s, "ipv6 ");
144
145     FINISH;
146 }
147
148 static void *vl_api_sw_interface_set_vpath_t_print
149 (vl_api_sw_interface_set_vpath_t * mp, void * handle)
150 {
151     u8 * s;
152
153     s = format (0, "SCRIPT: sw_interface_set_vpath ");
154
155     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
156
157     if (mp->enable)
158         s = format (s, "vPath enable ");
159     else
160         s = format (s, "vPath disable ");
161
162     FINISH;
163 }
164
165 static void *vl_api_sw_interface_set_l2_xconnect_t_print
166 (vl_api_sw_interface_set_l2_xconnect_t * mp, void *handle)
167 {
168     u8 * s;
169
170     s = format (0, "SCRIPT: sw_interface_set_l2_xconnect ");
171
172     s = format (s, "sw_if_index %d ", ntohl(mp->rx_sw_if_index));
173
174     if (mp->enable) {
175         s = format (s, "tx_sw_if_index %d ", ntohl(mp->tx_sw_if_index));
176     } else s = format (s, "delete ");
177
178     FINISH;
179 }
180
181 static void *vl_api_sw_interface_set_l2_bridge_t_print
182 (vl_api_sw_interface_set_l2_bridge_t * mp, void *handle)
183 {
184     u8 * s;
185
186     s = format (0, "SCRIPT: sw_interface_set_l2_bridge ");
187
188     s = format (s, "sw_if_index %d ", ntohl(mp->rx_sw_if_index));
189
190     if (mp->enable) {
191         s = format (s, "bd_id %d shg %d %senable ", ntohl(mp->bd_id),
192                     mp->shg, ((mp->bvi)?"bvi ":" "));
193     } else s = format (s, "disable ");
194
195     FINISH;
196 }
197
198 static void * vl_api_bridge_domain_add_del_t_print
199 (vl_api_bridge_domain_add_del_t * mp, void *handle)
200 {
201     u8 * s;
202
203     s = format (0, "SCRIPT: bridge_domain_add_del ");
204
205     s = format (s, "bd_id %d ", ntohl(mp->bd_id));
206
207     if (mp->is_add) {
208         s = format (s, "flood %d uu-flood %d forward %d learn %d arp-term %d",
209                     mp->flood, mp->uu_flood, mp->forward, mp->learn,
210                     mp->arp_term);
211     } else s = format (s, "del ");
212
213     FINISH;
214 }
215
216 static void *vl_api_bridge_domain_dump_t_print
217 (vl_api_bridge_domain_dump_t * mp, void *handle)
218 {
219     u8 * s;
220     u32 bd_id = ntohl (mp->bd_id);
221
222     s = format (0, "SCRIPT: bridge_domain_dump ");
223
224     if (bd_id != ~0)
225         s = format (s, "bd_id %d ", bd_id);
226
227     FINISH;
228 }
229
230 static void *vl_api_l2fib_add_del_t_print
231 (vl_api_l2fib_add_del_t * mp, void *handle)
232 {
233     u8 * s;
234
235     s = format (0, "SCRIPT: l2fib_add_del ");
236
237     s = format (s, "mac %U ", format_ethernet_address, &mp->mac);
238
239     s = format (s, "bd_id %d ", ntohl(mp->bd_id));
240
241
242     if (mp->is_add) {
243         s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
244         if (mp->static_mac) s = format (s, "%s", "static ");
245         if (mp->filter_mac) s = format (s, "%s", "filter ");
246         if (mp->bvi_mac) s = format (s, "%s", "bvi ");
247     } else {
248         s = format (s, "del ");
249     }
250
251     FINISH;
252 }
253
254 static void *vl_api_l2_flags_t_print
255 (vl_api_l2_flags_t * mp, void *handle)
256 {
257     u8 * s;
258     u32 flags = ntohl(mp->feature_bitmap);
259
260     s = format (0, "SCRIPT: l2_flags ");
261
262     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
263
264 #define _(a,b) \
265     if (flags & L2INPUT_FEAT_ ## a) s = format (s, #a " ");
266     foreach_l2input_feat;
267 #undef _
268
269     FINISH;
270 }
271
272 static void *vl_api_bridge_flags_t_print
273 (vl_api_bridge_flags_t * mp, void *handle)
274 {
275     u8 * s;
276     u32 flags = ntohl(mp->feature_bitmap);
277
278     s = format (0, "SCRIPT: bridge_flags ");
279
280     s = format (s, "bd_id %d ", ntohl(mp->bd_id));
281
282     if (flags & L2_LEARN) s = format (s, "learn ");
283     if (flags & L2_FWD)   s = format (s, "forward ");
284     if (flags & L2_FLOOD) s = format (s, "flood ");
285     if (flags & L2_UU_FLOOD) s = format (s, "uu-flood ");
286     if (flags & L2_ARP_TERM) s = format (s, "arp-term ");
287
288     if (mp->is_set == 0) s = format (s, "clear ");
289
290     FINISH;
291 }
292
293 static void *vl_api_bd_ip_mac_add_del_t_print
294 (vl_api_bd_ip_mac_add_del_t * mp, void *handle)
295 {
296     u8 * s;
297
298     s = format (0, "SCRIPT: bd_ip_mac_add_del ");
299     s = format (s, "bd_id %d ", ntohl(mp->bd_id));
300
301     if (mp->is_ipv6)
302          s = format (s, "%U ", format_ip6_address,
303                      (ip6_address_t *) mp->ip_address);
304     else s = format (s, "%U ", format_ip4_address,
305                      (ip4_address_t *) mp->ip_address);
306
307     s = format (s, "%U ", format_ethernet_address, mp->mac_address);
308     if (mp->is_add == 0) s = format (s, "del ");
309
310     FINISH;
311 }
312
313 static void *vl_api_tap_connect_t_print
314 (vl_api_tap_connect_t * mp, void *handle)
315 {
316     u8 * s;
317     u8 null_mac[6];
318
319     memset(null_mac, 0, sizeof (null_mac));
320
321     s = format (0, "SCRIPT: tap_connect ");
322     s = format (s, "tapname %s ", mp->tap_name);
323     if (mp->use_random_mac)
324         s = format (s, "random-mac ");
325
326     if (memcmp (mp->mac_address, null_mac, 6))
327         s = format (s, "mac %U ", format_ethernet_address, mp->mac_address);
328
329     FINISH;
330 }
331
332 static void *vl_api_tap_modify_t_print
333 (vl_api_tap_modify_t * mp, void *handle)
334 {
335     u8 * s;
336     u8 null_mac[6];
337
338     memset(null_mac, 0, sizeof (null_mac));
339
340     s = format (0, "SCRIPT: tap_modify ");
341     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
342     s = format (s, "tapname %s ", mp->tap_name);
343     if (mp->use_random_mac)
344         s = format (s, "random-mac ");
345
346     if (memcmp (mp->mac_address, null_mac, 6))
347         s = format (s, "mac %U ", format_ethernet_address, mp->mac_address);
348
349     FINISH;
350 }
351
352 static void *vl_api_tap_delete_t_print
353 (vl_api_tap_delete_t * mp, void *handle)
354 {
355     u8 * s;
356
357     s = format (0, "SCRIPT: tap_delete ");
358     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
359
360     FINISH;
361 }
362
363 static void *vl_api_sw_interface_tap_dump_t_print
364 (vl_api_sw_interface_tap_dump_t * mp, void *handle)
365 {
366     u8 * s;
367
368     s = format (0, "SCRIPT: sw_interface_tap_dump ");
369
370     FINISH;
371 }
372
373
374 static void *vl_api_ip_add_del_route_t_print
375 (vl_api_ip_add_del_route_t * mp, void *handle)
376 {
377     u8 * s;
378
379     s = format (0, "SCRIPT: ip_add_del_route ");
380     if (mp->is_add == 0)
381         s = format (s, "del ");
382
383     if (mp->next_hop_sw_if_index)
384         s = format (s, "sw_if_index %d ", ntohl(mp->next_hop_sw_if_index));
385
386     if (mp->is_ipv6)
387         s = format (s, "%U/%d ", format_ip6_address, mp->dst_address,
388                     mp->dst_address_length);
389     else
390         s = format (s, "%U/%d ", format_ip4_address, mp->dst_address,
391                     mp->dst_address_length);
392     if (mp->is_local)
393         s = format (s, "local ");
394     else if (mp->is_drop)
395         s = format (s, "drop ");
396     else if (mp->is_classify)
397         s = format (s, "classify %d", ntohl (mp->classify_table_index));
398     else {
399         if (mp->is_ipv6)
400             s = format (s, "via %U ", format_ip6_address,
401                         mp->next_hop_address);
402         else
403             s = format (s, "via %U ", format_ip4_address,
404                         mp->next_hop_address);
405     }
406
407     if (mp->vrf_id != 0)
408         s = format (s, "vrf %d ", ntohl(mp->vrf_id));
409
410     if (mp->create_vrf_if_needed)
411         s = format (s, "create-vrf ");
412
413     if (mp->resolve_attempts != 0)
414         s = format (s, "resolve-attempts %d ", ntohl(mp->resolve_attempts));
415
416     if (mp->next_hop_weight != 1)
417         s = format (s, "weight %d ", mp->next_hop_weight);
418
419     if (mp->not_last)
420         s = format (s, "not-last ");
421
422     if (mp->is_multipath)
423         s = format (s, "multipath ");
424
425     if (mp->is_multipath)
426         s = format (s, "multipath ");
427
428     if (mp->lookup_in_vrf)
429         s = format (s, "lookup-in-vrf %d ", ntohl (mp->lookup_in_vrf));
430
431     FINISH;
432 }
433
434 static void *vl_api_proxy_arp_add_del_t_print
435 (vl_api_proxy_arp_add_del_t * mp, void * handle)
436 {
437     u8 * s;
438
439     s = format (0, "SCRIPT: proxy_arp_add_del ");
440
441     s = format (s, "%U - %U ", format_ip4_address, mp->low_address,
442                 format_ip4_address, mp->hi_address);
443
444     if (mp->vrf_id)
445         s = format (s, "vrf %d ", ntohl(mp->vrf_id));
446
447     if (mp->is_add == 0)
448         s = format (s, "del ");
449
450     FINISH;
451 }
452
453 static void *vl_api_proxy_arp_intfc_enable_disable_t_print
454 (vl_api_proxy_arp_intfc_enable_disable_t * mp, void * handle)
455 {
456     u8 * s;
457
458     s = format (0, "SCRIPT: proxy_arp_intfc_enable_disable ");
459
460     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
461
462     s = format (s, "enable %d ", mp->enable_disable);
463
464     FINISH;
465 }
466
467 static void *vl_api_mpls_add_del_decap_t_print
468 (vl_api_mpls_add_del_decap_t * mp, void * handle)
469 {
470     u8 * s;
471
472     s = format (0, "SCRIPT: mpls_add_del_decap ");
473
474     s = format (s, "rx_vrf_id %d ", ntohl(mp->rx_vrf_id));
475
476     s = format (s, "tx_vrf_id %d ", ntohl(mp->tx_vrf_id));
477
478     s = format (s, "label %d ", ntohl(mp->label));
479
480     s = format (s, "next-index %d ", ntohl(mp->next_index));
481
482     if (mp->s_bit == 0)
483         s = format (s, "s-bit-clear ");
484
485     if (mp->is_add == 0)
486         s = format (s, "del ");
487
488     FINISH;
489 }
490
491 static void *vl_api_mpls_add_del_encap_t_print
492 (vl_api_mpls_add_del_encap_t * mp, void * handle)
493 {
494     u8 * s;
495     int i;
496
497     s = format (0, "SCRIPT: mpls_add_del_encap ");
498
499     s = format (s, "vrf_id %d ", ntohl(mp->vrf_id));
500
501     s = format (s, "dst %U ", format_ip4_address, mp->dst_address);
502
503     for (i = 0; i < mp->nlabels; i++)
504         s = format (s, "label %d ", ntohl(mp->labels[i]));
505
506     if (mp->is_add == 0)
507         s = format (s, "del ");
508
509     FINISH;
510 }
511
512 static void *vl_api_mpls_gre_add_del_tunnel_t_print
513 (vl_api_mpls_gre_add_del_tunnel_t * mp, void * handle)
514 {
515     u8 * s;
516
517     s = format (0, "SCRIPT: mpls_gre_add_del_tunnel ");
518
519     s = format (s, "src %U ", format_ip4_address, mp->src_address);
520
521     s = format (s, "dst %U ", format_ip4_address, mp->dst_address);
522
523     s = format (s, "adj %U/%d ", format_ip4_address,
524                 (ip4_address_t *) mp->intfc_address, mp->intfc_address_length);
525
526     s = format (s, "inner-vrf_id %d ", ntohl(mp->inner_vrf_id));
527
528     s = format (s, "outer-vrf_id %d ", ntohl(mp->outer_vrf_id));
529
530     if (mp->is_add == 0)
531         s = format (s, "del ");
532
533     if (mp->l2_only)
534         s = format (s, "l2-only ");
535
536     FINISH;
537 }
538
539 static void *vl_api_mpls_ethernet_add_del_tunnel_t_print
540 (vl_api_mpls_ethernet_add_del_tunnel_t * mp, void * handle)
541 {
542     u8 * s;
543
544     s = format (0, "SCRIPT: mpls_ethernet_add_del_tunnel ");
545
546     s = format (s, "tx_sw_if_index %d ", ntohl(mp->tx_sw_if_index));
547
548     s = format (s, "dst %U", format_ethernet_address, mp->dst_mac_address);
549
550     s = format (s, "adj %U/%d ", format_ip4_address,
551                 (ip4_address_t *) mp->adj_address, mp->adj_address_length);
552
553     s = format (s, "vrf_id %d ", ntohl(mp->vrf_id));
554
555     if (mp->l2_only)
556         s = format (s, "l2-only ");
557
558     if (mp->is_add == 0)
559         s = format (s, "del ");
560
561     FINISH;
562 }
563
564 static void *vl_api_mpls_ethernet_add_del_tunnel_2_t_print
565 (vl_api_mpls_ethernet_add_del_tunnel_2_t * mp, void * handle)
566 {
567     u8 * s;
568
569     s = format (0, "SCRIPT: mpls_ethernet_add_del_tunnel_2 ");
570
571     s = format (s, "adj %U/%d ", format_ip4_address,
572                 (ip4_address_t *) mp->adj_address, mp->adj_address_length);
573
574     s = format (s, "next-hop %U ", format_ip4_address,
575                 (ip4_address_t *) mp->next_hop_ip4_address_in_outer_vrf);
576
577     s = format (s, "inner_vrf_id %d ", ntohl(mp->inner_vrf_id));
578
579     s = format (s, "outer_vrf_id %d ", ntohl(mp->outer_vrf_id));
580
581     s = format (s, "resolve-if-needed %d ", mp->resolve_if_needed);
582
583     s = format (s, "resolve-attempts %d ", ntohl(mp->resolve_attempts));
584
585     if (mp->l2_only)
586         s = format (s, "l2-only ");
587
588     if (mp->is_add == 0)
589         s = format (s, "del ");
590
591     FINISH;
592 }
593
594 static void *vl_api_sw_interface_set_unnumbered_t_print
595 (vl_api_sw_interface_set_unnumbered_t * mp, void * handle)
596 {
597     u8 * s;
598
599     s = format (0, "SCRIPT: sw_interface_set_unnumbered ");
600
601     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
602
603     s = format (s, "unnum_if_index %d ", ntohl(mp->unnumbered_sw_if_index));
604
605     if (mp->is_add == 0)
606         s = format (s, "del ");
607
608     FINISH;
609 }
610
611 static void *vl_api_ip_neighbor_add_del_t_print
612 (vl_api_ip_neighbor_add_del_t * mp, void *handle)
613 {
614     u8 * s;
615     u8 null_mac[6];
616
617     memset(null_mac, 0, sizeof (null_mac));
618
619     s = format (0, "SCRIPT: ip_neighbor_add_del ");
620
621     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
622
623     if (mp->is_static)
624         s = format (s, "is_static ");
625
626     s = format (s, "vrf_id %d ", ntohl(mp->vrf_id));
627
628     if (memcmp (mp->mac_address, null_mac, 6))
629         s = format (s, "mac %U ", format_ethernet_address, mp->mac_address);
630
631     if (mp->is_ipv6)
632         s = format (s, "dst %U ", format_ip6_address, (ip6_address_t *) mp->dst_address);
633     else
634         s = format (s, "dst %U ", format_ip4_address, (ip4_address_t *) mp->dst_address);
635
636     if (mp->is_add == 0)
637         s = format (s, "del ");
638
639     FINISH;
640 }
641
642 static void *vl_api_reset_vrf_t_print
643 (vl_api_reset_vrf_t * mp, void * handle)
644 {
645     u8 * s;
646
647     s = format (0, "SCRIPT: reset_vrf ");
648
649     if (mp->vrf_id)
650         s = format (s, "vrf %d ", ntohl(mp->vrf_id));
651
652     if (mp->is_ipv6 != 0)
653         s = format (s, "ipv6 ");
654
655     FINISH;
656 }
657
658 static void *vl_api_create_vlan_subif_t_print
659 (vl_api_create_vlan_subif_t * mp, void * handle)
660 {
661     u8 * s;
662
663     s = format (0, "SCRIPT: create_vlan_subif ");
664
665     if (mp->sw_if_index)
666         s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
667
668     if (mp->vlan_id)
669         s = format (s, "vlan_id %d ", ntohl(mp->vlan_id));
670
671     FINISH;
672 }
673
674 #define foreach_create_subif_bit                \
675 _(no_tags)                                      \
676 _(one_tag)                                      \
677 _(two_tags)                                     \
678 _(dot1ad)                                       \
679 _(exact_match)                                  \
680 _(default_sub)                                  \
681 _(outer_vlan_id_any)                            \
682 _(inner_vlan_id_any)
683
684 static void *vl_api_create_subif_t_print
685 (vl_api_create_subif_t * mp, void * handle)
686 {
687     u8 * s;
688
689     s = format (0, "SCRIPT: create_subif ");
690
691     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
692
693     s = format (s, "sub_id %d ", ntohl(mp->sub_id));
694
695     if (mp->outer_vlan_id)
696         s = format (s, "outer_vlan_id %d ", ntohs (mp->outer_vlan_id));
697
698     if (mp->inner_vlan_id)
699         s = format (s, "inner_vlan_id %d ", ntohs (mp->inner_vlan_id));
700
701 #define _(a) if (mp->a) s = format (s, "%s ", #a);
702     foreach_create_subif_bit;
703 #undef _
704
705
706     FINISH;
707 }
708
709 static void *vl_api_oam_add_del_t_print
710 (vl_api_oam_add_del_t * mp, void * handle)
711 {
712     u8 * s;
713
714     s = format (0, "SCRIPT: oam_add_del ");
715
716     if (mp->vrf_id)
717         s = format (s, "vrf %d ", ntohl(mp->vrf_id));
718
719     s = format (s, "src %U ", format_ip4_address, mp->src_address);
720
721     s = format (s, "dst %U ", format_ip4_address, mp->dst_address);
722
723     if (mp->is_add == 0)
724         s = format (s, "del ");
725
726     FINISH;
727 }
728
729 static void *vl_api_reset_fib_t_print
730 (vl_api_reset_fib_t * mp, void * handle)
731 {
732     u8 * s;
733
734     s = format (0, "SCRIPT: reset_fib ");
735
736     if (mp->vrf_id)
737         s = format (s, "vrf %d ", ntohl(mp->vrf_id));
738
739     if (mp->is_ipv6 != 0)
740         s = format (s, "ipv6 ");
741
742     FINISH;
743 }
744
745 static void *vl_api_dhcp_proxy_config_t_print
746 (vl_api_dhcp_proxy_config_t * mp, void *handle)
747 {
748     u8 * s;
749
750     s = format (0, "SCRIPT: dhcp_proxy_config ");
751
752     s = format (s, "vrf_id %d ", ntohl(mp->vrf_id));
753
754     if (mp->is_ipv6) {
755         s = format (s, "svr %U ", format_ip6_address,
756                     (ip6_address_t *) mp->dhcp_server);
757         s = format (s, "src %U ", format_ip6_address,
758                     (ip6_address_t *) mp->dhcp_src_address);
759     } else {
760         s = format (s, "svr %U ", format_ip4_address,
761                     (ip4_address_t *) mp->dhcp_server);
762         s = format (s, "src %U ", format_ip4_address,
763                     (ip4_address_t *) mp->dhcp_src_address);
764     }
765     if (mp->is_add == 0)
766         s = format (s, "del ");
767
768     s = format (s, "insert-cid %d ", mp->insert_circuit_id);
769
770     FINISH;
771 }
772
773 static void *vl_api_dhcp_proxy_config_2_t_print
774 (vl_api_dhcp_proxy_config_2_t * mp, void *handle)
775 {
776     u8 * s;
777
778     s = format (0, "SCRIPT: dhcp_proxy_config_2 ");
779
780     s = format (s, "rx_vrf_id %d ", ntohl(mp->rx_vrf_id));
781     s = format (s, "server_vrf_id %d ", ntohl(mp->server_vrf_id));
782
783     if (mp->is_ipv6) {
784         s = format (s, "svr %U ", format_ip6_address,
785                     (ip6_address_t *) mp->dhcp_server);
786         s = format (s, "src %U ", format_ip6_address,
787                     (ip6_address_t *) mp->dhcp_src_address);
788     } else {
789         s = format (s, "svr %U ", format_ip4_address,
790                     (ip4_address_t *) mp->dhcp_server);
791         s = format (s, "src %U ", format_ip4_address,
792                     (ip4_address_t *) mp->dhcp_src_address);
793     }
794     if (mp->is_add == 0)
795         s = format (s, "del ");
796
797     s = format (s, "insert-cid %d ", mp->insert_circuit_id);
798
799     FINISH;
800 }
801
802 static void *vl_api_dhcp_proxy_set_vss_t_print
803 (vl_api_dhcp_proxy_set_vss_t * mp, void * handle)
804 {
805     u8 * s;
806
807     s = format (0, "SCRIPT: dhcp_proxy_set_vss ");
808
809     s = format (s, "tbl_id %d ", ntohl(mp->tbl_id));
810
811     s = format (s, "fib_id %d ", ntohl(mp->fib_id));
812
813     s = format (s, "oui %d ", ntohl(mp->oui));
814
815     if (mp->is_ipv6 != 0)
816         s = format (s, "ipv6 ");
817
818     if (mp->is_add == 0)
819         s = format (s, "del ");
820
821     FINISH;
822 }
823
824 static void *vl_api_dhcp_client_config_t_print
825 (vl_api_dhcp_client_config_t * mp, void *handle)
826 {
827     u8 * s;
828
829     s = format (0, "SCRIPT: dhcp_client_config ");
830
831     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
832
833     s = format (s, "hostname %s ", mp->hostname);
834
835     s = format (s, "want_dhcp_event %d ", mp->want_dhcp_event);
836
837     s = format (s, "pid %d ", mp->pid);
838
839     if (mp->is_add == 0)
840         s = format (s, "del ");
841
842     FINISH;
843 }
844
845
846 static void *vl_api_set_ip_flow_hash_t_print
847 (vl_api_set_ip_flow_hash_t * mp, void * handle)
848 {
849     u8 * s;
850
851     s = format (0, "SCRIPT: set_ip_flow_hash ");
852
853     s = format (s, "vrf_id %d ", ntohl(mp->vrf_id));
854
855     if (mp->src)
856         s = format (s, "src ");
857
858     if (mp->dst)
859         s = format (s, "dst ");
860
861     if (mp->sport)
862         s = format (s, "sport ");
863
864     if (mp->dport)
865         s = format (s, "dport ");
866
867     if (mp->proto)
868         s = format (s, "proto ");
869
870     if (mp->reverse)
871         s = format (s, "reverse ");
872
873     if (mp->is_ipv6 != 0)
874         s = format (s, "ipv6 ");
875
876     FINISH;
877 }
878
879 static void *vl_api_sw_interface_ip6_set_link_local_address_t_print
880 (vl_api_sw_interface_ip6_set_link_local_address_t * mp, void *handle)
881 {
882     u8 * s;
883
884     s = format (0, "SCRIPT: sw_interface_ip6_set_link_local_address ");
885
886     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
887
888     s = format (s, "%U/%d ", format_ip6_address, mp->address,
889                 mp->address_length);
890
891     FINISH;
892 }
893
894 static void *vl_api_sw_interface_ip6nd_ra_prefix_t_print
895 (vl_api_sw_interface_ip6nd_ra_prefix_t * mp, void *handle)
896 {
897     u8 * s;
898
899     s = format (0, "SCRIPT: sw_interface_ip6nd_ra_prefix ");
900
901     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
902
903     s = format (s, "%U/%d ", format_ip6_address, mp->address,
904                 mp->address_length);
905
906     s = format (s, "val_life %d ", ntohl(mp->val_lifetime));
907
908     s = format (s, "pref_life %d ", ntohl(mp->pref_lifetime));
909
910     if (mp->use_default)
911         s = format (s, "def ");
912
913     if (mp->no_advertise)
914         s = format (s, "noadv ");
915
916     if (mp->off_link)
917         s = format (s, "offl ");
918
919     if (mp->no_autoconfig)
920         s = format (s, "noauto ");
921
922     if (mp->no_onlink)
923         s = format (s, "nolink ");
924
925     if (mp->is_no)
926         s = format (s, "isno ");
927
928     FINISH;
929 }
930
931 static void *vl_api_sw_interface_ip6nd_ra_config_t_print
932 (vl_api_sw_interface_ip6nd_ra_config_t * mp, void *handle)
933 {
934     u8 * s;
935
936     s = format (0, "SCRIPT: sw_interface_ip6nd_ra_config ");
937
938     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
939
940     s = format (s, "maxint %d ", ntohl(mp->max_interval));
941
942     s = format (s, "minint %d ", ntohl(mp->min_interval));
943
944     s = format (s, "life %d ", ntohl(mp->lifetime));
945
946     s = format (s, "count %d ", ntohl(mp->initial_count));
947
948     s = format (s, "interval %d ", ntohl(mp->initial_interval));
949
950     if (mp->suppress)
951         s = format (s, "suppress ");
952
953     if (mp->managed)
954         s = format (s, "managed ");
955
956     if (mp->other)
957         s = format (s, "other ");
958
959     if (mp->ll_option)
960         s = format (s, "ll ");
961
962     if (mp->send_unicast)
963         s = format (s, "send ");
964
965     if (mp->cease)
966         s = format (s, "cease ");
967
968     if (mp->is_no)
969         s = format (s, "isno ");
970
971     if (mp->default_router)
972         s = format (s, "def ");
973
974     FINISH;
975 }
976
977 static void *vl_api_set_arp_neighbor_limit_t_print
978 (vl_api_set_arp_neighbor_limit_t * mp, void * handle)
979 {
980     u8 * s;
981
982     s = format (0, "SCRIPT: set_arp_neighbor_limit ");
983
984     s = format (s, "arp_nbr_limit %d ", ntohl(mp->arp_neighbor_limit));
985
986     if (mp->is_ipv6 != 0)
987         s = format (s, "ipv6 ");
988
989     FINISH;
990 }
991
992 static void *vl_api_l2_patch_add_del_t_print
993 (vl_api_l2_patch_add_del_t * mp, void *handle)
994 {
995     u8 * s;
996
997     s = format (0, "SCRIPT: l2_patch_add_del ");
998
999     s = format (s, "rx_sw_if_index %d ", ntohl(mp->rx_sw_if_index));
1000
1001     s = format (s, "tx_sw_if_index %d ", ntohl(mp->tx_sw_if_index));
1002
1003     if (mp->is_add == 0)
1004         s = format (s, "del ");
1005
1006     FINISH;
1007 }
1008
1009 static void *vl_api_sr_tunnel_add_del_t_print
1010 (vl_api_sr_tunnel_add_del_t * mp, void *handle)
1011 {
1012     u8 * s;
1013     ip6_address_t * this_address;
1014     int i;
1015     u16 flags_host_byte_order;
1016     u8 pl_flag;
1017
1018     s = format (0, "SCRIPT: sr_tunnel_add_del ");
1019
1020     if (mp->name[0])
1021       s = format (s, "name %s ", mp->name);
1022
1023     s = format (s, "src %U dst %U/%d ", format_ip6_address,
1024                 (ip6_address_t *) mp->src_address,
1025                 format_ip6_address,
1026                 (ip6_address_t *) mp->dst_address, mp->dst_mask_width);
1027
1028     this_address = (ip6_address_t *)mp->segs_and_tags;
1029     for (i = 0; i < mp->n_segments; i++) {
1030         s = format (s, "next %U ", format_ip6_address, this_address);
1031         this_address++;
1032     }
1033     for (i = 0; i < mp->n_tags; i++) {
1034         s = format (s, "tag %U ", format_ip6_address, this_address);
1035         this_address++;
1036     }
1037
1038     flags_host_byte_order = clib_net_to_host_u16 (mp->flags_net_byte_order);
1039
1040     if (flags_host_byte_order & IP6_SR_HEADER_FLAG_CLEANUP)
1041         s = format (s, " clean ");
1042
1043     if (flags_host_byte_order & IP6_SR_HEADER_FLAG_PROTECTED)
1044         s = format (s, "protected ");
1045
1046     for (i = 1; i <= 4; i++) {
1047         pl_flag = ip6_sr_policy_list_flags (flags_host_byte_order, i);
1048
1049         switch (pl_flag) {
1050         case IP6_SR_HEADER_FLAG_PL_ELT_NOT_PRESENT:
1051             continue;
1052
1053         case IP6_SR_HEADER_FLAG_PL_ELT_INGRESS_PE:
1054             s = format (s, "InPE %d ", i);
1055             break;
1056
1057         case IP6_SR_HEADER_FLAG_PL_ELT_EGRESS_PE:
1058             s = format (s, "EgPE %d ", i);
1059             break;
1060
1061         case IP6_SR_HEADER_FLAG_PL_ELT_ORIG_SRC_ADDR:
1062             s = format (s, "OrgSrc %d ", i);
1063             break;
1064
1065         default:
1066             clib_warning ("BUG: pl elt %d value %d", i, pl_flag);
1067             break;
1068         }
1069     }
1070
1071     if (mp->policy_name[0])
1072       s = format (s, "policy_name %s ", mp->policy_name);
1073
1074     if (mp->is_add == 0)
1075         s = format (s, "del ");
1076
1077     FINISH;
1078 }
1079
1080 static void *vl_api_sr_policy_add_del_t_print
1081 (vl_api_sr_policy_add_del_t * mp, void *handle)
1082 {
1083   u8 * s;
1084   int i;
1085
1086   s = format (0, "SCRIPT: sr_policy_add_del ");
1087
1088   if (mp->name[0])
1089     s = format (s, "name %s ", mp->name);
1090
1091
1092   if (mp->tunnel_names[0])
1093     {
1094     // start deserializing tunnel_names
1095     int num_tunnels = mp->tunnel_names[0]; //number of tunnels
1096     u8 * deser_tun_names = mp->tunnel_names;
1097     deser_tun_names += 1; //moving along
1098
1099     u8 * tun_name = 0;
1100     int tun_name_len = 0;
1101
1102     for (i=0; i < num_tunnels; i++)
1103       {
1104         tun_name_len= *deser_tun_names;
1105         deser_tun_names += 1;
1106         vec_resize (tun_name, tun_name_len);
1107         memcpy(tun_name, deser_tun_names, tun_name_len);
1108         s = format (s, "tunnel %s ", tun_name);
1109         deser_tun_names += tun_name_len;
1110         tun_name = 0;
1111       }
1112     }
1113
1114   if (mp->is_add == 0)
1115     s = format (s, "del ");
1116
1117   FINISH;
1118 }
1119
1120 static void *vl_api_sr_multicast_map_add_del_t_print
1121 (vl_api_sr_multicast_map_add_del_t * mp, void *handle)
1122 {
1123
1124   u8 * s = 0;
1125   /* int i; */
1126
1127   s = format (0, "SCRIPT: sr_multicast_map_add_del ");
1128
1129   if (mp->multicast_address[0])
1130     s = format (s, "address %U ", format_ip6_address, &mp->multicast_address);
1131
1132   if (mp->policy_name[0])
1133     s = format (s, "sr-policy %s ", &mp->policy_name);
1134
1135
1136   if (mp->is_add == 0)
1137     s = format (s, "del ");
1138
1139   FINISH;
1140 }
1141
1142
1143 static void *vl_api_classify_add_del_table_t_print
1144 (vl_api_classify_add_del_table_t * mp, void *handle)
1145 {
1146     u8 * s;
1147     int i;
1148
1149     s = format (0, "SCRIPT: classify_add_del_table ");
1150
1151     if (mp->is_add == 0) {
1152         s = format (s, "table %d ", ntohl(mp->table_index));
1153         s = format (s, "del ");
1154     } else {
1155         s = format (s, "nbuckets %d ", ntohl(mp->nbuckets));
1156         s = format (s, "memory_size %d ", ntohl(mp->memory_size));
1157         s = format (s, "skip %d ", ntohl(mp->skip_n_vectors));
1158         s = format (s, "match %d ", ntohl(mp->match_n_vectors));
1159         s = format (s, "next-table %d ", ntohl(mp->next_table_index));
1160         s = format (s, "miss-next %d ", ntohl(mp->miss_next_index));
1161         s = format (s, "mask hex ");
1162         for (i = 0; i < ntohl(mp->match_n_vectors) * sizeof (u32x4); i++)
1163             s = format (s, "%02x", mp->mask[i]);
1164         vec_add1 (s, ' ');
1165     }
1166
1167     FINISH;
1168 }
1169
1170 static void *vl_api_classify_add_del_session_t_print
1171 (vl_api_classify_add_del_session_t * mp, void *handle)
1172 {
1173     u8 * s;
1174     int i, limit=0;
1175
1176     s = format (0, "SCRIPT: classify_add_del_session ");
1177
1178     s = format (s, "table_index %d ", ntohl (mp->table_index));
1179     s = format (s, "hit_next_index %d ", ntohl (mp->hit_next_index));
1180     s = format (s, "opaque_index %d ", ntohl (mp->opaque_index));
1181     s = format (s, "advance %d ", ntohl (mp->advance));
1182     if (mp->is_add == 0)
1183         s = format (s, "del ");
1184
1185     s = format (s, "match hex ");
1186     for (i = 5 * sizeof(u32x4)-1; i > 0; i--) {
1187         if (mp->match[i] != 0) {
1188             limit = i + 1;
1189             break;
1190         }
1191     }
1192
1193     for (i = 0; i < limit; i++)
1194         s = format (s, "%02x", mp->match[i]);
1195
1196     FINISH;
1197 }
1198
1199 static void *vl_api_classify_set_interface_ip_table_t_print
1200 (vl_api_classify_set_interface_ip_table_t * mp, void *handle)
1201 {
1202     u8 * s;
1203
1204     s = format (0, "SCRIPT: classify_set_interface_ip_table ");
1205
1206     if (mp->is_ipv6)
1207         s = format (s, "ipv6 ");
1208
1209     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1210     s = format (s, "table %d ", ntohl(mp->table_index));
1211
1212     FINISH;
1213 }
1214
1215 static void *vl_api_classify_set_interface_l2_tables_t_print
1216 (vl_api_classify_set_interface_l2_tables_t * mp, void *handle)
1217 {
1218     u8 * s;
1219
1220     s = format (0, "SCRIPT: classify_set_interface_l2_tables ");
1221
1222     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1223     s = format (s, "ip4-table %d ", ntohl(mp->ip4_table_index));
1224     s = format (s, "ip6-table %d ", ntohl(mp->ip6_table_index));
1225     s = format (s, "other-table %d ", ntohl(mp->other_table_index));
1226
1227     FINISH;
1228 }
1229
1230 static void *vl_api_add_node_next_t_print
1231 (vl_api_add_node_next_t * mp, void *handle)
1232 {
1233     u8 * s;
1234
1235     s = format (0, "SCRIPT: add_node_next ");
1236
1237     s = format (0, "node %s next %s ", mp->node_name, mp->next_name);
1238
1239     FINISH;
1240 }
1241
1242 static void *vl_api_l2tpv3_create_tunnel_t_print
1243 (vl_api_l2tpv3_create_tunnel_t * mp, void *handle)
1244 {
1245     u8 * s;
1246
1247     s = format (0, "SCRIPT: l2tpv3_create_tunnel ");
1248
1249     s = format (s, "client_address %U our_address %U ",
1250                 format_ip6_address, (ip6_address_t *)(mp->client_address),
1251                 format_ip6_address, (ip6_address_t *)(mp->our_address));
1252     s = format (s, "local_session_id %d ", ntohl(mp->local_session_id));
1253     s = format (s, "remote_session_id %d ", ntohl(mp->remote_session_id));
1254     s = format (s, "local_cookie %lld ",
1255                 clib_net_to_host_u64 (mp->local_cookie));
1256     s = format (s, "remote_cookie %lld ",
1257                 clib_net_to_host_u64 (mp->remote_cookie));
1258     if (mp->l2_sublayer_present)
1259         s = format (s, "l2-sublayer-present ");
1260
1261     FINISH;
1262 }
1263
1264 static void *vl_api_l2tpv3_set_tunnel_cookies_t_print
1265 (vl_api_l2tpv3_set_tunnel_cookies_t * mp, void *handle)
1266 {
1267     u8 * s;
1268
1269     s = format (0, "SCRIPT: l2tpv3_set_tunnel_cookies ");
1270
1271     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1272
1273     s = format (s, "new_local_cookie %llu ",
1274                 clib_net_to_host_u64 (mp->new_local_cookie));
1275
1276     s = format (s, "new_remote_cookie %llu ",
1277                 clib_net_to_host_u64 (mp->new_remote_cookie));
1278
1279     FINISH;
1280 }
1281
1282 static void *vl_api_l2tpv3_interface_enable_disable_t_print
1283 (vl_api_l2tpv3_interface_enable_disable_t *mp, void *handle)
1284 {
1285     u8 * s;
1286
1287     s = format (0, "SCRIPT: l2tpv3_interface_enable_disable ");
1288
1289     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1290
1291     if (mp->enable_disable == 0)
1292         s = format (s, "del ");
1293
1294     FINISH;
1295 }
1296
1297 static void * vl_api_l2tpv3_set_lookup_key_t_print
1298 (vl_api_l2tpv3_set_lookup_key_t * mp, void *handle)
1299 {
1300     u8 * s;
1301     char * str = "unknown";
1302
1303     s = format (0, "SCRIPT: l2tpv3_set_lookup_key ");
1304
1305     switch (mp->key) {
1306     case L2T_LOOKUP_SRC_ADDRESS:
1307         str = "lookup_v6_src";
1308         break;
1309     case L2T_LOOKUP_DST_ADDRESS:
1310         str = "lookup_v6_dst";
1311         break;
1312     case L2T_LOOKUP_SESSION_ID:
1313         str = "lookup_session_id";
1314         break;
1315     default:
1316         break;
1317     }
1318
1319     s = format (s, "%s ", str);
1320
1321     FINISH;
1322 }
1323
1324 static void * vl_api_sw_if_l2tpv3_tunnel_dump_t_print
1325 (vl_api_sw_if_l2tpv3_tunnel_dump_t * mp, void *handle)
1326 {
1327     u8 * s;
1328
1329     s = format (0, "SCRIPT: sw_if_l2tpv3_tunnel_dump ");
1330
1331     FINISH;
1332 }
1333
1334 static void * vl_api_vxlan_add_del_tunnel_t_print
1335 (vl_api_vxlan_add_del_tunnel_t * mp, void *handle)
1336 {
1337     u8 * s;
1338
1339     s = format (0, "SCRIPT: vxlan_add_del_tunnel ");
1340
1341     s = format (s, "dst %U ", format_ip46_address,
1342                 (ip46_address_t *)&(mp->dst_address),
1343                 mp->is_ipv6 ? IP46_TYPE_IP6 : IP46_TYPE_IP4);
1344
1345     s = format (s, "src %U ", format_ip46_address,
1346                 (ip46_address_t *)&(mp->src_address),
1347                 mp->is_ipv6 ? IP46_TYPE_IP6 : IP46_TYPE_IP4);
1348
1349     if (mp->encap_vrf_id)
1350         s = format (s, "encap-vrf-id %d ", ntohl(mp->encap_vrf_id));
1351
1352     s = format (s, "decap-next %d ", ntohl(mp->decap_next_index));
1353
1354     s = format (s, "vni %d ", ntohl(mp->vni));
1355
1356     if (mp->is_add == 0)
1357         s = format (s, "del ");
1358
1359     FINISH;
1360 }
1361
1362 static void * vl_api_vxlan_tunnel_dump_t_print
1363 (vl_api_vxlan_tunnel_dump_t * mp, void *handle)
1364 {
1365     u8 * s;
1366
1367     s = format (0, "SCRIPT: vxlan_tunnel_dump ");
1368
1369     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1370
1371     FINISH;
1372 }
1373
1374 static void * vl_api_gre_add_del_tunnel_t_print
1375 (vl_api_gre_add_del_tunnel_t * mp, void *handle)
1376 {
1377     u8 * s;
1378
1379     s = format (0, "SCRIPT: gre_add_del_tunnel ");
1380
1381     s = format (s, "dst %U ", format_ip46_address,
1382                 (ip46_address_t *)&(mp->dst_address),
1383                 mp->is_ipv6 ? IP46_TYPE_IP6 : IP46_TYPE_IP4);
1384
1385     s = format (s, "src %U ", format_ip46_address,
1386                 (ip46_address_t *)&(mp->src_address),
1387                 mp->is_ipv6 ? IP46_TYPE_IP6 : IP46_TYPE_IP4);
1388
1389     if (mp->outer_fib_id)
1390         s = format (s, "outer-fib-id %d ", ntohl(mp->outer_fib_id));
1391
1392     if (mp->is_add == 0)
1393         s = format (s, "del ");
1394
1395     FINISH;
1396 }
1397
1398 static void * vl_api_gre_tunnel_dump_t_print
1399 (vl_api_gre_tunnel_dump_t * mp, void *handle)
1400 {
1401     u8 * s;
1402
1403     s = format (0, "SCRIPT: gre_tunnel_dump ");
1404
1405     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1406
1407     FINISH;
1408 }
1409
1410 static void *vl_api_l2_fib_clear_table_t_print
1411 (vl_api_l2_fib_clear_table_t * mp, void *handle)
1412 {
1413     u8 * s;
1414
1415     s = format (0, "SCRIPT: l2_fib_clear_table ");
1416
1417     FINISH;
1418 }
1419
1420 static void *vl_api_l2_interface_efp_filter_t_print
1421 (vl_api_l2_interface_efp_filter_t * mp, void *handle)
1422 {
1423     u8 * s;
1424
1425     s = format (0, "SCRIPT: l2_interface_efp_filter ");
1426
1427     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1428     if (mp->enable_disable)
1429         s = format (s, "enable ");
1430     else
1431         s = format (s, "disable ");
1432
1433     FINISH;
1434 }
1435
1436 static void *vl_api_l2_interface_vlan_tag_rewrite_t_print
1437 (vl_api_l2_interface_vlan_tag_rewrite_t * mp, void *handle)
1438 {
1439     u8 * s;
1440
1441     s = format (0, "SCRIPT: l2_interface_vlan_tag_rewrite ");
1442
1443     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1444     s = format (s, "vtr_op %d ", ntohl(mp->vtr_op));
1445     s = format (s, "push_dot1q %d ", ntohl(mp->push_dot1q));
1446     s = format (s, "tag1 %d ", ntohl(mp->tag1));
1447     s = format (s, "tag2 %d ", ntohl(mp->tag2));
1448
1449     FINISH;
1450 }
1451
1452 static void *vl_api_create_vhost_user_if_t_print
1453 (vl_api_create_vhost_user_if_t * mp, void *handle)
1454 {
1455     u8 * s;
1456
1457     s = format (0, "SCRIPT: create_vhost_user_if ");
1458
1459     s = format (s, "socket %s ", mp->sock_filename);
1460     if (mp->is_server)
1461         s = format (s, "server ");
1462     if (mp->renumber)
1463         s = format (s, "renumber %d ", ntohl(mp->custom_dev_instance));
1464
1465     FINISH;
1466 }
1467
1468 static void *vl_api_modify_vhost_user_if_t_print
1469 (vl_api_modify_vhost_user_if_t * mp, void *handle)
1470 {
1471     u8 * s;
1472
1473     s = format (0, "SCRIPT: modify_vhost_user_if ");
1474
1475     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1476     s = format (s, "socket %s ", mp->sock_filename);
1477     if (mp->is_server)
1478         s = format (s, "server ");
1479     if (mp->renumber)
1480         s = format (s, "renumber %d ", ntohl(mp->custom_dev_instance));
1481
1482     FINISH;
1483 }
1484
1485 static void *vl_api_delete_vhost_user_if_t_print
1486 (vl_api_delete_vhost_user_if_t * mp, void *handle)
1487 {
1488     u8 * s;
1489
1490     s = format (0, "SCRIPT: delete_vhost_user_if ");
1491     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1492
1493     FINISH;
1494 }
1495
1496 static void *vl_api_sw_interface_vhost_user_dump_t_print
1497 (vl_api_sw_interface_vhost_user_dump_t * mp, void *handle)
1498 {
1499     u8 * s;
1500
1501     s = format (0, "SCRIPT: sw_interface_vhost_user_dump ");
1502
1503     FINISH;
1504 }
1505
1506 static void *vl_api_sw_interface_dump_t_print
1507 (vl_api_sw_interface_dump_t * mp, void *handle)
1508 {
1509     u8 * s;
1510
1511     s = format (0, "SCRIPT: sw_interface_dump ");
1512
1513     if (mp->name_filter_valid)
1514         s = format (s, "name_filter %s ", mp->name_filter);
1515     else
1516         s = format (s, "all ");
1517
1518     FINISH;
1519 }
1520
1521 static void *vl_api_l2_fib_table_dump_t_print
1522 (vl_api_l2_fib_table_dump_t * mp, void *handle)
1523 {
1524     u8 * s;
1525
1526     s = format (0, "SCRIPT: l2_fib_table_dump ");
1527
1528     s = format (s, "bd_id %d ", ntohl(mp->bd_id));
1529
1530     FINISH;
1531 }
1532
1533 static void *vl_api_control_ping_t_print
1534 (vl_api_control_ping_t * mp, void *handle)
1535 {
1536     u8 * s;
1537
1538     s = format (0, "SCRIPT: control_ping ");
1539
1540     FINISH;
1541 }
1542
1543 static void *vl_api_want_interface_events_t_print
1544 (vl_api_want_interface_events_t * mp, void *handle)
1545 {
1546     u8 * s;
1547
1548     s = format (0, "SCRIPT: want_interface_events pid %d enable %d ",
1549                 ntohl(mp->pid), ntohl(mp->enable_disable));
1550
1551     FINISH;
1552 }
1553
1554 static void *vl_api_cli_request_t_print
1555 (vl_api_cli_request_t * mp, void *handle)
1556 {
1557     u8 * s;
1558
1559     s = format (0, "SCRIPT: cli_request ");
1560
1561     FINISH;
1562 }
1563
1564 static void *vl_api_memclnt_create_t_print
1565 (vl_api_memclnt_create_t * mp, void *handle)
1566 {
1567     u8 * s;
1568
1569     s = format (0, "SCRIPT: memclnt_create name %s ", mp->name);
1570
1571     FINISH;
1572 }
1573
1574 static void *vl_api_show_version_t_print
1575 (vl_api_show_version_t * mp, void *handle)
1576 {
1577     u8 * s;
1578
1579     s = format (0, "SCRIPT: show_version ");
1580
1581     FINISH;
1582 }
1583
1584 static void *vl_api_vxlan_gpe_add_del_tunnel_t_print
1585 (vl_api_vxlan_gpe_add_del_tunnel_t * mp, void *handle)
1586 {
1587     u8 * s;
1588
1589     s = format (0, "SCRIPT: vxlan_gpe_add_del_tunnel ");
1590
1591     s = format (s, "local %U ", format_ip46_address, &mp->local, mp->is_ipv6);
1592
1593     s = format (s, "remote %U ", format_ip46_address, &mp->remote, mp->is_ipv6);
1594
1595     s = format (s, "protocol %d ", ntohl(mp->protocol));
1596
1597     s = format (s, "vni %d ", ntohl(mp->vni));
1598
1599     if (mp->is_add == 0)
1600         s = format (s, "del ");
1601
1602     if (mp->encap_vrf_id)
1603         s = format (s, "encap-vrf-id %d ", ntohl(mp->encap_vrf_id));
1604
1605     if (mp->decap_vrf_id)
1606         s = format (s, "decap-vrf-id %d ", ntohl(mp->decap_vrf_id));
1607
1608     FINISH;
1609 }
1610
1611 static void * vl_api_vxlan_gpe_tunnel_dump_t_print
1612 (vl_api_vxlan_gpe_tunnel_dump_t * mp, void *handle)
1613 {
1614     u8 * s;
1615
1616     s = format (0, "SCRIPT: vxlan_gpe_tunnel_dump ");
1617
1618     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1619
1620     FINISH;
1621 }
1622
1623 static void *vl_api_interface_name_renumber_t_print
1624 (vl_api_interface_name_renumber_t * mp, void * handle)
1625 {
1626     u8 * s;
1627
1628     s = format (0, "SCRIPT: interface_renumber ");
1629
1630     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1631
1632     s = format (s, "new_show_dev_instance %d ",
1633                 ntohl(mp->new_show_dev_instance));
1634
1635     FINISH;
1636 }
1637
1638 static void *vl_api_want_ip4_arp_events_t_print
1639 (vl_api_want_ip4_arp_events_t * mp, void * handle)
1640 {
1641     u8 * s;
1642
1643     s = format (0, "SCRIPT: want_ip4_arp_events ");
1644     s = format (s, "pid %d address %U ", mp->pid,
1645                 format_ip4_address, &mp->address);
1646     if (mp->enable_disable == 0)
1647         s = format (s, "del ");
1648
1649     FINISH;
1650 }
1651
1652 static void *vl_api_input_acl_set_interface_t_print
1653 (vl_api_input_acl_set_interface_t * mp, void *handle)
1654 {
1655     u8 * s;
1656
1657     s = format (0, "SCRIPT: input_acl_set_interface ");
1658
1659     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1660     s = format (s, "ip4-table %d ", ntohl(mp->ip4_table_index));
1661     s = format (s, "ip6-table %d ", ntohl(mp->ip6_table_index));
1662     s = format (s, "l2-table %d ", ntohl(mp->l2_table_index));
1663
1664     if (mp->is_add == 0)
1665         s = format (s, "del ");
1666
1667     FINISH;
1668 }
1669
1670 static void * vl_api_ip_address_dump_t_print
1671 (vl_api_ip_address_dump_t * mp, void *handle)
1672 {
1673     u8 * s;
1674
1675     s = format (0, "SCRIPT: ip6_address_dump ");
1676     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1677     s = format (s, "is_ipv6 %d ", mp->is_ipv6 != 0);
1678
1679     FINISH;
1680 }
1681
1682 static void * vl_api_ip_dump_t_print
1683 (vl_api_ip_dump_t * mp, void *handle)
1684 {
1685     u8 * s;
1686
1687     s = format (0, "SCRIPT: ip_dump ");
1688     s = format (s, "is_ipv6 %d ", mp->is_ipv6 != 0);
1689
1690     FINISH;
1691 }
1692
1693 static void * vl_api_cop_interface_enable_disable_t_print
1694 (vl_api_cop_interface_enable_disable_t * mp, void *handle)
1695 {
1696     u8 * s;
1697
1698     s = format (0, "SCRIPT: cop_interface_enable_disable ");
1699     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1700     if (mp->enable_disable)
1701         s = format (s, "enable ");
1702     else
1703         s = format (s, "disable ");
1704
1705     FINISH;
1706 }
1707
1708 static void * vl_api_cop_whitelist_enable_disable_t_print
1709 (vl_api_cop_whitelist_enable_disable_t * mp, void *handle)
1710 {
1711     u8 * s;
1712
1713     s = format (0, "SCRIPT: cop_whitelist_enable_disable ");
1714     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1715     s = format (s, "fib-id %d ", ntohl(mp->fib_id));
1716     if (mp->ip4)
1717         s = format (s, "ip4 ");
1718     if (mp->ip6)
1719         s = format (s, "ip6 ");
1720     if (mp->default_cop)
1721         s = format (s, "default ");
1722
1723     FINISH;
1724 }
1725
1726 static void * vl_api_af_packet_create_t_print
1727 (vl_api_af_packet_create_t * mp, void *handle)
1728 {
1729     u8 * s;
1730
1731     s = format (0, "SCRIPT: af_packet_create ");
1732     s = format (s, "host_if_name %s ", mp->host_if_name);
1733     if ( mp->use_random_hw_addr)
1734       s = format (s, "hw_addr random ");
1735     else
1736       s = format (s, "hw_addr %U ", format_ethernet_address, mp->hw_addr);
1737
1738     FINISH;
1739 }
1740
1741 static void * vl_api_af_packet_delete_t_print
1742 (vl_api_af_packet_delete_t * mp, void *handle)
1743 {
1744     u8 * s;
1745
1746     s = format (0, "SCRIPT: af_packet_delete ");
1747     s = format (s, "host_if_name %s ", mp->host_if_name);
1748
1749     FINISH;
1750 }
1751
1752 static u8 * format_policer_action (u8 * s, va_list * va)
1753 {
1754     u32 action = va_arg (*va, u32);
1755     u32 dscp = va_arg (*va, u32);
1756     char * t = 0;
1757
1758     if (action == SSE2_QOS_ACTION_DROP)
1759         s = format (s, "drop");
1760     else if (action == SSE2_QOS_ACTION_TRANSMIT)
1761         s = format (s, "transmit");
1762     else if (action == SSE2_QOS_ACTION_MARK_AND_TRANSMIT) {
1763         s = format (s, "mark-and-transmit ");
1764         switch (dscp) {
1765         #define _(v,f,str) case VNET_DSCP_##f: t = str; break;
1766             foreach_vnet_dscp
1767         #undef _
1768         default:
1769             break;
1770         }
1771         s = format (s, "%s", t);
1772     }
1773
1774     return s;
1775 }
1776
1777 static void * vl_api_policer_add_del_t_print
1778 (vl_api_policer_add_del_t * mp, void *handle)
1779 {
1780     u8 * s;
1781
1782     s = format (0, "SCRIPT: policer_add_del ");
1783     s = format (s, "name %s ", mp->name);
1784     s = format (s, "cir %d ", mp->cir);
1785     s = format (s, "eir %d ", mp->eir);
1786     s = format (s, "cb %d ", mp->cb);
1787     s = format (s, "eb %d ", mp->eb);
1788
1789     switch (mp->rate_type) {
1790     case SSE2_QOS_RATE_KBPS:
1791         s = format (s, "rate_type kbps ");
1792         break;
1793     case SSE2_QOS_RATE_PPS:
1794         s = format (s, "rate_type pps ");
1795         break;
1796     default:
1797         break;
1798     }
1799
1800     switch (mp->round_type) {
1801     case SSE2_QOS_ROUND_TO_CLOSEST:
1802         s = format (s, "round_type closest ");
1803         break;
1804     case SSE2_QOS_ROUND_TO_UP:
1805         s = format (s, "round_type up ");
1806         break;
1807     case SSE2_QOS_ROUND_TO_DOWN:
1808         s = format (s, "round_type down ");
1809         break;
1810     default:
1811         break;
1812     }
1813
1814     switch (mp->type) {
1815     case SSE2_QOS_POLICER_TYPE_1R2C:
1816         s = format (s, "type 1r2c ");
1817         break;
1818     case SSE2_QOS_POLICER_TYPE_1R3C_RFC_2697:
1819         s = format (s, "type 1r3c ");
1820         break;
1821     case SSE2_QOS_POLICER_TYPE_2R3C_RFC_2698:
1822         s = format (s, "type 2r3c-2698 ");
1823         break;
1824     case SSE2_QOS_POLICER_TYPE_2R3C_RFC_4115:
1825         s = format (s, "type 2r3c-4115 ");
1826         break;
1827     case SSE2_QOS_POLICER_TYPE_2R3C_RFC_MEF5CF1:
1828         s = format (s, "type 2r3c-mef5cf1 ");
1829         break;
1830     default:
1831          break;
1832     }
1833
1834     s = format (s, "conform_action %U ", format_policer_action,
1835                 mp->conform_action_type, mp->conform_dscp);
1836     s = format (s, "exceed_action %U ", format_policer_action,
1837                 mp->exceed_action_type, mp->exceed_dscp);
1838     s = format (s, "violate_action %U ", format_policer_action,
1839                 mp->violate_action_type, mp->violate_dscp);
1840
1841     if (mp->color_aware)
1842         s = format (s, "color-aware ");
1843     if (mp->is_add == 0)
1844         s = format (s, "del ");
1845
1846     FINISH;
1847 }
1848
1849 static void * vl_api_policer_dump_t_print
1850 (vl_api_policer_dump_t * mp, void *handle)
1851 {
1852     u8 * s;
1853
1854     s = format (0, "SCRIPT: policer_dump ");
1855     if (mp->match_name_valid)
1856         s = format (s, "name %s ", mp->match_name);
1857
1858     FINISH;
1859 }
1860
1861 static void * vl_api_policer_classify_set_interface_t_print
1862 (vl_api_policer_classify_set_interface_t * mp, void *handle)
1863 {
1864     u8 * s;
1865
1866     s = format (0, "SCRIPT: policer_classify_set_interface ");
1867     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1868     if (mp->ip4_table_index != ~0)
1869         s = format (s, "ip4-table %d ", ntohl(mp->ip4_table_index));
1870     if (mp->ip6_table_index != ~0)
1871         s = format (s, "ip6-table %d ", ntohl(mp->ip6_table_index));
1872     if (mp->l2_table_index != ~0)
1873         s = format (s, "l2-table %d ", ntohl(mp->l2_table_index));
1874     if (mp->is_add == 0)
1875         s = format (s, "del ");
1876
1877     FINISH;
1878 }
1879
1880 static void * vl_api_policer_classify_dump_t_print
1881 (vl_api_policer_classify_dump_t * mp, void *handle)
1882 {
1883     u8 * s;
1884
1885     s = format (0, "SCRIPT: policer_classify_dump ");
1886     switch (mp->type) {
1887     case POLICER_CLASSIFY_TABLE_IP4:
1888         s = format (s, "type ip4 ");
1889         break;
1890     case POLICER_CLASSIFY_TABLE_IP6:
1891         s = format (s, "type ip6 ");
1892         break;
1893     case POLICER_CLASSIFY_TABLE_L2:
1894         s = format (s, "type l2 ");
1895         break;
1896     default:
1897         break;
1898     }
1899
1900     FINISH;
1901 }
1902
1903 static void *vl_api_sw_interface_clear_stats_t_print
1904 (vl_api_sw_interface_clear_stats_t * mp, void *handle)
1905 {
1906     u8 * s;
1907
1908     s = format (0, "SCRIPT: sw_interface_clear_stats ");
1909     if (mp->sw_if_index != ~0)
1910       s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1911
1912     FINISH;
1913 }
1914
1915 static void *vl_api_mpls_gre_tunnel_dump_t_print
1916 (vl_api_mpls_gre_tunnel_dump_t * mp, void *handle)
1917 {
1918     u8 * s;
1919
1920     s = format (0, "SCRIPT: mpls_gre_tunnel_dump ");
1921
1922     s = format (s, "tunnel_index %d ", ntohl(mp->tunnel_index));
1923
1924     FINISH;
1925 }
1926
1927 static void *vl_api_mpls_eth_tunnel_dump_t_print
1928 (vl_api_mpls_eth_tunnel_dump_t * mp, void *handle)
1929 {
1930     u8 * s;
1931
1932     s = format (0, "SCRIPT: mpls_eth_tunnel_dump ");
1933
1934     s = format (s, "tunnel_index %d ", ntohl(mp->tunnel_index));
1935
1936     FINISH;
1937 }
1938
1939 static void *vl_api_mpls_fib_encap_dump_t_print
1940 (vl_api_mpls_fib_encap_dump_t * mp, void *handle)
1941 {
1942     u8 * s;
1943
1944     s = format (0, "SCRIPT: mpls_fib_encap_dump ");
1945
1946     FINISH;
1947 }
1948
1949 static void *vl_api_mpls_fib_decap_dump_t_print
1950 (vl_api_mpls_fib_decap_dump_t * mp, void *handle)
1951 {
1952     u8 * s;
1953
1954     s = format (0, "SCRIPT: mpls_fib_decap_dump ");
1955
1956     FINISH;
1957 }
1958
1959 static void *vl_api_classify_table_ids_t_print
1960 (vl_api_classify_table_ids_t * mp, void *handle)
1961 {
1962     u8 * s;
1963
1964     s = format (0, "SCRIPT: classify_table_ids ");
1965
1966     FINISH;
1967 }
1968
1969 static void *vl_api_classify_table_by_interface_t_print
1970 (vl_api_classify_table_by_interface_t * mp, void *handle)
1971 {
1972     u8 * s;
1973
1974     s = format (0, "SCRIPT: classify_table_by_interface ");
1975     if (mp->sw_if_index != ~0)
1976       s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1977
1978     FINISH;
1979 }
1980
1981 static void *vl_api_classify_table_info_t_print
1982 (vl_api_classify_table_info_t * mp, void *handle)
1983 {
1984     u8 * s;
1985
1986     s = format (0, "SCRIPT: classify_table_info ");
1987     if (mp->table_id != ~0)
1988       s = format (s, "table_id %d ", ntohl(mp->table_id));
1989
1990     FINISH;
1991 }
1992
1993 static void *vl_api_classify_session_dump_t_print
1994 (vl_api_classify_session_dump_t * mp, void *handle)
1995 {
1996     u8 * s;
1997
1998     s = format (0, "SCRIPT: classify_session_dump ");
1999     if (mp->table_id != ~0)
2000       s = format (s, "table_id %d ", ntohl(mp->table_id));
2001
2002     FINISH;
2003 }
2004
2005 static void *vl_api_ipfix_enable_t_print
2006 (vl_api_ipfix_enable_t * mp, void *handle)
2007 {
2008     u8 * s;
2009
2010     s = format (0, "SCRIPT: ipfix_enable ");
2011
2012     s = format (s, "collector-address %U ", format_ip4_address,
2013                 (ip4_address_t *) mp->collector_address);
2014     s = format (s, "collector-port %d ", ntohs(mp->collector_port));
2015     s = format (s, "src-address %U ", format_ip4_address,
2016                 (ip4_address_t *) mp->src_address);
2017     s = format (s, "vrf-id %d ", ntohl(mp->vrf_id));
2018     s = format (s, "path-mtu %d ", ntohl(mp->path_mtu));
2019     s = format (s, "template-interval %d ", ntohl(mp->template_interval));
2020
2021     FINISH;
2022 }
2023
2024 static void *vl_api_ipfix_dump_t_print
2025 (vl_api_ipfix_dump_t * mp, void *handle)
2026 {
2027     u8 * s;
2028
2029     s = format (0, "SCRIPT: ipfix_dump ");
2030
2031     FINISH;
2032 }
2033
2034 static void *vl_api_get_next_index_t_print
2035 (vl_api_get_next_index_t * mp, void *handle)
2036 {
2037     u8 * s;
2038
2039     s = format (0, "SCRIPT: get_next_index ");
2040     s = format (s, "node-name %s ", mp->node_name);
2041     s = format (s, "next-node-name %s ", mp->next_name);
2042
2043     FINISH;
2044 }
2045
2046 static void *vl_api_pg_create_interface_t_print
2047 (vl_api_pg_create_interface_t * mp, void *handle)
2048 {
2049     u8 * s;
2050
2051     s = format (0, "SCRIPT: pg_create_interface ");
2052     s = format (0, "if_id %d", ntohl(mp->interface_id));
2053
2054     FINISH;
2055 }
2056
2057 static void *vl_api_pg_capture_t_print
2058 (vl_api_pg_capture_t * mp, void *handle)
2059 {
2060     u8 * s;
2061
2062     s = format (0, "SCRIPT: pg_capture ");
2063     s = format (0, "if_id %d ", ntohl(mp->interface_id));
2064     s = format (0, "pcap %s", mp->pcap_file_name);
2065     if (mp->count != ~0)
2066       s = format (s, "count %d ", ntohl(mp->count));
2067     if (!mp->is_enabled)
2068         s = format (s, "disable");
2069
2070     FINISH;
2071 }
2072
2073 static void *vl_api_pg_enable_disable_t_print
2074 (vl_api_pg_enable_disable_t * mp, void *handle)
2075 {
2076         u8 * s;
2077
2078     s = format (0, "SCRIPT: pg_enable_disable ");
2079     if (ntohl(mp->stream_name_length) > 0)
2080       s = format (s, "stream %s", mp->stream_name);
2081     if (!mp->is_enabled)
2082       s = format (s, "disable");
2083
2084     FINISH;
2085 }
2086
2087 static void *vl_api_ip_source_and_port_range_check_add_del_t_print
2088 (vl_api_ip_source_and_port_range_check_add_del_t * mp, void *handle)
2089 {
2090     u8 * s;
2091     int i;
2092
2093     s = format (0, "SCRIPT: ip_source_and_port_range_check_add_del ");
2094     if (mp->is_ipv6)
2095         s = format (s, "%U/%d ", format_ip6_address, mp->address,
2096                     mp->mask_length);
2097     else
2098         s = format (s, "%U/%d ", format_ip4_address, mp->address,
2099                     mp->mask_length);
2100
2101     for (i = 0; i < mp->number_of_ranges; i++) {
2102         s = format (s, "range %d - %d ", mp->low_ports[i], mp->high_ports[i]);
2103     }
2104
2105     s = format (s, "vrf %d ", ntohl(mp->vrf_id));
2106
2107     if (mp->is_add == 0)
2108         s = format (s, "del ");
2109
2110     FINISH;
2111 }
2112
2113 static void *vl_api_ip_source_and_port_range_check_interface_add_del_t_print
2114 (vl_api_ip_source_and_port_range_check_interface_add_del_t * mp, void *handle)
2115 {
2116     u8 * s;
2117
2118     s = format (0, "SCRIPT: ip_source_and_port_range_check_interface_add_del ");
2119
2120     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
2121
2122     if (mp->tcp_out_vrf_id != ~0)
2123         s = format (s, "tcp-out-vrf %d ", ntohl(mp->tcp_out_vrf_id));
2124
2125     if (mp->udp_out_vrf_id != ~0)
2126         s = format (s, "udp-out-vrf %d ", ntohl(mp->udp_out_vrf_id));
2127
2128     if (mp->tcp_in_vrf_id != ~0)
2129         s = format (s, "tcp-in-vrf %d ", ntohl(mp->tcp_in_vrf_id));
2130
2131     if (mp->udp_in_vrf_id != ~0)
2132         s = format (s, "udp-in-vrf %d ", ntohl(mp->udp_in_vrf_id));
2133
2134     if (mp->is_add == 0)
2135         s = format (s, "del ");
2136
2137     FINISH;
2138 }
2139
2140 #define foreach_custom_print_function                                   \
2141 _(CREATE_LOOPBACK, create_loopback)                                     \
2142 _(SW_INTERFACE_SET_FLAGS, sw_interface_set_flags)                       \
2143 _(SW_INTERFACE_ADD_DEL_ADDRESS, sw_interface_add_del_address)           \
2144 _(SW_INTERFACE_SET_TABLE, sw_interface_set_table)                       \
2145 _(SW_INTERFACE_SET_VPATH, sw_interface_set_vpath)                       \
2146 _(TAP_CONNECT, tap_connect)                                             \
2147 _(TAP_MODIFY, tap_modify)                                               \
2148 _(TAP_DELETE, tap_delete)                                               \
2149 _(SW_INTERFACE_TAP_DUMP, sw_interface_tap_dump)                         \
2150 _(IP_ADD_DEL_ROUTE, ip_add_del_route)                                   \
2151 _(PROXY_ARP_ADD_DEL, proxy_arp_add_del)                                 \
2152 _(PROXY_ARP_INTFC_ENABLE_DISABLE, proxy_arp_intfc_enable_disable)       \
2153 _(MPLS_ADD_DEL_DECAP, mpls_add_del_decap)                               \
2154 _(MPLS_ADD_DEL_ENCAP, mpls_add_del_encap)                               \
2155 _(MPLS_GRE_ADD_DEL_TUNNEL, mpls_gre_add_del_tunnel)                     \
2156 _(MPLS_ETHERNET_ADD_DEL_TUNNEL, mpls_ethernet_add_del_tunnel)           \
2157 _(MPLS_ETHERNET_ADD_DEL_TUNNEL_2, mpls_ethernet_add_del_tunnel_2)       \
2158 _(SW_INTERFACE_SET_UNNUMBERED, sw_interface_set_unnumbered)             \
2159 _(IP_NEIGHBOR_ADD_DEL, ip_neighbor_add_del)                             \
2160 _(RESET_VRF, reset_vrf)                                                 \
2161 _(CREATE_VLAN_SUBIF, create_vlan_subif)                                 \
2162 _(CREATE_SUBIF, create_subif)                                           \
2163 _(OAM_ADD_DEL, oam_add_del)                                             \
2164 _(RESET_FIB, reset_fib)                                                 \
2165 _(DHCP_PROXY_CONFIG, dhcp_proxy_config)                                 \
2166 _(DHCP_PROXY_SET_VSS, dhcp_proxy_set_vss)                               \
2167 _(SET_IP_FLOW_HASH, set_ip_flow_hash)                                   \
2168 _(SW_INTERFACE_IP6_SET_LINK_LOCAL_ADDRESS,                              \
2169   sw_interface_ip6_set_link_local_address)                              \
2170 _(SW_INTERFACE_IP6ND_RA_PREFIX, sw_interface_ip6nd_ra_prefix)           \
2171 _(SW_INTERFACE_IP6ND_RA_CONFIG, sw_interface_ip6nd_ra_config)           \
2172 _(SET_ARP_NEIGHBOR_LIMIT, set_arp_neighbor_limit)                       \
2173 _(L2_PATCH_ADD_DEL, l2_patch_add_del)                                   \
2174 _(SR_TUNNEL_ADD_DEL, sr_tunnel_add_del)                                 \
2175 _(SR_POLICY_ADD_DEL, sr_policy_add_del)                                 \
2176 _(SR_MULTICAST_MAP_ADD_DEL, sr_multicast_map_add_del)                   \
2177 _(SW_INTERFACE_SET_L2_XCONNECT, sw_interface_set_l2_xconnect)           \
2178 _(L2FIB_ADD_DEL, l2fib_add_del)                                         \
2179 _(L2_FLAGS, l2_flags)                                                   \
2180 _(BRIDGE_FLAGS, bridge_flags)                                           \
2181 _(CLASSIFY_ADD_DEL_TABLE, classify_add_del_table)                       \
2182 _(CLASSIFY_ADD_DEL_SESSION, classify_add_del_session)                   \
2183 _(SW_INTERFACE_SET_L2_BRIDGE, sw_interface_set_l2_bridge)               \
2184 _(BRIDGE_DOMAIN_ADD_DEL, bridge_domain_add_del)                         \
2185 _(BRIDGE_DOMAIN_DUMP, bridge_domain_dump)                               \
2186 _(CLASSIFY_SET_INTERFACE_IP_TABLE, classify_set_interface_ip_table)     \
2187 _(CLASSIFY_SET_INTERFACE_L2_TABLES, classify_set_interface_l2_tables)   \
2188 _(ADD_NODE_NEXT, add_node_next)                                         \
2189 _(DHCP_PROXY_CONFIG_2, dhcp_proxy_config_2)                             \
2190 _(DHCP_CLIENT_CONFIG, dhcp_client_config)                               \
2191 _(L2TPV3_CREATE_TUNNEL, l2tpv3_create_tunnel)                           \
2192 _(L2TPV3_SET_TUNNEL_COOKIES, l2tpv3_set_tunnel_cookies)                 \
2193 _(L2TPV3_INTERFACE_ENABLE_DISABLE, l2tpv3_interface_enable_disable)     \
2194 _(L2TPV3_SET_LOOKUP_KEY, l2tpv3_set_lookup_key)                         \
2195 _(SW_IF_L2TPV3_TUNNEL_DUMP, sw_if_l2tpv3_tunnel_dump)                   \
2196 _(VXLAN_ADD_DEL_TUNNEL, vxlan_add_del_tunnel)                           \
2197 _(VXLAN_TUNNEL_DUMP, vxlan_tunnel_dump)                                 \
2198 _(GRE_ADD_DEL_TUNNEL, gre_add_del_tunnel)                               \
2199 _(GRE_TUNNEL_DUMP, gre_tunnel_dump)                                     \
2200 _(L2_FIB_CLEAR_TABLE, l2_fib_clear_table)                               \
2201 _(L2_INTERFACE_EFP_FILTER, l2_interface_efp_filter)                     \
2202 _(L2_INTERFACE_VLAN_TAG_REWRITE, l2_interface_vlan_tag_rewrite)         \
2203 _(CREATE_VHOST_USER_IF, create_vhost_user_if)                           \
2204 _(MODIFY_VHOST_USER_IF, modify_vhost_user_if)                           \
2205 _(DELETE_VHOST_USER_IF, delete_vhost_user_if)                           \
2206 _(SW_INTERFACE_DUMP, sw_interface_dump)                                 \
2207 _(CONTROL_PING, control_ping)                                           \
2208 _(WANT_INTERFACE_EVENTS, want_interface_events)                         \
2209 _(CLI_REQUEST, cli_request)                                             \
2210 _(MEMCLNT_CREATE, memclnt_create)                                       \
2211 _(SW_INTERFACE_VHOST_USER_DUMP, sw_interface_vhost_user_dump)           \
2212 _(SHOW_VERSION, show_version)                                           \
2213 _(L2_FIB_TABLE_DUMP, l2_fib_table_dump)                                 \
2214 _(VXLAN_GPE_ADD_DEL_TUNNEL, vxlan_gpe_add_del_tunnel)                           \
2215 _(VXLAN_GPE_TUNNEL_DUMP, vxlan_gpe_tunnel_dump)                         \
2216 _(INTERFACE_NAME_RENUMBER, interface_name_renumber)                     \
2217 _(WANT_IP4_ARP_EVENTS, want_ip4_arp_events)                             \
2218 _(INPUT_ACL_SET_INTERFACE, input_acl_set_interface)                     \
2219 _(IP_ADDRESS_DUMP, ip_address_dump)                                     \
2220 _(IP_DUMP, ip_dump)                                                     \
2221 _(DELETE_LOOPBACK, delete_loopback)                                     \
2222 _(BD_IP_MAC_ADD_DEL, bd_ip_mac_add_del)                                 \
2223 _(COP_INTERFACE_ENABLE_DISABLE, cop_interface_enable_disable)           \
2224 _(COP_WHITELIST_ENABLE_DISABLE, cop_whitelist_enable_disable)           \
2225 _(AF_PACKET_CREATE, af_packet_create)                                   \
2226 _(AF_PACKET_DELETE, af_packet_delete)                                   \
2227 _(SW_INTERFACE_CLEAR_STATS, sw_interface_clear_stats)                   \
2228 _(MPLS_GRE_TUNNEL_DUMP, mpls_gre_tunnel_dump)                           \
2229 _(MPLS_ETH_TUNNEL_DUMP, mpls_eth_tunnel_dump)                           \
2230 _(MPLS_FIB_ENCAP_DUMP, mpls_fib_encap_dump)                             \
2231 _(MPLS_FIB_DECAP_DUMP, mpls_fib_decap_dump)                             \
2232 _(CLASSIFY_TABLE_IDS,classify_table_ids)                                \
2233 _(CLASSIFY_TABLE_BY_INTERFACE, classify_table_by_interface)             \
2234 _(CLASSIFY_TABLE_INFO,classify_table_info)                              \
2235 _(CLASSIFY_SESSION_DUMP,classify_session_dump)                          \
2236 _(IPFIX_ENABLE,ipfix_enable)                                            \
2237 _(IPFIX_DUMP,ipfix_dump)                                                \
2238 _(GET_NEXT_INDEX, get_next_index)                                       \
2239 _(PG_CREATE_INTERFACE,pg_create_interface)                              \
2240 _(PG_CAPTURE, pg_capture)                                               \
2241 _(PG_ENABLE_DISABLE, pg_enable_disable)                                 \
2242 _(POLICER_ADD_DEL, policer_add_del)                                     \
2243 _(POLICER_DUMP, policer_dump)                                           \
2244 _(POLICER_CLASSIFY_SET_INTERFACE, policer_classify_set_interface)       \
2245 _(POLICER_CLASSIFY_DUMP, policer_classify_dump)                         \
2246 _(IP_SOURCE_AND_PORT_RANGE_CHECK_ADD_DEL,                               \
2247   ip_source_and_port_range_check_add_del)                               \
2248 _(IP_SOURCE_AND_PORT_RANGE_CHECK_INTERFACE_ADD_DEL,                     \
2249   ip_source_and_port_range_check_interface_add_del)
2250
2251
2252 void vl_msg_api_custom_dump_configure (api_main_t *am)
2253 {
2254 #define _(n,f) am->msg_print_handlers[VL_API_##n]       \
2255     = (void *) vl_api_##f##_t_print;
2256     foreach_custom_print_function;
2257 #undef _
2258 }