6a402ead744ae0026b4967173ff79d084f6902f6
[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_ip4_address, 
1270                 (ip4_address_t *)&(mp->dst_address));
1271
1272     s = format (s, "src %U ", format_ip4_address, 
1273                 (ip4_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_l2_fib_clear_table_t_print
1301 (vl_api_l2_fib_clear_table_t * mp, void *handle)
1302 {
1303     u8 * s;
1304
1305     s = format (0, "SCRIPT: l2_fib_clear_table ");
1306
1307     FINISH;
1308 }
1309
1310 static void *vl_api_l2_interface_efp_filter_t_print
1311 (vl_api_l2_interface_efp_filter_t * mp, void *handle)
1312 {
1313     u8 * s;
1314
1315     s = format (0, "SCRIPT: l2_interface_efp_filter ");
1316
1317     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1318     if (mp->enable_disable)
1319         s = format (s, "enable ");
1320     else
1321         s = format (s, "disable ");
1322
1323     FINISH;
1324 }
1325
1326 static void *vl_api_l2_interface_vlan_tag_rewrite_t_print
1327 (vl_api_l2_interface_vlan_tag_rewrite_t * mp, void *handle)
1328 {
1329     u8 * s;
1330
1331     s = format (0, "SCRIPT: l2_interface_vlan_tag_rewrite ");
1332
1333     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1334     s = format (s, "vtr_op %d ", ntohl(mp->vtr_op));
1335     s = format (s, "push_dot1q %d ", ntohl(mp->push_dot1q));
1336     s = format (s, "tag1 %d ", ntohl(mp->tag1));
1337     s = format (s, "tag2 %d ", ntohl(mp->tag2));
1338
1339     FINISH;
1340 }
1341
1342 static void *vl_api_create_vhost_user_if_t_print
1343 (vl_api_create_vhost_user_if_t * mp, void *handle)
1344 {
1345     u8 * s;
1346
1347     s = format (0, "SCRIPT: create_vhost_user_if ");
1348
1349     s = format (s, "socket %s ", mp->sock_filename);
1350     if (mp->is_server)
1351         s = format (s, "server ");
1352     if (mp->renumber)
1353         s = format (s, "renumber %d ", ntohl(mp->custom_dev_instance));
1354
1355     FINISH;
1356 }
1357
1358 static void *vl_api_modify_vhost_user_if_t_print
1359 (vl_api_modify_vhost_user_if_t * mp, void *handle)
1360 {
1361     u8 * s;
1362
1363     s = format (0, "SCRIPT: modify_vhost_user_if ");
1364
1365     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1366     s = format (s, "socket %s ", mp->sock_filename);
1367     if (mp->is_server)
1368         s = format (s, "server ");
1369     if (mp->renumber)
1370         s = format (s, "renumber %d ", ntohl(mp->custom_dev_instance));
1371
1372     FINISH;
1373 }
1374
1375 static void *vl_api_delete_vhost_user_if_t_print
1376 (vl_api_delete_vhost_user_if_t * mp, void *handle)
1377 {
1378     u8 * s;
1379
1380     s = format (0, "SCRIPT: delete_vhost_user_if ");
1381     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1382
1383     FINISH;
1384 }
1385
1386 static void *vl_api_sw_interface_vhost_user_dump_t_print
1387 (vl_api_sw_interface_vhost_user_dump_t * mp, void *handle)
1388 {
1389     u8 * s;
1390
1391     s = format (0, "SCRIPT: sw_interface_vhost_user_dump ");
1392
1393     FINISH;
1394 }
1395
1396 static void *vl_api_sw_interface_dump_t_print
1397 (vl_api_sw_interface_dump_t * mp, void *handle)
1398 {
1399     u8 * s;
1400
1401     s = format (0, "SCRIPT: sw_interface_dump ");
1402
1403     if (mp->name_filter_valid)
1404         s = format (s, "name_filter %s ", mp->name_filter);
1405     else
1406         s = format (s, "all ");
1407
1408     FINISH;
1409 }
1410
1411 static void *vl_api_l2_fib_table_dump_t_print
1412 (vl_api_l2_fib_table_dump_t * mp, void *handle)
1413 {
1414     u8 * s;
1415
1416     s = format (0, "SCRIPT: l2_fib_table_dump ");
1417
1418     s = format (s, "bd_id %d ", ntohl(mp->bd_id));
1419
1420     FINISH;
1421 }
1422
1423 static void *vl_api_control_ping_t_print
1424 (vl_api_control_ping_t * mp, void *handle)
1425 {
1426     u8 * s;
1427
1428     s = format (0, "SCRIPT: control_ping ");
1429
1430     FINISH;
1431 }
1432
1433 static void *vl_api_want_interface_events_t_print
1434 (vl_api_want_interface_events_t * mp, void *handle)
1435 {
1436     u8 * s;
1437
1438     s = format (0, "SCRIPT: want_interface_events pid %d enable %d ",
1439                 ntohl(mp->pid), ntohl(mp->enable_disable));
1440
1441     FINISH;
1442 }
1443
1444 static void *vl_api_cli_request_t_print
1445 (vl_api_cli_request_t * mp, void *handle)
1446 {
1447     u8 * s;
1448
1449     s = format (0, "SCRIPT: cli_request ");
1450
1451     FINISH;
1452 }
1453
1454 static void *vl_api_memclnt_create_t_print
1455 (vl_api_memclnt_create_t * mp, void *handle)
1456 {
1457     u8 * s;
1458
1459     s = format (0, "SCRIPT: memclnt_create name %s ", mp->name);
1460
1461     FINISH;
1462 }
1463
1464 static void *vl_api_show_version_t_print
1465 (vl_api_show_version_t * mp, void *handle)
1466 {
1467     u8 * s;
1468
1469     s = format (0, "SCRIPT: show_version ");
1470
1471     FINISH;
1472 }
1473
1474 static void *vl_api_nsh_gre_add_del_tunnel_t_print
1475 (vl_api_nsh_gre_add_del_tunnel_t * mp, void *handle)
1476 {
1477     u8 * s;
1478     int i;
1479     u32 spi_si;
1480
1481     s = format (0, "SCRIPT: nsh_gre_add_del_tunnel ");
1482
1483     s = format (s, "src %U dst %U ", format_ip4_address, &mp->src,
1484                 format_ip4_address, &mp->dst);
1485
1486     spi_si = ntohl(mp->spi_si);
1487
1488     s = format (s, "spi %d si %d ", (spi_si>>8), (spi_si & 0xff));
1489
1490     s = format (s, "decap-next %d ", ntohl(mp->decap_next_index));
1491
1492     if (mp->is_add == 0)
1493         s = format (s, "del ");
1494
1495     if (mp->encap_vrf_id)
1496         s = format (s, "encap-vrf-id %d ", ntohl(mp->encap_vrf_id));
1497     
1498     if (mp->decap_vrf_id)
1499         s = format (s, "decap-vrf-id %d ", ntohl(mp->decap_vrf_id));
1500
1501     if (mp->ver_o_c & 0xc)
1502         s = format (s, "version %d ", mp->ver_o_c>>6);
1503     if (mp->ver_o_c & NSH_GRE_O_BIT)
1504         s = format (s, "o-bit 1 ");
1505     if (mp->ver_o_c & NSH_GRE_C_BIT)
1506         s = format (s, "c-bit 1 ");
1507     if (mp->md_type)
1508         s = format (s, "md-type %d ", mp->md_type);
1509     if (mp->next_protocol == 1)
1510         s = format (s, "next-ip4 ");
1511     else if (mp->next_protocol == 2)
1512         s = format (s, "next-ip6 ");
1513     else if (mp->next_protocol == 3)
1514         s = format (s, "next-ethernet");
1515     
1516     s = format (s, "c1 %d ", ntohl(mp->c1));
1517     s = format (s, "c2 %d ", ntohl(mp->c2));
1518     s = format (s, "c3 %d ", ntohl(mp->c3));
1519     s = format (s, "c4 %d ", ntohl(mp->c4));
1520             
1521     for (i = 0; i < mp->tlv_len_in_words; i++) {
1522         s = format (s, "tlv %x ", ntohl(mp->tlvs[i]));
1523     }
1524         
1525     FINISH;
1526 }
1527
1528 static void *vl_api_nsh_vxlan_gpe_add_del_tunnel_t_print
1529 (vl_api_nsh_vxlan_gpe_add_del_tunnel_t * mp, void *handle)
1530 {
1531     u8 * s;
1532     int i;
1533     u32 spi_si;
1534
1535     s = format (0, "SCRIPT: nsh_vxlan_gpe_add_del_tunnel ");
1536
1537     s = format (s, "src %U dst %U ", format_ip4_address, &mp->src,
1538                 format_ip4_address, &mp->dst);
1539
1540     spi_si = ntohl(mp->spi_si);
1541
1542     s = format (s, "spi %d si %d ", (spi_si>>8), (spi_si & 0xff));
1543
1544     s = format (s, "decap-next %d ", ntohl(mp->decap_next_index));
1545
1546     s = format (s, "vni %d ", ntohl(mp->vni));
1547
1548     if (mp->is_add == 0)
1549         s = format (s, "del ");
1550
1551     if (mp->encap_vrf_id)
1552         s = format (s, "encap-vrf-id %d ", ntohl(mp->encap_vrf_id));
1553     
1554     if (mp->decap_vrf_id)
1555         s = format (s, "decap-vrf-id %d ", ntohl(mp->decap_vrf_id));
1556
1557     if (mp->ver_o_c & 0xc)
1558         s = format (s, "version %d ", mp->ver_o_c>>6);
1559     if (mp->ver_o_c & NSH_GRE_O_BIT)
1560         s = format (s, "o-bit 1 ");
1561     if (mp->ver_o_c & NSH_GRE_C_BIT)
1562         s = format (s, "c-bit 1 ");
1563     if (mp->md_type)
1564         s = format (s, "md-type %d ", mp->md_type);
1565     if (mp->next_protocol == 1)
1566         s = format (s, "next-ip4 ");
1567     else if (mp->next_protocol == 2)
1568         s = format (s, "next-ip6 ");
1569     else if (mp->next_protocol == 3)
1570         s = format (s, "next-ethernet");
1571     
1572     s = format (s, "c1 %d ", ntohl(mp->c1));
1573     s = format (s, "c2 %d ", ntohl(mp->c2));
1574     s = format (s, "c3 %d ", ntohl(mp->c3));
1575     s = format (s, "c4 %d ", ntohl(mp->c4));
1576             
1577     for (i = 0; i < mp->tlv_len_in_words; i++) {
1578         s = format (s, "tlv %x ", ntohl(mp->tlvs[i]));
1579     }
1580         
1581     FINISH;
1582 }
1583
1584 static void *vl_api_lisp_gpe_add_del_tunnel_t_print
1585 (vl_api_lisp_gpe_add_del_tunnel_t * mp, void *handle)
1586 {
1587     u8 * s;
1588
1589     s = format (0, "SCRIPT: lisp_gpe_add_del_tunnel ");
1590
1591     s = format (s, "src %U dst %U ", format_ip4_address, &mp->src,
1592                 format_ip4_address, &mp->dst);
1593
1594     if (mp->encap_vrf_id)
1595         s = format (s, "encap-vrf-id %d ", ntohl(mp->encap_vrf_id));
1596     
1597     if (mp->decap_vrf_id)
1598         s = format (s, "decap-vrf-id %d ", ntohl(mp->decap_vrf_id));
1599
1600     s = format (s, "decap-next %d ", ntohl(mp->decap_next_index));
1601
1602     s = format (s, "flags %x ", (u32)(mp->flags));
1603
1604     if (mp->ver_res)
1605         s = format (s, "ver_res %x ", (u32)(mp->ver_res));
1606
1607     if (mp->res)
1608         s = format (s, "res %x ", (u32)(mp->res));
1609
1610     s = format (s, "iid %d ", ntohl (mp->iid));
1611
1612     if (mp->is_add == 0)
1613         s = format (s, "del ");
1614
1615     if (mp->next_protocol == 1)
1616         s = format (s, "next-ip4 ");
1617     else if (mp->next_protocol == 2)
1618         s = format (s, "next-ip6 ");
1619     else if (mp->next_protocol == 3)
1620         s = format (s, "next-ethernet ");
1621     else if (mp->next_protocol == 4)
1622         s = format (s, "next-nsh ");
1623     
1624     FINISH;
1625 }
1626
1627 static void *vl_api_interface_name_renumber_t_print 
1628 (vl_api_interface_name_renumber_t * mp, void * handle)
1629 {
1630     u8 * s;
1631
1632     s = format (0, "SCRIPT: interface_renumber ");
1633
1634     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1635
1636     s = format (s, "new_show_dev_instance %d ", 
1637                 ntohl(mp->new_show_dev_instance));
1638     
1639     FINISH;
1640 }
1641
1642 static void *vl_api_want_ip4_arp_events_t_print
1643 (vl_api_want_ip4_arp_events_t * mp, void * handle)
1644 {
1645     u8 * s;
1646  
1647     s = format (0, "SCRIPT: want_ip4_arp_events ");
1648     s = format (s, "pid %d address %U ", mp->pid, 
1649                 format_ip4_address, &mp->address);
1650     if (mp->enable_disable == 0)
1651         s = format (s, "del ");
1652
1653     FINISH;
1654 }
1655
1656 static void *vl_api_input_acl_set_interface_t_print
1657 (vl_api_input_acl_set_interface_t * mp, void *handle)
1658 {
1659     u8 * s;
1660
1661     s = format (0, "SCRIPT: input_acl_set_interface ");
1662
1663     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1664     s = format (s, "ip4-table %d ", ntohl(mp->ip4_table_index));
1665     s = format (s, "ip6-table %d ", ntohl(mp->ip6_table_index));
1666     s = format (s, "l2-table %d ", ntohl(mp->l2_table_index));
1667
1668     if (mp->is_add == 0)
1669         s = format (s, "del ");
1670
1671     FINISH;
1672 }
1673
1674 static void * vl_api_ip_address_dump_t_print
1675 (vl_api_ip_address_dump_t * mp, void *handle)
1676 {
1677     u8 * s;
1678
1679     s = format (0, "SCRIPT: ip6_address_dump ");
1680     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1681     s = format (s, "is_ipv6 %d ", mp->is_ipv6 != 0);
1682
1683     FINISH;
1684 }
1685
1686 static void * vl_api_ip_dump_t_print
1687 (vl_api_ip_dump_t * mp, void *handle)
1688 {
1689     u8 * s;
1690
1691     s = format (0, "SCRIPT: ip_dump ");
1692     s = format (s, "is_ipv6 %d ", mp->is_ipv6 != 0);
1693
1694     FINISH;
1695 }
1696
1697 static void * vl_api_cop_interface_enable_disable_t_print
1698 (vl_api_cop_interface_enable_disable_t * mp, void *handle)
1699 {
1700     u8 * s;
1701
1702     s = format (0, "SCRIPT: cop_interface_enable_disable ");
1703     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1704     if (mp->enable_disable)
1705         s = format (s, "enable ");
1706     else
1707         s = format (s, "disable ");
1708
1709     FINISH;
1710 }
1711
1712 static void * vl_api_cop_whitelist_enable_disable_t_print
1713 (vl_api_cop_whitelist_enable_disable_t * mp, void *handle)
1714 {
1715     u8 * s;
1716
1717     s = format (0, "SCRIPT: cop_whitelist_enable_disable ");
1718     s = format (s, "sw_if_index %d ", ntohl(mp->sw_if_index));
1719     s = format (s, "fib-id %d ", ntohl(mp->fib_id));
1720     if (mp->ip4)
1721         s = format (s, "ip4 ");
1722     if (mp->ip6)
1723         s = format (s, "ip6 ");
1724     if (mp->default_cop)
1725         s = format (s, "default ");
1726
1727     FINISH;
1728 }
1729
1730 #define foreach_custom_print_function                                   \
1731 _(CREATE_LOOPBACK, create_loopback)                                     \
1732 _(SW_INTERFACE_SET_FLAGS, sw_interface_set_flags)                       \
1733 _(SW_INTERFACE_ADD_DEL_ADDRESS, sw_interface_add_del_address)           \
1734 _(SW_INTERFACE_SET_TABLE, sw_interface_set_table)                       \
1735 _(SW_INTERFACE_SET_VPATH, sw_interface_set_vpath)                       \
1736 _(TAP_CONNECT, tap_connect)                                             \
1737 _(TAP_MODIFY, tap_modify)                                               \
1738 _(TAP_DELETE, tap_delete)                                               \
1739 _(SW_INTERFACE_TAP_DUMP, sw_interface_tap_dump)                         \
1740 _(IP_ADD_DEL_ROUTE, ip_add_del_route)                                   \
1741 _(PROXY_ARP_ADD_DEL, proxy_arp_add_del)                                 \
1742 _(PROXY_ARP_INTFC_ENABLE_DISABLE, proxy_arp_intfc_enable_disable)       \
1743 _(MPLS_ADD_DEL_DECAP, mpls_add_del_decap)                               \
1744 _(MPLS_ADD_DEL_ENCAP, mpls_add_del_encap)                               \
1745 _(MPLS_GRE_ADD_DEL_TUNNEL, mpls_gre_add_del_tunnel)                     \
1746 _(MPLS_ETHERNET_ADD_DEL_TUNNEL, mpls_ethernet_add_del_tunnel)           \
1747 _(MPLS_ETHERNET_ADD_DEL_TUNNEL_2, mpls_ethernet_add_del_tunnel_2)       \
1748 _(SW_INTERFACE_SET_UNNUMBERED, sw_interface_set_unnumbered)             \
1749 _(IP_NEIGHBOR_ADD_DEL, ip_neighbor_add_del)                             \
1750 _(RESET_VRF, reset_vrf)                                                 \
1751 _(CREATE_VLAN_SUBIF, create_vlan_subif)                                 \
1752 _(CREATE_SUBIF, create_subif)                                           \
1753 _(OAM_ADD_DEL, oam_add_del)                                             \
1754 _(RESET_FIB, reset_fib)                                                 \
1755 _(DHCP_PROXY_CONFIG, dhcp_proxy_config)                                 \
1756 _(DHCP_PROXY_SET_VSS, dhcp_proxy_set_vss)                               \
1757 _(SET_IP_FLOW_HASH, set_ip_flow_hash)                                   \
1758 _(SW_INTERFACE_IP6_SET_LINK_LOCAL_ADDRESS,                              \
1759   sw_interface_ip6_set_link_local_address)                              \
1760 _(SW_INTERFACE_IP6ND_RA_PREFIX, sw_interface_ip6nd_ra_prefix)           \
1761 _(SW_INTERFACE_IP6ND_RA_CONFIG, sw_interface_ip6nd_ra_config)           \
1762 _(SET_ARP_NEIGHBOR_LIMIT, set_arp_neighbor_limit)                       \
1763 _(L2_PATCH_ADD_DEL, l2_patch_add_del)                                   \
1764 _(SR_TUNNEL_ADD_DEL, sr_tunnel_add_del)                                 \
1765 _(SW_INTERFACE_SET_L2_XCONNECT, sw_interface_set_l2_xconnect)           \
1766 _(L2FIB_ADD_DEL, l2fib_add_del)                                         \
1767 _(L2_FLAGS, l2_flags)                                                   \
1768 _(BRIDGE_FLAGS, bridge_flags)                                           \
1769 _(CLASSIFY_ADD_DEL_TABLE, classify_add_del_table)                       \
1770 _(CLASSIFY_ADD_DEL_SESSION, classify_add_del_session)                   \
1771 _(SW_INTERFACE_SET_L2_BRIDGE, sw_interface_set_l2_bridge)               \
1772 _(BRIDGE_DOMAIN_ADD_DEL, bridge_domain_add_del)                         \
1773 _(BRIDGE_DOMAIN_DUMP, bridge_domain_dump)                            \
1774 _(CLASSIFY_SET_INTERFACE_IP_TABLE, classify_set_interface_ip_table)     \
1775 _(CLASSIFY_SET_INTERFACE_L2_TABLES, classify_set_interface_l2_tables)   \
1776 _(ADD_NODE_NEXT, add_node_next)                                         \
1777 _(DHCP_PROXY_CONFIG_2, dhcp_proxy_config_2)                             \
1778 _(DHCP_CLIENT_CONFIG, dhcp_client_config)                               \
1779 _(L2TPV3_CREATE_TUNNEL, l2tpv3_create_tunnel)                           \
1780 _(L2TPV3_SET_TUNNEL_COOKIES, l2tpv3_set_tunnel_cookies)                 \
1781 _(L2TPV3_INTERFACE_ENABLE_DISABLE, l2tpv3_interface_enable_disable)     \
1782 _(L2TPV3_SET_LOOKUP_KEY, l2tpv3_set_lookup_key)                         \
1783 _(SW_IF_L2TPV3_TUNNEL_DUMP, sw_if_l2tpv3_tunnel_dump)                   \
1784 _(VXLAN_ADD_DEL_TUNNEL, vxlan_add_del_tunnel)                           \
1785 _(VXLAN_TUNNEL_DUMP, vxlan_tunnel_dump)                                 \
1786 _(L2_FIB_CLEAR_TABLE, l2_fib_clear_table)                               \
1787 _(L2_INTERFACE_EFP_FILTER, l2_interface_efp_filter)                     \
1788 _(L2_INTERFACE_VLAN_TAG_REWRITE, l2_interface_vlan_tag_rewrite)         \
1789 _(CREATE_VHOST_USER_IF, create_vhost_user_if)                           \
1790 _(MODIFY_VHOST_USER_IF, modify_vhost_user_if)                           \
1791 _(DELETE_VHOST_USER_IF, delete_vhost_user_if)                           \
1792 _(SW_INTERFACE_DUMP, sw_interface_dump)                                 \
1793 _(CONTROL_PING, control_ping)                                           \
1794 _(WANT_INTERFACE_EVENTS, want_interface_events)                         \
1795 _(CLI_REQUEST, cli_request)                                             \
1796 _(MEMCLNT_CREATE, memclnt_create)                                       \
1797 _(SW_INTERFACE_VHOST_USER_DUMP, sw_interface_vhost_user_dump)           \
1798 _(SHOW_VERSION, show_version)                                           \
1799 _(NSH_GRE_ADD_DEL_TUNNEL, nsh_gre_add_del_tunnel)                       \
1800 _(L2_FIB_TABLE_DUMP, l2_fib_table_dump)                                 \
1801 _(NSH_VXLAN_GPE_ADD_DEL_TUNNEL, nsh_vxlan_gpe_add_del_tunnel)           \
1802 _(LISP_GPE_ADD_DEL_TUNNEL, lisp_gpe_add_del_tunnel)                     \
1803 _(INTERFACE_NAME_RENUMBER, interface_name_renumber)                     \
1804 _(WANT_IP4_ARP_EVENTS, want_ip4_arp_events)                             \
1805 _(INPUT_ACL_SET_INTERFACE, input_acl_set_interface)                     \
1806 _(IP_ADDRESS_DUMP, ip_address_dump)                                     \
1807 _(IP_DUMP, ip_dump)                                                     \
1808 _(DELETE_LOOPBACK, delete_loopback)                                     \
1809 _(BD_IP_MAC_ADD_DEL, bd_ip_mac_add_del)                                 \
1810 _(COP_INTERFACE_ENABLE_DISABLE, cop_interface_enable_disable)           \
1811 _(COP_WHITELIST_ENABLE_DISABLE, cop_whitelist_enable_disable)
1812
1813 void vl_msg_api_custom_dump_configure (api_main_t *am) 
1814 {
1815 #define _(n,f) am->msg_print_handlers[VL_API_##n]       \
1816     = (void *) vl_api_##f##_t_print;
1817     foreach_custom_print_function;
1818 #undef _
1819 }