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