VPP-25 Add API for GRE tunnel create/delete/show.
[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     s = format (s, "src %U dst %U/%d ", format_ip6_address, 
1018                 (ip6_address_t *) mp->src_address,
1019                 format_ip6_address,
1020                 (ip6_address_t *) mp->dst_address, mp->dst_mask_width);
1021     
1022     this_address = (ip6_address_t *)mp->segs_and_tags;
1023     for (i = 0; i < mp->n_segments; i++) {
1024         s = format (s, "next %U ", format_ip6_address, this_address);
1025         this_address++;
1026     }
1027     for (i = 0; i < mp->n_tags; i++) {
1028         s = format (s, "tag %U ", format_ip6_address, this_address);
1029         this_address++;
1030     }
1031                 
1032     flags_host_byte_order = clib_net_to_host_u16 (mp->flags_net_byte_order);
1033
1034     if (flags_host_byte_order & IP6_SR_HEADER_FLAG_CLEANUP)
1035         s = format (s, " clean ");
1036
1037     if (flags_host_byte_order & IP6_SR_HEADER_FLAG_PROTECTED)
1038         s = format (s, "protected ");
1039
1040     for (i = 1; i <= 4; i++) {
1041         pl_flag = ip6_sr_policy_list_flags (flags_host_byte_order, i);
1042         
1043         switch (pl_flag) {
1044         case IP6_SR_HEADER_FLAG_PL_ELT_NOT_PRESENT:
1045             continue;
1046
1047         case IP6_SR_HEADER_FLAG_PL_ELT_INGRESS_PE:
1048             s = format (s, "InPE %d ", i);
1049             break;
1050
1051         case IP6_SR_HEADER_FLAG_PL_ELT_EGRESS_PE:
1052             s = format (s, "EgPE %d ", i);
1053             break;
1054             
1055         case IP6_SR_HEADER_FLAG_PL_ELT_ORIG_SRC_ADDR:
1056             s = format (s, "OrgSrc %d ", i);
1057             break;
1058
1059         default:
1060             clib_warning ("BUG: pl elt %d value %d", i, pl_flag);
1061             break;
1062         }
1063     }
1064
1065     if (mp->is_add == 0)
1066         s = format (s, "del ");
1067     
1068     FINISH;
1069 }
1070
1071 static void *vl_api_classify_add_del_table_t_print
1072 (vl_api_classify_add_del_table_t * mp, void *handle)
1073 {
1074     u8 * s;
1075     int i;
1076
1077     s = format (0, "SCRIPT: classify_add_del_table ");
1078
1079     if (mp->is_add == 0) {
1080         s = format (s, "table %d ", ntohl(mp->table_index));
1081         s = format (s, "del ");
1082     } else {
1083         s = format (s, "nbuckets %d ", ntohl(mp->nbuckets));
1084         s = format (s, "memory_size %d ", ntohl(mp->memory_size));
1085         s = format (s, "skip %d ", ntohl(mp->skip_n_vectors));
1086         s = format (s, "match %d ", ntohl(mp->match_n_vectors));
1087         s = format (s, "next-table %d ", ntohl(mp->next_table_index));
1088         s = format (s, "miss-next %d ", ntohl(mp->miss_next_index));
1089         s = format (s, "mask hex ");
1090         for (i = 0; i < ntohl(mp->match_n_vectors) * sizeof (u32x4); i++)
1091             s = format (s, "%02x", mp->mask[i]);
1092         vec_add1 (s, ' ');
1093     }
1094     
1095     FINISH;
1096 }
1097
1098 static void *vl_api_classify_add_del_session_t_print
1099 (vl_api_classify_add_del_session_t * mp, void *handle)
1100 {
1101     u8 * s;
1102     int i, limit=0;
1103
1104     s = format (0, "SCRIPT: classify_add_del_session ");
1105
1106     s = format (s, "table_index %d ", ntohl (mp->table_index));
1107     s = format (s, "hit_next_index %d ", ntohl (mp->hit_next_index));
1108     s = format (s, "opaque_index %d ", ntohl (mp->opaque_index));
1109     s = format (s, "advance %d ", ntohl (mp->advance));
1110     if (mp->is_add == 0)
1111         s = format (s, "del ");
1112     
1113     s = format (s, "match hex ");
1114     for (i = 5 * sizeof(u32x4)-1; i > 0; i--) {
1115         if (mp->match[i] != 0) {
1116             limit = i + 1;
1117             break;
1118         }
1119     }
1120
1121     for (i = 0; i < limit; i++)
1122         s = format (s, "%02x", mp->match[i]);
1123     
1124     FINISH;
1125 }
1126
1127 static void *vl_api_classify_set_interface_ip_table_t_print
1128 (vl_api_classify_set_interface_ip_table_t * mp, void *handle)
1129 {
1130     u8 * s;
1131
1132     s = format (0, "SCRIPT: classify_set_interface_ip_table ");
1133
1134     if (mp->is_ipv6) 
1135         s = format (s, "ipv6 ");
1136         
1137     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1138     s = format (s, "table %d ", ntohl(mp->table_index));
1139
1140     FINISH;
1141 }
1142
1143 static void *vl_api_classify_set_interface_l2_tables_t_print
1144 (vl_api_classify_set_interface_l2_tables_t * mp, void *handle)
1145 {
1146     u8 * s;
1147
1148     s = format (0, "SCRIPT: classify_set_interface_l2_tables ");
1149
1150     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1151     s = format (s, "ip4-table %d ", ntohl(mp->ip4_table_index));
1152     s = format (s, "ip6-table %d ", ntohl(mp->ip6_table_index));
1153     s = format (s, "other-table %d ", ntohl(mp->other_table_index));
1154
1155     FINISH;
1156 }
1157
1158 static void *vl_api_add_node_next_t_print
1159 (vl_api_add_node_next_t * mp, void *handle)
1160 {
1161     u8 * s;
1162
1163     s = format (0, "SCRIPT: add_node_next ");
1164
1165     s = format (0, "node %s next %s ", mp->node_name, mp->next_name);
1166
1167     FINISH;
1168 }
1169
1170 static void *vl_api_l2tpv3_create_tunnel_t_print
1171 (vl_api_l2tpv3_create_tunnel_t * mp, void *handle)
1172 {
1173     u8 * s;
1174
1175     s = format (0, "SCRIPT: l2tpv3_create_tunnel ");
1176
1177     s = format (s, "client_address %U our_address %U ",
1178                 format_ip6_address, (ip6_address_t *)(mp->client_address),
1179                 format_ip6_address, (ip6_address_t *)(mp->our_address));
1180     s = format (s, "local_session_id %d ", ntohl(mp->local_session_id));
1181     s = format (s, "remote_session_id %d ", ntohl(mp->remote_session_id));
1182     s = format (s, "local_cookie %lld ", 
1183                 clib_net_to_host_u64 (mp->local_cookie));
1184     s = format (s, "remote_cookie %lld ", 
1185                 clib_net_to_host_u64 (mp->remote_cookie));
1186     if (mp->l2_sublayer_present)
1187         s = format (s, "l2-sublayer-present ");
1188
1189     FINISH;
1190 }
1191
1192 static void *vl_api_l2tpv3_set_tunnel_cookies_t_print 
1193 (vl_api_l2tpv3_set_tunnel_cookies_t * mp, void *handle)
1194 {
1195     u8 * s;
1196
1197     s = format (0, "SCRIPT: l2tpv3_set_tunnel_cookies ");
1198
1199     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1200
1201     s = format (s, "new_local_cookie %llu ", 
1202                 clib_net_to_host_u64 (mp->new_local_cookie));
1203     
1204     s = format (s, "new_remote_cookie %llu ", 
1205                 clib_net_to_host_u64 (mp->new_remote_cookie));
1206
1207     FINISH;
1208 }
1209
1210 static void *vl_api_l2tpv3_interface_enable_disable_t_print
1211 (vl_api_l2tpv3_interface_enable_disable_t *mp, void *handle)
1212 {
1213     u8 * s;
1214
1215     s = format (0, "SCRIPT: l2tpv3_interface_enable_disable ");
1216
1217     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1218
1219     if (mp->enable_disable == 0)
1220         s = format (s, "del ");
1221
1222     FINISH;
1223 }
1224
1225 static void * vl_api_l2tpv3_set_lookup_key_t_print
1226 (vl_api_l2tpv3_set_lookup_key_t * mp, void *handle)
1227 {
1228     u8 * s;
1229     char * str = "unknown";
1230
1231     s = format (0, "SCRIPT: l2tpv3_set_lookup_key ");
1232
1233     switch (mp->key) {
1234     case L2T_LOOKUP_SRC_ADDRESS:
1235         str = "lookup_v6_src";
1236         break;
1237     case L2T_LOOKUP_DST_ADDRESS:
1238         str = "lookup_v6_dst";
1239         break;
1240     case L2T_LOOKUP_SESSION_ID:
1241         str = "lookup_session_id";
1242         break;
1243     default:
1244         break;
1245     }
1246
1247     s = format (s, "%s ", str);
1248
1249     FINISH;
1250 }
1251
1252 static void * vl_api_sw_if_l2tpv3_tunnel_dump_t_print
1253 (vl_api_sw_if_l2tpv3_tunnel_dump_t * mp, void *handle)
1254 {
1255     u8 * s;
1256
1257     s = format (0, "SCRIPT: sw_if_l2tpv3_tunnel_dump ");
1258
1259     FINISH;
1260 }
1261
1262 static void * vl_api_vxlan_add_del_tunnel_t_print
1263 (vl_api_vxlan_add_del_tunnel_t * mp, void *handle)
1264 {
1265     u8 * s;
1266
1267     s = format (0, "SCRIPT: vxlan_add_del_tunnel ");
1268
1269     s = format (s, "dst %U ", format_ip46_address,
1270                 (ip46_address_t *)&(mp->dst_address));
1271
1272     s = format (s, "src %U ", format_ip46_address,
1273                 (ip46_address_t *)&(mp->src_address));
1274
1275     if (mp->encap_vrf_id)
1276         s = format (s, "encap-vrf-id %d ", ntohl(mp->encap_vrf_id));
1277
1278     s = format (s, "decap-next %d ", ntohl(mp->decap_next_index));
1279
1280     s = format (s, "vni %d ", ntohl(mp->vni));
1281
1282     if (mp->is_add == 0)
1283         s = format (s, "del ");
1284
1285     FINISH;
1286 }
1287
1288 static void * vl_api_vxlan_tunnel_dump_t_print
1289 (vl_api_vxlan_tunnel_dump_t * mp, void *handle)
1290 {
1291     u8 * s;
1292
1293     s = format (0, "SCRIPT: vxlan_tunnel_dump ");
1294
1295     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1296
1297     FINISH;
1298 }
1299
1300 static void * vl_api_gre_add_del_tunnel_t_print
1301 (vl_api_gre_add_del_tunnel_t * mp, void *handle)
1302 {
1303     u8 * s;
1304
1305     s = format (0, "SCRIPT: gre_add_del_tunnel ");
1306
1307     s = format (s, "dst %U ", format_ip4_address,
1308                 (ip4_address_t *)&(mp->dst_address));
1309
1310     s = format (s, "src %U ", format_ip4_address,
1311                 (ip4_address_t *)&(mp->src_address));
1312
1313     if (mp->outer_table_id)
1314         s = format (s, "outer-fib-id %d ", ntohl(mp->outer_table_id));
1315
1316     if (mp->is_add == 0)
1317         s = format (s, "del ");
1318
1319     FINISH;
1320 }
1321
1322 static void * vl_api_gre_tunnel_dump_t_print
1323 (vl_api_gre_tunnel_dump_t * mp, void *handle)
1324 {
1325     u8 * s;
1326
1327     s = format (0, "SCRIPT: gre_tunnel_dump ");
1328
1329     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1330
1331     FINISH;
1332 }
1333
1334 static void *vl_api_l2_fib_clear_table_t_print
1335 (vl_api_l2_fib_clear_table_t * mp, void *handle)
1336 {
1337     u8 * s;
1338
1339     s = format (0, "SCRIPT: l2_fib_clear_table ");
1340
1341     FINISH;
1342 }
1343
1344 static void *vl_api_l2_interface_efp_filter_t_print
1345 (vl_api_l2_interface_efp_filter_t * mp, void *handle)
1346 {
1347     u8 * s;
1348
1349     s = format (0, "SCRIPT: l2_interface_efp_filter ");
1350
1351     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1352     if (mp->enable_disable)
1353         s = format (s, "enable ");
1354     else
1355         s = format (s, "disable ");
1356
1357     FINISH;
1358 }
1359
1360 static void *vl_api_l2_interface_vlan_tag_rewrite_t_print
1361 (vl_api_l2_interface_vlan_tag_rewrite_t * mp, void *handle)
1362 {
1363     u8 * s;
1364
1365     s = format (0, "SCRIPT: l2_interface_vlan_tag_rewrite ");
1366
1367     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1368     s = format (s, "vtr_op %d ", ntohl(mp->vtr_op));
1369     s = format (s, "push_dot1q %d ", ntohl(mp->push_dot1q));
1370     s = format (s, "tag1 %d ", ntohl(mp->tag1));
1371     s = format (s, "tag2 %d ", ntohl(mp->tag2));
1372
1373     FINISH;
1374 }
1375
1376 static void *vl_api_create_vhost_user_if_t_print
1377 (vl_api_create_vhost_user_if_t * mp, void *handle)
1378 {
1379     u8 * s;
1380
1381     s = format (0, "SCRIPT: create_vhost_user_if ");
1382
1383     s = format (s, "socket %s ", mp->sock_filename);
1384     if (mp->is_server)
1385         s = format (s, "server ");
1386     if (mp->renumber)
1387         s = format (s, "renumber %d ", ntohl(mp->custom_dev_instance));
1388
1389     FINISH;
1390 }
1391
1392 static void *vl_api_modify_vhost_user_if_t_print
1393 (vl_api_modify_vhost_user_if_t * mp, void *handle)
1394 {
1395     u8 * s;
1396
1397     s = format (0, "SCRIPT: modify_vhost_user_if ");
1398
1399     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1400     s = format (s, "socket %s ", mp->sock_filename);
1401     if (mp->is_server)
1402         s = format (s, "server ");
1403     if (mp->renumber)
1404         s = format (s, "renumber %d ", ntohl(mp->custom_dev_instance));
1405
1406     FINISH;
1407 }
1408
1409 static void *vl_api_delete_vhost_user_if_t_print
1410 (vl_api_delete_vhost_user_if_t * mp, void *handle)
1411 {
1412     u8 * s;
1413
1414     s = format (0, "SCRIPT: delete_vhost_user_if ");
1415     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1416
1417     FINISH;
1418 }
1419
1420 static void *vl_api_sw_interface_vhost_user_dump_t_print
1421 (vl_api_sw_interface_vhost_user_dump_t * mp, void *handle)
1422 {
1423     u8 * s;
1424
1425     s = format (0, "SCRIPT: sw_interface_vhost_user_dump ");
1426
1427     FINISH;
1428 }
1429
1430 static void *vl_api_sw_interface_dump_t_print
1431 (vl_api_sw_interface_dump_t * mp, void *handle)
1432 {
1433     u8 * s;
1434
1435     s = format (0, "SCRIPT: sw_interface_dump ");
1436
1437     if (mp->name_filter_valid)
1438         s = format (s, "name_filter %s ", mp->name_filter);
1439     else
1440         s = format (s, "all ");
1441
1442     FINISH;
1443 }
1444
1445 static void *vl_api_l2_fib_table_dump_t_print
1446 (vl_api_l2_fib_table_dump_t * mp, void *handle)
1447 {
1448     u8 * s;
1449
1450     s = format (0, "SCRIPT: l2_fib_table_dump ");
1451
1452     s = format (s, "bd_id %d ", ntohl(mp->bd_id));
1453
1454     FINISH;
1455 }
1456
1457 static void *vl_api_control_ping_t_print
1458 (vl_api_control_ping_t * mp, void *handle)
1459 {
1460     u8 * s;
1461
1462     s = format (0, "SCRIPT: control_ping ");
1463
1464     FINISH;
1465 }
1466
1467 static void *vl_api_want_interface_events_t_print
1468 (vl_api_want_interface_events_t * mp, void *handle)
1469 {
1470     u8 * s;
1471
1472     s = format (0, "SCRIPT: want_interface_events pid %d enable %d ",
1473                 ntohl(mp->pid), ntohl(mp->enable_disable));
1474
1475     FINISH;
1476 }
1477
1478 static void *vl_api_cli_request_t_print
1479 (vl_api_cli_request_t * mp, void *handle)
1480 {
1481     u8 * s;
1482
1483     s = format (0, "SCRIPT: cli_request ");
1484
1485     FINISH;
1486 }
1487
1488 static void *vl_api_memclnt_create_t_print
1489 (vl_api_memclnt_create_t * mp, void *handle)
1490 {
1491     u8 * s;
1492
1493     s = format (0, "SCRIPT: memclnt_create name %s ", mp->name);
1494
1495     FINISH;
1496 }
1497
1498 static void *vl_api_show_version_t_print
1499 (vl_api_show_version_t * mp, void *handle)
1500 {
1501     u8 * s;
1502
1503     s = format (0, "SCRIPT: show_version ");
1504
1505     FINISH;
1506 }
1507
1508 static void *vl_api_nsh_gre_add_del_tunnel_t_print
1509 (vl_api_nsh_gre_add_del_tunnel_t * mp, void *handle)
1510 {
1511     u8 * s;
1512     int i;
1513     u32 spi_si;
1514
1515     s = format (0, "SCRIPT: nsh_gre_add_del_tunnel ");
1516
1517     s = format (s, "src %U dst %U ", format_ip4_address, &mp->src,
1518                 format_ip4_address, &mp->dst);
1519
1520     spi_si = ntohl(mp->spi_si);
1521
1522     s = format (s, "spi %d si %d ", (spi_si>>8), (spi_si & 0xff));
1523
1524     s = format (s, "decap-next %d ", ntohl(mp->decap_next_index));
1525
1526     if (mp->is_add == 0)
1527         s = format (s, "del ");
1528
1529     if (mp->encap_vrf_id)
1530         s = format (s, "encap-vrf-id %d ", ntohl(mp->encap_vrf_id));
1531     
1532     if (mp->decap_vrf_id)
1533         s = format (s, "decap-vrf-id %d ", ntohl(mp->decap_vrf_id));
1534
1535     if (mp->ver_o_c & 0xc)
1536         s = format (s, "version %d ", mp->ver_o_c>>6);
1537     if (mp->ver_o_c & NSH_GRE_O_BIT)
1538         s = format (s, "o-bit 1 ");
1539     if (mp->ver_o_c & NSH_GRE_C_BIT)
1540         s = format (s, "c-bit 1 ");
1541     if (mp->md_type)
1542         s = format (s, "md-type %d ", mp->md_type);
1543     if (mp->next_protocol == 1)
1544         s = format (s, "next-ip4 ");
1545     else if (mp->next_protocol == 2)
1546         s = format (s, "next-ip6 ");
1547     else if (mp->next_protocol == 3)
1548         s = format (s, "next-ethernet");
1549     
1550     s = format (s, "c1 %d ", ntohl(mp->c1));
1551     s = format (s, "c2 %d ", ntohl(mp->c2));
1552     s = format (s, "c3 %d ", ntohl(mp->c3));
1553     s = format (s, "c4 %d ", ntohl(mp->c4));
1554             
1555     for (i = 0; i < mp->tlv_len_in_words; i++) {
1556         s = format (s, "tlv %x ", ntohl(mp->tlvs[i]));
1557     }
1558         
1559     FINISH;
1560 }
1561
1562 static void *vl_api_nsh_vxlan_gpe_add_del_tunnel_t_print
1563 (vl_api_nsh_vxlan_gpe_add_del_tunnel_t * mp, void *handle)
1564 {
1565     u8 * s;
1566     int i;
1567     u32 spi_si;
1568
1569     s = format (0, "SCRIPT: nsh_vxlan_gpe_add_del_tunnel ");
1570
1571     s = format (s, "src %U dst %U ", format_ip4_address, &mp->src,
1572                 format_ip4_address, &mp->dst);
1573
1574     spi_si = ntohl(mp->spi_si);
1575
1576     s = format (s, "spi %d si %d ", (spi_si>>8), (spi_si & 0xff));
1577
1578     s = format (s, "decap-next %d ", ntohl(mp->decap_next_index));
1579
1580     s = format (s, "vni %d ", ntohl(mp->vni));
1581
1582     if (mp->is_add == 0)
1583         s = format (s, "del ");
1584
1585     if (mp->encap_vrf_id)
1586         s = format (s, "encap-vrf-id %d ", ntohl(mp->encap_vrf_id));
1587     
1588     if (mp->decap_vrf_id)
1589         s = format (s, "decap-vrf-id %d ", ntohl(mp->decap_vrf_id));
1590
1591     if (mp->ver_o_c & 0xc)
1592         s = format (s, "version %d ", mp->ver_o_c>>6);
1593     if (mp->ver_o_c & NSH_GRE_O_BIT)
1594         s = format (s, "o-bit 1 ");
1595     if (mp->ver_o_c & NSH_GRE_C_BIT)
1596         s = format (s, "c-bit 1 ");
1597     if (mp->md_type)
1598         s = format (s, "md-type %d ", mp->md_type);
1599     if (mp->next_protocol == 1)
1600         s = format (s, "next-ip4 ");
1601     else if (mp->next_protocol == 2)
1602         s = format (s, "next-ip6 ");
1603     else if (mp->next_protocol == 3)
1604         s = format (s, "next-ethernet");
1605     
1606     s = format (s, "c1 %d ", ntohl(mp->c1));
1607     s = format (s, "c2 %d ", ntohl(mp->c2));
1608     s = format (s, "c3 %d ", ntohl(mp->c3));
1609     s = format (s, "c4 %d ", ntohl(mp->c4));
1610             
1611     for (i = 0; i < mp->tlv_len_in_words; i++) {
1612         s = format (s, "tlv %x ", ntohl(mp->tlvs[i]));
1613     }
1614         
1615     FINISH;
1616 }
1617
1618 static void *vl_api_lisp_gpe_add_del_tunnel_t_print
1619 (vl_api_lisp_gpe_add_del_tunnel_t * mp, void *handle)
1620 {
1621     u8 * s;
1622
1623     s = format (0, "SCRIPT: lisp_gpe_add_del_tunnel ");
1624
1625     s = format (s, "src %U dst %U ", format_ip4_address, &mp->src,
1626                 format_ip4_address, &mp->dst);
1627
1628     if (mp->encap_vrf_id)
1629         s = format (s, "encap-vrf-id %d ", ntohl(mp->encap_vrf_id));
1630     
1631     if (mp->decap_vrf_id)
1632         s = format (s, "decap-vrf-id %d ", ntohl(mp->decap_vrf_id));
1633
1634     s = format (s, "decap-next %d ", ntohl(mp->decap_next_index));
1635
1636     s = format (s, "flags %x ", (u32)(mp->flags));
1637
1638     if (mp->ver_res)
1639         s = format (s, "ver_res %x ", (u32)(mp->ver_res));
1640
1641     if (mp->res)
1642         s = format (s, "res %x ", (u32)(mp->res));
1643
1644     s = format (s, "iid %d ", ntohl (mp->iid));
1645
1646     if (mp->is_add == 0)
1647         s = format (s, "del ");
1648
1649     if (mp->next_protocol == 1)
1650         s = format (s, "next-ip4 ");
1651     else if (mp->next_protocol == 2)
1652         s = format (s, "next-ip6 ");
1653     else if (mp->next_protocol == 3)
1654         s = format (s, "next-ethernet ");
1655     else if (mp->next_protocol == 4)
1656         s = format (s, "next-nsh ");
1657     
1658     FINISH;
1659 }
1660
1661 static void *vl_api_interface_name_renumber_t_print 
1662 (vl_api_interface_name_renumber_t * mp, void * handle)
1663 {
1664     u8 * s;
1665
1666     s = format (0, "SCRIPT: interface_renumber ");
1667
1668     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1669
1670     s = format (s, "new_show_dev_instance %d ", 
1671                 ntohl(mp->new_show_dev_instance));
1672     
1673     FINISH;
1674 }
1675
1676 static void *vl_api_want_ip4_arp_events_t_print
1677 (vl_api_want_ip4_arp_events_t * mp, void * handle)
1678 {
1679     u8 * s;
1680  
1681     s = format (0, "SCRIPT: want_ip4_arp_events ");
1682     s = format (s, "pid %d address %U ", mp->pid, 
1683                 format_ip4_address, &mp->address);
1684     if (mp->enable_disable == 0)
1685         s = format (s, "del ");
1686
1687     FINISH;
1688 }
1689
1690 static void *vl_api_input_acl_set_interface_t_print
1691 (vl_api_input_acl_set_interface_t * mp, void *handle)
1692 {
1693     u8 * s;
1694
1695     s = format (0, "SCRIPT: input_acl_set_interface ");
1696
1697     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1698     s = format (s, "ip4-table %d ", ntohl(mp->ip4_table_index));
1699     s = format (s, "ip6-table %d ", ntohl(mp->ip6_table_index));
1700     s = format (s, "l2-table %d ", ntohl(mp->l2_table_index));
1701
1702     if (mp->is_add == 0)
1703         s = format (s, "del ");
1704
1705     FINISH;
1706 }
1707
1708 static void * vl_api_ip_address_dump_t_print
1709 (vl_api_ip_address_dump_t * mp, void *handle)
1710 {
1711     u8 * s;
1712
1713     s = format (0, "SCRIPT: ip6_address_dump ");
1714     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1715     s = format (s, "is_ipv6 %d ", mp->is_ipv6 != 0);
1716
1717     FINISH;
1718 }
1719
1720 static void * vl_api_ip_dump_t_print
1721 (vl_api_ip_dump_t * mp, void *handle)
1722 {
1723     u8 * s;
1724
1725     s = format (0, "SCRIPT: ip_dump ");
1726     s = format (s, "is_ipv6 %d ", mp->is_ipv6 != 0);
1727
1728     FINISH;
1729 }
1730
1731 static void * vl_api_cop_interface_enable_disable_t_print
1732 (vl_api_cop_interface_enable_disable_t * mp, void *handle)
1733 {
1734     u8 * s;
1735
1736     s = format (0, "SCRIPT: cop_interface_enable_disable ");
1737     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1738     if (mp->enable_disable)
1739         s = format (s, "enable ");
1740     else
1741         s = format (s, "disable ");
1742
1743     FINISH;
1744 }
1745
1746 static void * vl_api_cop_whitelist_enable_disable_t_print
1747 (vl_api_cop_whitelist_enable_disable_t * mp, void *handle)
1748 {
1749     u8 * s;
1750
1751     s = format (0, "SCRIPT: cop_whitelist_enable_disable ");
1752     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1753     s = format (s, "fib-id %d ", ntohl(mp->fib_id));
1754     if (mp->ip4)
1755         s = format (s, "ip4 ");
1756     if (mp->ip6)
1757         s = format (s, "ip6 ");
1758     if (mp->default_cop)
1759         s = format (s, "default ");
1760
1761     FINISH;
1762 }
1763
1764 static void *vl_api_sw_interface_clear_stats_t_print
1765 (vl_api_sw_interface_clear_stats_t * mp, void *handle)
1766 {
1767     u8 * s;
1768
1769     s = format (0, "SCRIPT: sw_interface_clear_stats ");
1770     if (mp->sw_if_index != ~0)
1771       s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1772
1773     FINISH;
1774 }
1775
1776 #define foreach_custom_print_function                                   \
1777 _(CREATE_LOOPBACK, create_loopback)                                     \
1778 _(SW_INTERFACE_SET_FLAGS, sw_interface_set_flags)                       \
1779 _(SW_INTERFACE_ADD_DEL_ADDRESS, sw_interface_add_del_address)           \
1780 _(SW_INTERFACE_SET_TABLE, sw_interface_set_table)                       \
1781 _(SW_INTERFACE_SET_VPATH, sw_interface_set_vpath)                       \
1782 _(TAP_CONNECT, tap_connect)                                             \
1783 _(TAP_MODIFY, tap_modify)                                               \
1784 _(TAP_DELETE, tap_delete)                                               \
1785 _(SW_INTERFACE_TAP_DUMP, sw_interface_tap_dump)                         \
1786 _(IP_ADD_DEL_ROUTE, ip_add_del_route)                                   \
1787 _(PROXY_ARP_ADD_DEL, proxy_arp_add_del)                                 \
1788 _(PROXY_ARP_INTFC_ENABLE_DISABLE, proxy_arp_intfc_enable_disable)       \
1789 _(MPLS_ADD_DEL_DECAP, mpls_add_del_decap)                               \
1790 _(MPLS_ADD_DEL_ENCAP, mpls_add_del_encap)                               \
1791 _(MPLS_GRE_ADD_DEL_TUNNEL, mpls_gre_add_del_tunnel)                     \
1792 _(MPLS_ETHERNET_ADD_DEL_TUNNEL, mpls_ethernet_add_del_tunnel)           \
1793 _(MPLS_ETHERNET_ADD_DEL_TUNNEL_2, mpls_ethernet_add_del_tunnel_2)       \
1794 _(SW_INTERFACE_SET_UNNUMBERED, sw_interface_set_unnumbered)             \
1795 _(IP_NEIGHBOR_ADD_DEL, ip_neighbor_add_del)                             \
1796 _(RESET_VRF, reset_vrf)                                                 \
1797 _(CREATE_VLAN_SUBIF, create_vlan_subif)                                 \
1798 _(CREATE_SUBIF, create_subif)                                           \
1799 _(OAM_ADD_DEL, oam_add_del)                                             \
1800 _(RESET_FIB, reset_fib)                                                 \
1801 _(DHCP_PROXY_CONFIG, dhcp_proxy_config)                                 \
1802 _(DHCP_PROXY_SET_VSS, dhcp_proxy_set_vss)                               \
1803 _(SET_IP_FLOW_HASH, set_ip_flow_hash)                                   \
1804 _(SW_INTERFACE_IP6_SET_LINK_LOCAL_ADDRESS,                              \
1805   sw_interface_ip6_set_link_local_address)                              \
1806 _(SW_INTERFACE_IP6ND_RA_PREFIX, sw_interface_ip6nd_ra_prefix)           \
1807 _(SW_INTERFACE_IP6ND_RA_CONFIG, sw_interface_ip6nd_ra_config)           \
1808 _(SET_ARP_NEIGHBOR_LIMIT, set_arp_neighbor_limit)                       \
1809 _(L2_PATCH_ADD_DEL, l2_patch_add_del)                                   \
1810 _(SR_TUNNEL_ADD_DEL, sr_tunnel_add_del)                                 \
1811 _(SW_INTERFACE_SET_L2_XCONNECT, sw_interface_set_l2_xconnect)           \
1812 _(L2FIB_ADD_DEL, l2fib_add_del)                                         \
1813 _(L2_FLAGS, l2_flags)                                                   \
1814 _(BRIDGE_FLAGS, bridge_flags)                                           \
1815 _(CLASSIFY_ADD_DEL_TABLE, classify_add_del_table)                       \
1816 _(CLASSIFY_ADD_DEL_SESSION, classify_add_del_session)                   \
1817 _(SW_INTERFACE_SET_L2_BRIDGE, sw_interface_set_l2_bridge)               \
1818 _(BRIDGE_DOMAIN_ADD_DEL, bridge_domain_add_del)                         \
1819 _(BRIDGE_DOMAIN_DUMP, bridge_domain_dump)                            \
1820 _(CLASSIFY_SET_INTERFACE_IP_TABLE, classify_set_interface_ip_table)     \
1821 _(CLASSIFY_SET_INTERFACE_L2_TABLES, classify_set_interface_l2_tables)   \
1822 _(ADD_NODE_NEXT, add_node_next)                                         \
1823 _(DHCP_PROXY_CONFIG_2, dhcp_proxy_config_2)                             \
1824 _(DHCP_CLIENT_CONFIG, dhcp_client_config)                               \
1825 _(L2TPV3_CREATE_TUNNEL, l2tpv3_create_tunnel)                           \
1826 _(L2TPV3_SET_TUNNEL_COOKIES, l2tpv3_set_tunnel_cookies)                 \
1827 _(L2TPV3_INTERFACE_ENABLE_DISABLE, l2tpv3_interface_enable_disable)     \
1828 _(L2TPV3_SET_LOOKUP_KEY, l2tpv3_set_lookup_key)                         \
1829 _(SW_IF_L2TPV3_TUNNEL_DUMP, sw_if_l2tpv3_tunnel_dump)                   \
1830 _(VXLAN_ADD_DEL_TUNNEL, vxlan_add_del_tunnel)                           \
1831 _(VXLAN_TUNNEL_DUMP, vxlan_tunnel_dump)                                 \
1832 _(GRE_ADD_DEL_TUNNEL, gre_add_del_tunnel)                               \
1833 _(GRE_TUNNEL_DUMP, gre_tunnel_dump)                                     \
1834 _(L2_FIB_CLEAR_TABLE, l2_fib_clear_table)                               \
1835 _(L2_INTERFACE_EFP_FILTER, l2_interface_efp_filter)                     \
1836 _(L2_INTERFACE_VLAN_TAG_REWRITE, l2_interface_vlan_tag_rewrite)         \
1837 _(CREATE_VHOST_USER_IF, create_vhost_user_if)                           \
1838 _(MODIFY_VHOST_USER_IF, modify_vhost_user_if)                           \
1839 _(DELETE_VHOST_USER_IF, delete_vhost_user_if)                           \
1840 _(SW_INTERFACE_DUMP, sw_interface_dump)                                 \
1841 _(CONTROL_PING, control_ping)                                           \
1842 _(WANT_INTERFACE_EVENTS, want_interface_events)                         \
1843 _(CLI_REQUEST, cli_request)                                             \
1844 _(MEMCLNT_CREATE, memclnt_create)                                       \
1845 _(SW_INTERFACE_VHOST_USER_DUMP, sw_interface_vhost_user_dump)           \
1846 _(SHOW_VERSION, show_version)                                           \
1847 _(NSH_GRE_ADD_DEL_TUNNEL, nsh_gre_add_del_tunnel)                       \
1848 _(L2_FIB_TABLE_DUMP, l2_fib_table_dump)                                 \
1849 _(NSH_VXLAN_GPE_ADD_DEL_TUNNEL, nsh_vxlan_gpe_add_del_tunnel)           \
1850 _(LISP_GPE_ADD_DEL_TUNNEL, lisp_gpe_add_del_tunnel)                     \
1851 _(INTERFACE_NAME_RENUMBER, interface_name_renumber)                     \
1852 _(WANT_IP4_ARP_EVENTS, want_ip4_arp_events)                             \
1853 _(INPUT_ACL_SET_INTERFACE, input_acl_set_interface)                     \
1854 _(IP_ADDRESS_DUMP, ip_address_dump)                                     \
1855 _(IP_DUMP, ip_dump)                                                     \
1856 _(DELETE_LOOPBACK, delete_loopback)                                     \
1857 _(BD_IP_MAC_ADD_DEL, bd_ip_mac_add_del)                                 \
1858 _(COP_INTERFACE_ENABLE_DISABLE, cop_interface_enable_disable)           \
1859 _(COP_WHITELIST_ENABLE_DISABLE, cop_whitelist_enable_disable)           \
1860 _(SW_INTERFACE_CLEAR_STATS, sw_interface_clear_stats)
1861
1862 void vl_msg_api_custom_dump_configure (api_main_t *am) 
1863 {
1864 #define _(n,f) am->msg_print_handlers[VL_API_##n]       \
1865     = (void *) vl_api_##f##_t_print;
1866     foreach_custom_print_function;
1867 #undef _
1868 }