blob: 8a1ebcf9a8bbbbd214e96cb6f041c908ad44cc05 [file] [log] [blame]
Carmelo Cascone8277e012017-09-27 17:57:34 +02001{
2 "program" : "tor.p4",
3 "__meta__" : {
4 "version" : [2, 7],
5 "compiler" : "https://github.com/p4lang/p4c"
6 },
7 "header_types" : [
8 {
9 "name" : "scalars_0",
10 "id" : 0,
11 "fields" : [
12 ["tmp_1", 21, false],
13 ["tmp", 16, false],
14 ["l3_fwd_tmp_2", 1, false],
15 ["l3_fwd_tmp_3", 1, false],
16 ["l3_fwd_tmp_4", 1, false],
17 ["tmp_2", 32, false],
18 ["tmp_3", 32, false],
19 ["local_metadata_t.vrf_id", 32, false],
20 ["local_metadata_t.class_id", 8, false],
21 ["local_metadata_t.cpu_cos_queue_id", 5, false],
22 ["local_metadata_t.skip_egress", 1, false],
23 ["local_metadata_t.egress_spec_at_punt_match", 9, false],
24 ["local_metadata_t.color", 2, false],
25 ["local_metadata_t.l4_src_port", 16, false],
26 ["local_metadata_t.l4_dst_port", 16, false],
27 ["local_metadata_t.icmp_code", 8, false],
28 ["_padding_0", 7, false]
29 ]
30 },
31 {
32 "name" : "ethernet_t",
33 "id" : 1,
34 "fields" : [
35 ["dst_addr", 48, false],
36 ["src_addr", 48, false],
37 ["ether_type", 16, false]
38 ]
39 },
40 {
41 "name" : "ipv4_base_t",
42 "id" : 2,
43 "fields" : [
44 ["version", 4, false],
45 ["ihl", 4, false],
46 ["diffserv", 8, false],
47 ["total_len", 16, false],
48 ["identification", 16, false],
49 ["flags", 3, false],
50 ["frag_offset", 13, false],
51 ["ttl", 8, false],
52 ["protocol", 8, false],
53 ["hdr_checksum", 16, false],
54 ["src_addr", 32, false],
55 ["dst_addr", 32, false]
56 ]
57 },
58 {
59 "name" : "ipv6_base_t",
60 "id" : 3,
61 "fields" : [
62 ["version", 4, false],
63 ["traffic_class", 8, false],
64 ["flow_label", 20, false],
65 ["payload_length", 16, false],
66 ["next_header", 8, false],
67 ["hop_limit", 8, false],
68 ["src_addr", 128, false],
69 ["dst_addr", 128, false]
70 ]
71 },
72 {
73 "name" : "icmp_header_t",
74 "id" : 4,
75 "fields" : [
76 ["icmp_type", 8, false],
77 ["code", 8, false],
78 ["checksum", 16, false]
79 ]
80 },
81 {
82 "name" : "tcp_t",
83 "id" : 5,
84 "fields" : [
85 ["src_port", 16, false],
86 ["dst_port", 16, false],
87 ["seq_no", 32, false],
88 ["ack_no", 32, false],
89 ["data_offset", 4, false],
90 ["res", 4, false],
91 ["flags", 8, false],
92 ["window", 16, false],
93 ["checksum", 16, false],
94 ["urgent_ptr", 16, false]
95 ]
96 },
97 {
98 "name" : "udp_t",
99 "id" : 6,
100 "fields" : [
101 ["src_port", 16, false],
102 ["dst_port", 16, false],
103 ["hdr_length", 16, false],
104 ["checksum", 16, false]
105 ]
106 },
107 {
108 "name" : "arp_t",
109 "id" : 7,
110 "fields" : [
111 ["hw_type", 16, false],
112 ["proto_type", 16, false],
113 ["hw_addr_len", 8, false],
114 ["proto_addr_len", 8, false],
115 ["opcode", 16, false],
116 ["sender_hw_addr", 48, false],
117 ["sender_proto_addr", 32, false],
118 ["target_hw_addr", 48, false],
119 ["target_proto_addr", 32, false]
120 ]
121 },
122 {
123 "name" : "packet_in_header_t",
124 "id" : 8,
125 "fields" : [
126 ["ingress_physical_port", 9, false],
127 ["padding1", 7, false],
128 ["ingress_logical_port", 32, false],
129 ["target_egress_port", 9, false],
130 ["padding2", 7, false]
131 ]
132 },
133 {
134 "name" : "packet_out_header_t",
135 "id" : 9,
136 "fields" : [
137 ["egress_physical_port", 9, false],
138 ["submit_to_ingress", 1, false],
139 ["padding", 6, false]
140 ]
141 },
142 {
143 "name" : "vlan_tag_t",
144 "id" : 10,
145 "fields" : [
146 ["pcp", 3, false],
147 ["cfi", 1, false],
148 ["vid", 12, false],
149 ["ether_type", 16, false]
150 ]
151 },
152 {
153 "name" : "standard_metadata",
154 "id" : 11,
155 "fields" : [
156 ["ingress_port", 9, false],
157 ["egress_spec", 9, false],
158 ["egress_port", 9, false],
159 ["clone_spec", 32, false],
160 ["instance_type", 32, false],
161 ["drop", 1, false],
162 ["recirculate_port", 16, false],
163 ["packet_length", 32, false],
164 ["enq_timestamp", 32, false],
165 ["enq_qdepth", 19, false],
166 ["deq_timedelta", 32, false],
167 ["deq_qdepth", 19, false],
168 ["ingress_global_timestamp", 48, false],
169 ["lf_field_list", 32, false],
170 ["mcast_grp", 16, false],
171 ["resubmit_flag", 1, false],
172 ["egress_rid", 16, false],
173 ["_padding", 5, false]
174 ]
175 }
176 ],
177 "headers" : [
178 {
179 "name" : "scalars",
180 "id" : 0,
181 "header_type" : "scalars_0",
182 "metadata" : true,
183 "pi_omit" : true
184 },
185 {
186 "name" : "standard_metadata",
187 "id" : 1,
188 "header_type" : "standard_metadata",
189 "metadata" : true,
190 "pi_omit" : true
191 },
192 {
193 "name" : "ethernet",
194 "id" : 2,
195 "header_type" : "ethernet_t",
196 "metadata" : false,
197 "pi_omit" : true
198 },
199 {
200 "name" : "ipv4_base",
201 "id" : 3,
202 "header_type" : "ipv4_base_t",
203 "metadata" : false,
204 "pi_omit" : true
205 },
206 {
207 "name" : "ipv6_base",
208 "id" : 4,
209 "header_type" : "ipv6_base_t",
210 "metadata" : false,
211 "pi_omit" : true
212 },
213 {
214 "name" : "icmp_header",
215 "id" : 5,
216 "header_type" : "icmp_header_t",
217 "metadata" : false,
218 "pi_omit" : true
219 },
220 {
221 "name" : "tcp",
222 "id" : 6,
223 "header_type" : "tcp_t",
224 "metadata" : false,
225 "pi_omit" : true
226 },
227 {
228 "name" : "udp",
229 "id" : 7,
230 "header_type" : "udp_t",
231 "metadata" : false,
232 "pi_omit" : true
233 },
234 {
235 "name" : "arp",
236 "id" : 8,
237 "header_type" : "arp_t",
238 "metadata" : false,
239 "pi_omit" : true
240 },
241 {
242 "name" : "packet_in",
243 "id" : 9,
244 "header_type" : "packet_in_header_t",
245 "metadata" : false,
246 "pi_omit" : true
247 },
248 {
249 "name" : "packet_out",
250 "id" : 10,
251 "header_type" : "packet_out_header_t",
252 "metadata" : false,
253 "pi_omit" : true
254 },
255 {
256 "name" : "vlan_tag[0]",
257 "id" : 11,
258 "header_type" : "vlan_tag_t",
259 "metadata" : false,
260 "pi_omit" : true
261 },
262 {
263 "name" : "vlan_tag[1]",
264 "id" : 12,
265 "header_type" : "vlan_tag_t",
266 "metadata" : false,
267 "pi_omit" : true
268 }
269 ],
270 "header_stacks" : [
271 {
272 "name" : "vlan_tag",
273 "id" : 0,
274 "header_type" : "vlan_tag_t",
275 "size" : 2,
276 "header_ids" : [11, 12]
277 }
278 ],
279 "header_union_types" : [],
280 "header_unions" : [],
281 "header_union_stacks" : [],
282 "field_lists" : [
283 {
284 "id" : 0,
285 "name" : "fl",
286 "elements" : [
287 {
288 "type" : "field",
289 "value" : ["standard_metadata", "ingress_port"]
290 }
291 ]
292 }
293 ],
294 "errors" : [
295 ["NoError", 1],
296 ["PacketTooShort", 2],
297 ["NoMatch", 3],
298 ["StackOutOfBounds", 4],
299 ["HeaderTooShort", 5],
300 ["ParserTimeout", 6]
301 ],
302 "enums" : [],
303 "parsers" : [
304 {
305 "name" : "parser",
306 "id" : 0,
307 "init_state" : "start",
308 "parse_states" : [
309 {
310 "name" : "start",
311 "id" : 0,
312 "parser_ops" : [],
313 "transitions" : [
314 {
315 "value" : "0x00ff",
316 "mask" : null,
317 "next_state" : "parse_cpu_header"
318 },
319 {
320 "value" : "default",
321 "mask" : null,
322 "next_state" : "parse_ethernet"
323 }
324 ],
325 "transition_key" : [
326 {
327 "type" : "field",
328 "value" : ["standard_metadata", "ingress_port"]
329 }
330 ]
331 },
332 {
333 "name" : "parse_ethernet",
334 "id" : 1,
335 "parser_ops" : [
336 {
337 "parameters" : [
338 {
339 "type" : "regular",
340 "value" : "ethernet"
341 }
342 ],
343 "op" : "extract"
344 }
345 ],
346 "transitions" : [
347 {
348 "value" : "0x8100",
349 "mask" : null,
350 "next_state" : "parse_vlan"
351 },
352 {
353 "value" : "0x9100",
354 "mask" : null,
355 "next_state" : "parse_vlan"
356 },
357 {
358 "value" : "0x9200",
359 "mask" : null,
360 "next_state" : "parse_vlan"
361 },
362 {
363 "value" : "0x9300",
364 "mask" : null,
365 "next_state" : "parse_vlan"
366 },
367 {
368 "value" : "0x0800",
369 "mask" : null,
370 "next_state" : "parse_ipv4"
371 },
372 {
373 "value" : "0x86dd",
374 "mask" : null,
375 "next_state" : "parse_ipv6"
376 },
377 {
378 "value" : "0x0806",
379 "mask" : null,
380 "next_state" : "parse_arp"
381 },
382 {
383 "value" : "default",
384 "mask" : null,
385 "next_state" : null
386 }
387 ],
388 "transition_key" : [
389 {
390 "type" : "field",
391 "value" : ["ethernet", "ether_type"]
392 }
393 ]
394 },
395 {
396 "name" : "parse_vlan",
397 "id" : 2,
398 "parser_ops" : [
399 {
400 "parameters" : [
401 {
402 "type" : "stack",
403 "value" : "vlan_tag"
404 }
405 ],
406 "op" : "extract"
407 }
408 ],
409 "transitions" : [
410 {
411 "value" : "0x8100",
412 "mask" : null,
413 "next_state" : "parse_vlan"
414 },
415 {
416 "value" : "0x9100",
417 "mask" : null,
418 "next_state" : "parse_vlan"
419 },
420 {
421 "value" : "0x9200",
422 "mask" : null,
423 "next_state" : "parse_vlan"
424 },
425 {
426 "value" : "0x9300",
427 "mask" : null,
428 "next_state" : "parse_vlan"
429 },
430 {
431 "value" : "0x0800",
432 "mask" : null,
433 "next_state" : "parse_ipv4"
434 },
435 {
436 "value" : "0x86dd",
437 "mask" : null,
438 "next_state" : "parse_ipv6"
439 },
440 {
441 "value" : "default",
442 "mask" : null,
443 "next_state" : null
444 }
445 ],
446 "transition_key" : [
447 {
448 "type" : "stack_field",
449 "value" : ["vlan_tag", "ether_type"]
450 }
451 ]
452 },
453 {
454 "name" : "parse_ipv4",
455 "id" : 3,
456 "parser_ops" : [
457 {
458 "parameters" : [
459 {
460 "type" : "regular",
461 "value" : "ipv4_base"
462 }
463 ],
464 "op" : "extract"
465 },
466 {
467 "parameters" : [
468 {
469 "type" : "field",
470 "value" : ["scalars", "tmp_1"]
471 },
472 {
473 "type" : "expression",
474 "value" : {
475 "type" : "expression",
476 "value" : {
477 "op" : "|",
478 "left" : {
479 "type" : "expression",
480 "value" : {
481 "op" : "&",
482 "left" : {
483 "type" : "expression",
484 "value" : {
485 "op" : "<<",
486 "left" : {
487 "type" : "expression",
488 "value" : {
489 "op" : "&",
490 "left" : {
491 "type" : "field",
492 "value" : ["ipv4_base", "frag_offset"]
493 },
494 "right" : {
495 "type" : "hexstr",
496 "value" : "0x1fffff"
497 }
498 }
499 },
500 "right" : {
501 "type" : "hexstr",
502 "value" : "0x8"
503 }
504 }
505 },
506 "right" : {
507 "type" : "hexstr",
508 "value" : "0x1fffff"
509 }
510 }
511 },
512 "right" : {
513 "type" : "expression",
514 "value" : {
515 "op" : "&",
516 "left" : {
517 "type" : "expression",
518 "value" : {
519 "op" : "&",
520 "left" : {
521 "type" : "field",
522 "value" : ["ipv4_base", "protocol"]
523 },
524 "right" : {
525 "type" : "hexstr",
526 "value" : "0x1fffff"
527 }
528 }
529 },
530 "right" : {
531 "type" : "hexstr",
532 "value" : "0x0001ff"
533 }
534 }
535 }
536 }
537 }
538 }
539 ],
540 "op" : "set"
541 }
542 ],
543 "transitions" : [
544 {
545 "value" : "0x000001",
546 "mask" : null,
547 "next_state" : "parse_icmp"
548 },
549 {
550 "value" : "0x000006",
551 "mask" : null,
552 "next_state" : "parse_tcp"
553 },
554 {
555 "value" : "0x000011",
556 "mask" : null,
557 "next_state" : "parse_udp"
558 },
559 {
560 "value" : "default",
561 "mask" : null,
562 "next_state" : null
563 }
564 ],
565 "transition_key" : [
566 {
567 "type" : "field",
568 "value" : ["scalars", "tmp_1"]
569 }
570 ]
571 },
572 {
573 "name" : "parse_ipv6",
574 "id" : 4,
575 "parser_ops" : [
576 {
577 "parameters" : [
578 {
579 "type" : "regular",
580 "value" : "ipv6_base"
581 }
582 ],
583 "op" : "extract"
584 }
585 ],
586 "transitions" : [
587 {
588 "value" : "0x3a",
589 "mask" : null,
590 "next_state" : "parse_icmp"
591 },
592 {
593 "value" : "0x06",
594 "mask" : null,
595 "next_state" : "parse_tcp"
596 },
597 {
598 "value" : "0x11",
599 "mask" : null,
600 "next_state" : "parse_udp"
601 },
602 {
603 "value" : "default",
604 "mask" : null,
605 "next_state" : null
606 }
607 ],
608 "transition_key" : [
609 {
610 "type" : "field",
611 "value" : ["ipv6_base", "next_header"]
612 }
613 ]
614 },
615 {
616 "name" : "parse_tcp",
617 "id" : 5,
618 "parser_ops" : [
619 {
620 "parameters" : [
621 {
622 "type" : "regular",
623 "value" : "tcp"
624 }
625 ],
626 "op" : "extract"
627 },
628 {
629 "parameters" : [
630 {
631 "type" : "field",
632 "value" : ["scalars", "local_metadata_t.l4_src_port"]
633 },
634 {
635 "type" : "field",
636 "value" : ["tcp", "src_port"]
637 }
638 ],
639 "op" : "set"
640 },
641 {
642 "parameters" : [
643 {
644 "type" : "field",
645 "value" : ["scalars", "local_metadata_t.l4_dst_port"]
646 },
647 {
648 "type" : "field",
649 "value" : ["tcp", "dst_port"]
650 }
651 ],
652 "op" : "set"
653 }
654 ],
655 "transitions" : [
656 {
657 "value" : "default",
658 "mask" : null,
659 "next_state" : null
660 }
661 ],
662 "transition_key" : []
663 },
664 {
665 "name" : "parse_udp",
666 "id" : 6,
667 "parser_ops" : [
668 {
669 "parameters" : [
670 {
671 "type" : "regular",
672 "value" : "udp"
673 }
674 ],
675 "op" : "extract"
676 },
677 {
678 "parameters" : [
679 {
680 "type" : "field",
681 "value" : ["scalars", "local_metadata_t.l4_src_port"]
682 },
683 {
684 "type" : "field",
685 "value" : ["udp", "src_port"]
686 }
687 ],
688 "op" : "set"
689 },
690 {
691 "parameters" : [
692 {
693 "type" : "field",
694 "value" : ["scalars", "local_metadata_t.l4_dst_port"]
695 },
696 {
697 "type" : "field",
698 "value" : ["udp", "dst_port"]
699 }
700 ],
701 "op" : "set"
702 }
703 ],
704 "transitions" : [
705 {
706 "value" : "default",
707 "mask" : null,
708 "next_state" : null
709 }
710 ],
711 "transition_key" : []
712 },
713 {
714 "name" : "parse_icmp",
715 "id" : 7,
716 "parser_ops" : [
717 {
718 "parameters" : [
719 {
720 "type" : "regular",
721 "value" : "icmp_header"
722 }
723 ],
724 "op" : "extract"
725 }
726 ],
727 "transitions" : [
728 {
729 "value" : "default",
730 "mask" : null,
731 "next_state" : null
732 }
733 ],
734 "transition_key" : []
735 },
736 {
737 "name" : "parse_arp",
738 "id" : 8,
739 "parser_ops" : [
740 {
741 "parameters" : [
742 {
743 "type" : "regular",
744 "value" : "arp"
745 }
746 ],
747 "op" : "extract"
748 }
749 ],
750 "transitions" : [
751 {
752 "value" : "default",
753 "mask" : null,
754 "next_state" : null
755 }
756 ],
757 "transition_key" : []
758 },
759 {
760 "name" : "parse_cpu_header",
761 "id" : 9,
762 "parser_ops" : [
763 {
764 "parameters" : [
765 {
766 "type" : "regular",
767 "value" : "packet_out"
768 }
769 ],
770 "op" : "extract"
771 }
772 ],
773 "transitions" : [
774 {
775 "value" : "default",
776 "mask" : null,
777 "next_state" : "parse_ethernet"
778 }
779 ],
780 "transition_key" : []
781 }
782 ]
783 }
784 ],
785 "deparsers" : [
786 {
787 "name" : "deparser",
788 "id" : 0,
789 "source_info" : {
790 "filename" : "parser.p4",
791 "line" : 150,
792 "column" : 8,
793 "source_fragment" : "pkt_deparser"
794 },
795 "order" : ["packet_in", "ethernet", "vlan_tag[0]", "vlan_tag[1]", "ipv4_base", "ipv6_base", "arp", "icmp_header", "tcp", "udp"]
796 }
797 ],
798 "meter_arrays" : [
799 {
800 "name" : "punt.ingress_port_meter",
801 "id" : 0,
802 "source_info" : {
803 "filename" : "punt.p4",
804 "line" : 29,
805 "column" : 40,
806 "source_fragment" : "ingress_port_meter"
807 },
808 "is_direct" : true,
809 "rate_count" : 2,
810 "type" : "bytes",
811 "size" : 1024,
812 "binding" : "punt.punt_table",
813 "result_target" : ["scalars", "local_metadata_t.color"]
814 }
815 ],
816 "counter_arrays" : [
817 {
818 "name" : "punt.punt_packet_counter",
819 "id" : 0,
820 "is_direct" : true,
821 "binding" : "punt.punt_table"
822 },
823 {
824 "name" : "packetio_egress.egress_port_counter",
825 "id" : 1,
826 "source_info" : {
827 "filename" : "packetio.p4",
828 "line" : 49,
Carmelo Cascone28002322017-10-03 16:28:46 +0200829 "column" : 46,
Carmelo Cascone8277e012017-09-27 17:57:34 +0200830 "source_fragment" : "egress_port_counter"
831 },
832 "size" : 510,
833 "is_direct" : false
834 },
835 {
836 "name" : "packetio_egress.ingress_port_counter",
837 "id" : 2,
838 "source_info" : {
839 "filename" : "packetio.p4",
840 "line" : 50,
Carmelo Cascone28002322017-10-03 16:28:46 +0200841 "column" : 46,
Carmelo Cascone8277e012017-09-27 17:57:34 +0200842 "source_fragment" : "ingress_port_counter"
843 },
844 "size" : 510,
845 "is_direct" : false
846 }
847 ],
848 "register_arrays" : [],
849 "calculations" : [
850 {
851 "name" : "calc",
852 "id" : 0,
853 "source_info" : {
854 "filename" : "ipv4_checksum.p4",
855 "line" : 37,
856 "column" : 35,
857 "source_fragment" : "ipv4_checksum.get( ..."
858 },
859 "algo" : "csum16",
860 "input" : [
861 {
862 "type" : "field",
863 "value" : ["ipv4_base", "version"]
864 },
865 {
866 "type" : "field",
867 "value" : ["ipv4_base", "ihl"]
868 },
869 {
870 "type" : "field",
871 "value" : ["ipv4_base", "diffserv"]
872 },
873 {
874 "type" : "field",
875 "value" : ["ipv4_base", "total_len"]
876 },
877 {
878 "type" : "field",
879 "value" : ["ipv4_base", "identification"]
880 },
881 {
882 "type" : "field",
883 "value" : ["ipv4_base", "flags"]
884 },
885 {
886 "type" : "field",
887 "value" : ["ipv4_base", "frag_offset"]
888 },
889 {
890 "type" : "field",
891 "value" : ["ipv4_base", "ttl"]
892 },
893 {
894 "type" : "field",
895 "value" : ["ipv4_base", "protocol"]
896 },
897 {
898 "type" : "field",
899 "value" : ["ipv4_base", "src_addr"]
900 },
901 {
902 "type" : "field",
903 "value" : ["ipv4_base", "dst_addr"]
904 }
905 ]
906 }
907 ],
908 "learn_lists" : [],
909 "actions" : [
910 {
911 "name" : "NoAction",
912 "id" : 0,
913 "runtime_data" : [],
914 "primitives" : []
915 },
916 {
917 "name" : "NoAction",
918 "id" : 1,
919 "runtime_data" : [],
920 "primitives" : []
921 },
922 {
923 "name" : "NoAction",
924 "id" : 2,
925 "runtime_data" : [],
926 "primitives" : []
927 },
928 {
929 "name" : "NoAction",
930 "id" : 3,
931 "runtime_data" : [],
932 "primitives" : []
933 },
934 {
935 "name" : "NoAction",
936 "id" : 4,
937 "runtime_data" : [],
938 "primitives" : []
939 },
940 {
941 "name" : "vrf.set_vrf",
942 "id" : 5,
943 "runtime_data" : [
944 {
945 "name" : "vrf_id",
946 "bitwidth" : 32
947 }
948 ],
949 "primitives" : [
950 {
951 "op" : "assign",
952 "parameters" : [
953 {
954 "type" : "field",
955 "value" : ["scalars", "local_metadata_t.vrf_id"]
956 },
957 {
958 "type" : "runtime_data",
959 "value" : 0
960 }
961 ],
962 "source_info" : {
963 "filename" : "vrf.p4",
964 "line" : 27,
965 "column" : 4,
966 "source_fragment" : "local_metadata.vrf_id = vrf_id"
967 }
968 }
969 ]
970 },
971 {
972 "name" : "class_id.set_class_id",
973 "id" : 6,
974 "runtime_data" : [
975 {
976 "name" : "class_id_value",
977 "bitwidth" : 8
978 }
979 ],
980 "primitives" : [
981 {
982 "op" : "assign",
983 "parameters" : [
984 {
985 "type" : "field",
986 "value" : ["scalars", "local_metadata_t.class_id"]
987 },
988 {
989 "type" : "runtime_data",
990 "value" : 0
991 }
992 ],
993 "source_info" : {
994 "filename" : "class_id.p4",
995 "line" : 22,
996 "column" : 5,
997 "source_fragment" : "local_metadata.class_id = class_id_value"
998 }
999 }
1000 ]
1001 },
1002 {
1003 "name" : "l3_fwd.set_nexthop",
1004 "id" : 7,
1005 "runtime_data" : [
1006 {
1007 "name" : "port",
1008 "bitwidth" : 9
1009 },
1010 {
1011 "name" : "smac",
1012 "bitwidth" : 48
1013 },
1014 {
1015 "name" : "dmac",
1016 "bitwidth" : 48
1017 }
1018 ],
1019 "primitives" : [
1020 {
1021 "op" : "assign",
1022 "parameters" : [
1023 {
1024 "type" : "field",
1025 "value" : ["standard_metadata", "egress_spec"]
1026 },
1027 {
1028 "type" : "runtime_data",
1029 "value" : 0
1030 }
1031 ],
1032 "source_info" : {
1033 "filename" : "l3_fwd.p4",
1034 "line" : 29,
1035 "column" : 4,
1036 "source_fragment" : "standard_metadata.egress_spec = port"
1037 }
1038 },
1039 {
1040 "op" : "assign",
1041 "parameters" : [
1042 {
1043 "type" : "field",
1044 "value" : ["ethernet", "src_addr"]
1045 },
1046 {
1047 "type" : "runtime_data",
1048 "value" : 1
1049 }
1050 ],
1051 "source_info" : {
1052 "filename" : "l3_fwd.p4",
1053 "line" : 30,
1054 "column" : 4,
1055 "source_fragment" : "hdr.ethernet.src_addr = smac"
1056 }
1057 },
1058 {
1059 "op" : "assign",
1060 "parameters" : [
1061 {
1062 "type" : "field",
1063 "value" : ["ethernet", "dst_addr"]
1064 },
1065 {
1066 "type" : "runtime_data",
1067 "value" : 2
1068 }
1069 ],
1070 "source_info" : {
1071 "filename" : "l3_fwd.p4",
1072 "line" : 31,
1073 "column" : 4,
1074 "source_fragment" : "hdr.ethernet.dst_addr = dmac"
1075 }
1076 },
1077 {
1078 "op" : "assign",
1079 "parameters" : [
1080 {
1081 "type" : "field",
1082 "value" : ["ipv4_base", "ttl"]
1083 },
1084 {
1085 "type" : "expression",
1086 "value" : {
1087 "type" : "expression",
1088 "value" : {
1089 "op" : "&",
1090 "left" : {
1091 "type" : "expression",
1092 "value" : {
1093 "op" : "+",
1094 "left" : {
1095 "type" : "field",
1096 "value" : ["ipv4_base", "ttl"]
1097 },
1098 "right" : {
1099 "type" : "hexstr",
1100 "value" : "0xff"
1101 }
1102 }
1103 },
1104 "right" : {
1105 "type" : "hexstr",
1106 "value" : "0xff"
1107 }
1108 }
1109 }
1110 }
1111 ],
1112 "source_info" : {
1113 "filename" : "l3_fwd.p4",
1114 "line" : 33,
1115 "column" : 6,
1116 "source_fragment" : "hdr.ipv4_base.ttl = hdr.ipv4_base.ttl - 1"
1117 }
1118 }
1119 ]
1120 },
1121 {
1122 "name" : "l3_fwd.set_nexthop",
1123 "id" : 8,
1124 "runtime_data" : [
1125 {
1126 "name" : "port",
1127 "bitwidth" : 9
1128 },
1129 {
1130 "name" : "smac",
1131 "bitwidth" : 48
1132 },
1133 {
1134 "name" : "dmac",
1135 "bitwidth" : 48
1136 }
1137 ],
1138 "primitives" : [
1139 {
1140 "op" : "assign",
1141 "parameters" : [
1142 {
1143 "type" : "field",
1144 "value" : ["standard_metadata", "egress_spec"]
1145 },
1146 {
1147 "type" : "runtime_data",
1148 "value" : 0
1149 }
1150 ],
1151 "source_info" : {
1152 "filename" : "l3_fwd.p4",
1153 "line" : 29,
1154 "column" : 4,
1155 "source_fragment" : "standard_metadata.egress_spec = port"
1156 }
1157 },
1158 {
1159 "op" : "assign",
1160 "parameters" : [
1161 {
1162 "type" : "field",
1163 "value" : ["ethernet", "src_addr"]
1164 },
1165 {
1166 "type" : "runtime_data",
1167 "value" : 1
1168 }
1169 ],
1170 "source_info" : {
1171 "filename" : "l3_fwd.p4",
1172 "line" : 30,
1173 "column" : 4,
1174 "source_fragment" : "hdr.ethernet.src_addr = smac"
1175 }
1176 },
1177 {
1178 "op" : "assign",
1179 "parameters" : [
1180 {
1181 "type" : "field",
1182 "value" : ["ethernet", "dst_addr"]
1183 },
1184 {
1185 "type" : "runtime_data",
1186 "value" : 2
1187 }
1188 ],
1189 "source_info" : {
1190 "filename" : "l3_fwd.p4",
1191 "line" : 31,
1192 "column" : 4,
1193 "source_fragment" : "hdr.ethernet.dst_addr = dmac"
1194 }
1195 },
1196 {
1197 "op" : "assign",
1198 "parameters" : [
1199 {
1200 "type" : "field",
1201 "value" : ["ipv4_base", "ttl"]
1202 },
1203 {
1204 "type" : "expression",
1205 "value" : {
1206 "type" : "expression",
1207 "value" : {
1208 "op" : "&",
1209 "left" : {
1210 "type" : "expression",
1211 "value" : {
1212 "op" : "+",
1213 "left" : {
1214 "type" : "field",
1215 "value" : ["ipv4_base", "ttl"]
1216 },
1217 "right" : {
1218 "type" : "hexstr",
1219 "value" : "0xff"
1220 }
1221 }
1222 },
1223 "right" : {
1224 "type" : "hexstr",
1225 "value" : "0xff"
1226 }
1227 }
1228 }
1229 }
1230 ],
1231 "source_info" : {
1232 "filename" : "l3_fwd.p4",
1233 "line" : 33,
1234 "column" : 6,
1235 "source_fragment" : "hdr.ipv4_base.ttl = hdr.ipv4_base.ttl - 1"
1236 }
1237 }
1238 ]
1239 },
1240 {
1241 "name" : "l3_fwd.set_nexthop",
1242 "id" : 9,
1243 "runtime_data" : [
1244 {
1245 "name" : "port",
1246 "bitwidth" : 9
1247 },
1248 {
1249 "name" : "smac",
1250 "bitwidth" : 48
1251 },
1252 {
1253 "name" : "dmac",
1254 "bitwidth" : 48
1255 }
1256 ],
1257 "primitives" : [
1258 {
1259 "op" : "assign",
1260 "parameters" : [
1261 {
1262 "type" : "field",
1263 "value" : ["standard_metadata", "egress_spec"]
1264 },
1265 {
1266 "type" : "runtime_data",
1267 "value" : 0
1268 }
1269 ],
1270 "source_info" : {
1271 "filename" : "l3_fwd.p4",
1272 "line" : 29,
1273 "column" : 4,
1274 "source_fragment" : "standard_metadata.egress_spec = port"
1275 }
1276 },
1277 {
1278 "op" : "assign",
1279 "parameters" : [
1280 {
1281 "type" : "field",
1282 "value" : ["ethernet", "src_addr"]
1283 },
1284 {
1285 "type" : "runtime_data",
1286 "value" : 1
1287 }
1288 ],
1289 "source_info" : {
1290 "filename" : "l3_fwd.p4",
1291 "line" : 30,
1292 "column" : 4,
1293 "source_fragment" : "hdr.ethernet.src_addr = smac"
1294 }
1295 },
1296 {
1297 "op" : "assign",
1298 "parameters" : [
1299 {
1300 "type" : "field",
1301 "value" : ["ethernet", "dst_addr"]
1302 },
1303 {
1304 "type" : "runtime_data",
1305 "value" : 2
1306 }
1307 ],
1308 "source_info" : {
1309 "filename" : "l3_fwd.p4",
1310 "line" : 31,
1311 "column" : 4,
1312 "source_fragment" : "hdr.ethernet.dst_addr = dmac"
1313 }
1314 },
1315 {
1316 "op" : "assign",
1317 "parameters" : [
1318 {
1319 "type" : "field",
1320 "value" : ["ipv4_base", "ttl"]
1321 },
1322 {
1323 "type" : "expression",
1324 "value" : {
1325 "type" : "expression",
1326 "value" : {
1327 "op" : "&",
1328 "left" : {
1329 "type" : "expression",
1330 "value" : {
1331 "op" : "+",
1332 "left" : {
1333 "type" : "field",
1334 "value" : ["ipv4_base", "ttl"]
1335 },
1336 "right" : {
1337 "type" : "hexstr",
1338 "value" : "0xff"
1339 }
1340 }
1341 },
1342 "right" : {
1343 "type" : "hexstr",
1344 "value" : "0xff"
1345 }
1346 }
1347 }
1348 }
1349 ],
1350 "source_info" : {
1351 "filename" : "l3_fwd.p4",
1352 "line" : 33,
1353 "column" : 6,
1354 "source_fragment" : "hdr.ipv4_base.ttl = hdr.ipv4_base.ttl - 1"
1355 }
1356 }
1357 ]
1358 },
1359 {
1360 "name" : "punt.set_queue_and_clone_to_cpu",
1361 "id" : 10,
1362 "runtime_data" : [
1363 {
1364 "name" : "queue_id",
1365 "bitwidth" : 5
1366 }
1367 ],
1368 "primitives" : [
1369 {
1370 "op" : "assign",
1371 "parameters" : [
1372 {
1373 "type" : "field",
1374 "value" : ["scalars", "local_metadata_t.cpu_cos_queue_id"]
1375 },
1376 {
1377 "type" : "runtime_data",
1378 "value" : 0
1379 }
1380 ],
1381 "source_info" : {
1382 "filename" : "punt.p4",
1383 "line" : 36,
1384 "column" : 4,
1385 "source_fragment" : "local_metadata.cpu_cos_queue_id = queue_id"
1386 }
1387 },
1388 {
1389 "op" : "assign",
1390 "parameters" : [
1391 {
1392 "type" : "field",
1393 "value" : ["scalars", "local_metadata_t.egress_spec_at_punt_match"]
1394 },
1395 {
1396 "type" : "field",
1397 "value" : ["standard_metadata", "egress_spec"]
1398 }
1399 ],
1400 "source_info" : {
1401 "filename" : "punt.p4",
1402 "line" : 37,
1403 "column" : 4,
1404 "source_fragment" : "local_metadata.egress_spec_at_punt_match = standard_metadata.egress_spec"
1405 }
1406 },
1407 {
1408 "op" : "clone_ingress_pkt_to_egress",
1409 "parameters" : [
1410 {
1411 "type" : "hexstr",
1412 "value" : "0x000003ff"
1413 },
1414 {
1415 "type" : "hexstr",
1416 "value" : "0x0"
1417 }
1418 ]
1419 }
1420 ]
1421 },
1422 {
1423 "name" : "punt.set_queue_and_send_to_cpu",
1424 "id" : 11,
1425 "runtime_data" : [
1426 {
1427 "name" : "queue_id",
1428 "bitwidth" : 5
1429 }
1430 ],
1431 "primitives" : [
1432 {
1433 "op" : "assign",
1434 "parameters" : [
1435 {
1436 "type" : "field",
1437 "value" : ["scalars", "local_metadata_t.cpu_cos_queue_id"]
1438 },
1439 {
1440 "type" : "runtime_data",
1441 "value" : 0
1442 }
1443 ],
1444 "source_info" : {
1445 "filename" : "punt.p4",
1446 "line" : 46,
1447 "column" : 4,
1448 "source_fragment" : "local_metadata.cpu_cos_queue_id = queue_id"
1449 }
1450 },
1451 {
1452 "op" : "assign",
1453 "parameters" : [
1454 {
1455 "type" : "field",
1456 "value" : ["scalars", "local_metadata_t.egress_spec_at_punt_match"]
1457 },
1458 {
1459 "type" : "field",
1460 "value" : ["standard_metadata", "egress_spec"]
1461 }
1462 ],
1463 "source_info" : {
1464 "filename" : "punt.p4",
1465 "line" : 47,
1466 "column" : 4,
1467 "source_fragment" : "local_metadata.egress_spec_at_punt_match = standard_metadata.egress_spec"
1468 }
1469 },
1470 {
1471 "op" : "assign",
1472 "parameters" : [
1473 {
1474 "type" : "field",
1475 "value" : ["standard_metadata", "egress_spec"]
1476 },
1477 {
1478 "type" : "hexstr",
1479 "value" : "0x00ff"
1480 }
1481 ],
1482 "source_info" : {
1483 "filename" : "punt.p4",
1484 "line" : 48,
1485 "column" : 4,
1486 "source_fragment" : "standard_metadata.egress_spec = 255"
1487 }
1488 }
1489 ]
1490 },
1491 {
1492 "name" : "act",
1493 "id" : 12,
1494 "runtime_data" : [],
1495 "primitives" : [
1496 {
1497 "op" : "assign",
1498 "parameters" : [
1499 {
1500 "type" : "field",
1501 "value" : ["scalars", "local_metadata_t.skip_egress"]
1502 },
1503 {
1504 "type" : "hexstr",
1505 "value" : "0x01"
1506 }
1507 ],
1508 "source_info" : {
1509 "filename" : "packetio.p4",
1510 "line" : 21,
1511 "column" : 6,
1512 "source_fragment" : "local_metadata.skip_egress = 1"
1513 }
1514 },
1515 {
1516 "op" : "assign",
1517 "parameters" : [
1518 {
1519 "type" : "field",
1520 "value" : ["standard_metadata", "egress_spec"]
1521 },
1522 {
1523 "type" : "field",
1524 "value" : ["packet_out", "egress_physical_port"]
1525 }
1526 ],
1527 "source_info" : {
1528 "filename" : "packetio.p4",
1529 "line" : 22,
1530 "column" : 6,
1531 "source_fragment" : "standard_metadata.egress_spec = hdr.packet_out.egress_physical_port"
1532 }
1533 },
1534 {
1535 "op" : "remove_header",
1536 "parameters" : [
1537 {
1538 "type" : "header",
1539 "value" : "packet_out"
1540 }
1541 ],
1542 "source_info" : {
1543 "filename" : "packetio.p4",
1544 "line" : 23,
1545 "column" : 6,
1546 "source_fragment" : "hdr.packet_out.setInvalid()"
1547 }
1548 }
1549 ]
1550 },
1551 {
1552 "name" : "act_0",
1553 "id" : 13,
1554 "runtime_data" : [],
1555 "primitives" : [
1556 {
1557 "op" : "remove_header",
1558 "parameters" : [
1559 {
1560 "type" : "header",
1561 "value" : "packet_out"
1562 }
1563 ],
1564 "source_info" : {
1565 "filename" : "packetio.p4",
1566 "line" : 26,
1567 "column" : 4,
1568 "source_fragment" : "hdr.packet_out.setInvalid()"
1569 }
1570 }
1571 ]
1572 },
1573 {
1574 "name" : "act_1",
1575 "id" : 14,
1576 "runtime_data" : [],
1577 "primitives" : [
1578 {
1579 "op" : "assign",
1580 "parameters" : [
1581 {
1582 "type" : "field",
1583 "value" : ["scalars", "l3_fwd_tmp_4"]
1584 },
1585 {
1586 "type" : "expression",
1587 "value" : {
1588 "type" : "expression",
1589 "value" : {
1590 "op" : "b2d",
1591 "left" : null,
1592 "right" : {
1593 "type" : "bool",
1594 "value" : true
1595 }
1596 }
1597 }
1598 }
1599 ]
1600 }
1601 ]
1602 },
1603 {
1604 "name" : "act_2",
1605 "id" : 15,
1606 "runtime_data" : [],
1607 "primitives" : [
1608 {
1609 "op" : "assign",
1610 "parameters" : [
1611 {
1612 "type" : "field",
1613 "value" : ["scalars", "l3_fwd_tmp_4"]
1614 },
1615 {
1616 "type" : "expression",
1617 "value" : {
1618 "type" : "expression",
1619 "value" : {
1620 "op" : "b2d",
1621 "left" : null,
1622 "right" : {
1623 "type" : "bool",
1624 "value" : false
1625 }
1626 }
1627 }
1628 }
1629 ]
1630 }
1631 ]
1632 },
1633 {
1634 "name" : "act_3",
1635 "id" : 16,
1636 "runtime_data" : [],
1637 "primitives" : [
1638 {
1639 "op" : "assign",
1640 "parameters" : [
1641 {
1642 "type" : "field",
1643 "value" : ["scalars", "l3_fwd_tmp_3"]
1644 },
1645 {
1646 "type" : "expression",
1647 "value" : {
1648 "type" : "expression",
1649 "value" : {
1650 "op" : "b2d",
1651 "left" : null,
1652 "right" : {
1653 "type" : "bool",
1654 "value" : true
1655 }
1656 }
1657 }
1658 }
1659 ]
1660 }
1661 ]
1662 },
1663 {
1664 "name" : "act_4",
1665 "id" : 17,
1666 "runtime_data" : [],
1667 "primitives" : [
1668 {
1669 "op" : "assign",
1670 "parameters" : [
1671 {
1672 "type" : "field",
1673 "value" : ["scalars", "l3_fwd_tmp_3"]
1674 },
1675 {
1676 "type" : "expression",
1677 "value" : {
1678 "type" : "expression",
1679 "value" : {
1680 "op" : "b2d",
1681 "left" : null,
1682 "right" : {
1683 "type" : "bool",
1684 "value" : false
1685 }
1686 }
1687 }
1688 }
1689 ]
1690 }
1691 ]
1692 },
1693 {
1694 "name" : "act_5",
1695 "id" : 18,
1696 "runtime_data" : [],
1697 "primitives" : [
1698 {
1699 "op" : "assign",
1700 "parameters" : [
1701 {
1702 "type" : "field",
1703 "value" : ["scalars", "l3_fwd_tmp_2"]
1704 },
1705 {
1706 "type" : "expression",
1707 "value" : {
1708 "type" : "expression",
1709 "value" : {
1710 "op" : "b2d",
1711 "left" : null,
1712 "right" : {
1713 "type" : "bool",
1714 "value" : true
1715 }
1716 }
1717 }
1718 }
1719 ]
1720 }
1721 ]
1722 },
1723 {
1724 "name" : "act_6",
1725 "id" : 19,
1726 "runtime_data" : [],
1727 "primitives" : [
1728 {
1729 "op" : "assign",
1730 "parameters" : [
1731 {
1732 "type" : "field",
1733 "value" : ["scalars", "l3_fwd_tmp_2"]
1734 },
1735 {
1736 "type" : "expression",
1737 "value" : {
1738 "type" : "expression",
1739 "value" : {
1740 "op" : "b2d",
1741 "left" : null,
1742 "right" : {
1743 "type" : "bool",
1744 "value" : false
1745 }
1746 }
1747 }
1748 }
1749 ]
1750 }
1751 ]
1752 },
1753 {
1754 "name" : "act_7",
1755 "id" : 20,
1756 "runtime_data" : [],
1757 "primitives" : [
1758 {
1759 "op" : "drop",
1760 "parameters" : [],
1761 "source_info" : {
1762 "filename" : "l3_fwd.p4",
1763 "line" : 172,
1764 "column" : 10,
1765 "source_fragment" : "mark_to_drop()"
1766 }
1767 }
1768 ]
1769 },
1770 {
1771 "name" : "act_8",
1772 "id" : 21,
1773 "runtime_data" : [],
1774 "primitives" : [
1775 {
1776 "op" : "drop",
1777 "parameters" : [],
1778 "source_info" : {
1779 "filename" : "punt.p4",
1780 "line" : 93,
1781 "column" : 6,
1782 "source_fragment" : "mark_to_drop()"
1783 }
1784 }
1785 ]
1786 },
1787 {
1788 "name" : "NoAction",
1789 "id" : 22,
1790 "runtime_data" : [],
1791 "primitives" : []
1792 },
1793 {
1794 "name" : "packetio_egress.encap_packet_in_header",
1795 "id" : 23,
1796 "runtime_data" : [],
1797 "primitives" : [
1798 {
1799 "op" : "add_header",
1800 "parameters" : [
1801 {
1802 "type" : "header",
1803 "value" : "packet_in"
1804 }
1805 ],
1806 "source_info" : {
1807 "filename" : "packetio.p4",
1808 "line" : 35,
1809 "column" : 4,
1810 "source_fragment" : "hdr.packet_in.setValid()"
1811 }
1812 },
1813 {
1814 "op" : "assign",
1815 "parameters" : [
1816 {
1817 "type" : "field",
1818 "value" : ["packet_in", "ingress_physical_port"]
1819 },
1820 {
1821 "type" : "field",
1822 "value" : ["standard_metadata", "ingress_port"]
1823 }
1824 ],
1825 "source_info" : {
1826 "filename" : "packetio.p4",
1827 "line" : 36,
1828 "column" : 4,
1829 "source_fragment" : "hdr.packet_in.ingress_physical_port = standard_metadata.ingress_port"
1830 }
1831 },
1832 {
1833 "op" : "assign",
1834 "parameters" : [
1835 {
1836 "type" : "field",
1837 "value" : ["packet_in", "target_egress_port"]
1838 },
1839 {
1840 "type" : "field",
1841 "value" : ["scalars", "local_metadata_t.egress_spec_at_punt_match"]
1842 }
1843 ],
1844 "source_info" : {
1845 "filename" : "packetio.p4",
1846 "line" : 37,
1847 "column" : 4,
1848 "source_fragment" : "hdr.packet_in.target_egress_port = local_metadata.egress_spec_at_punt_match"
1849 }
1850 }
1851 ]
1852 },
1853 {
1854 "name" : "spoof_protection.drop_packet",
1855 "id" : 24,
1856 "runtime_data" : [],
1857 "primitives" : [
1858 {
1859 "op" : "drop",
1860 "parameters" : [],
1861 "source_info" : {
1862 "filename" : "spoof_protection.p4",
1863 "line" : 22,
1864 "column" : 4,
1865 "source_fragment" : "mark_to_drop()"
1866 }
1867 }
1868 ]
1869 },
1870 {
1871 "name" : "act_9",
1872 "id" : 25,
1873 "runtime_data" : [],
1874 "primitives" : [
1875 {
1876 "op" : "assign",
1877 "parameters" : [
1878 {
1879 "type" : "field",
1880 "value" : ["scalars", "tmp_2"]
1881 },
1882 {
1883 "type" : "expression",
1884 "value" : {
1885 "type" : "expression",
1886 "value" : {
1887 "op" : "&",
1888 "left" : {
1889 "type" : "field",
Carmelo Cascone28002322017-10-03 16:28:46 +02001890 "value" : ["standard_metadata", "egress_port"]
Carmelo Cascone8277e012017-09-27 17:57:34 +02001891 },
1892 "right" : {
1893 "type" : "hexstr",
1894 "value" : "0xffffffff"
1895 }
1896 }
1897 }
1898 }
1899 ]
1900 },
1901 {
1902 "op" : "count",
1903 "parameters" : [
1904 {
1905 "type" : "counter_array",
1906 "value" : "packetio_egress.egress_port_counter"
1907 },
1908 {
1909 "type" : "field",
1910 "value" : ["scalars", "tmp_2"]
1911 }
1912 ],
1913 "source_info" : {
1914 "filename" : "packetio.p4",
1915 "line" : 56,
1916 "column" : 6,
Carmelo Cascone28002322017-10-03 16:28:46 +02001917 "source_fragment" : "egress_port_counter.count((bit<32>) standard_metadata.egress_port)"
Carmelo Cascone8277e012017-09-27 17:57:34 +02001918 }
1919 }
1920 ]
1921 },
1922 {
1923 "name" : "act_10",
1924 "id" : 26,
1925 "runtime_data" : [],
1926 "primitives" : [
1927 {
1928 "op" : "assign",
1929 "parameters" : [
1930 {
1931 "type" : "field",
1932 "value" : ["scalars", "tmp_3"]
1933 },
1934 {
1935 "type" : "expression",
1936 "value" : {
1937 "type" : "expression",
1938 "value" : {
1939 "op" : "&",
1940 "left" : {
1941 "type" : "field",
1942 "value" : ["standard_metadata", "ingress_port"]
1943 },
1944 "right" : {
1945 "type" : "hexstr",
1946 "value" : "0xffffffff"
1947 }
1948 }
1949 }
1950 }
1951 ]
1952 },
1953 {
1954 "op" : "count",
1955 "parameters" : [
1956 {
1957 "type" : "counter_array",
1958 "value" : "packetio_egress.ingress_port_counter"
1959 },
1960 {
1961 "type" : "field",
1962 "value" : ["scalars", "tmp_3"]
1963 }
1964 ],
1965 "source_info" : {
1966 "filename" : "packetio.p4",
1967 "line" : 59,
1968 "column" : 6,
1969 "source_fragment" : "ingress_port_counter.count((bit<32> ) standard_metadata.ingress_port)"
1970 }
1971 }
1972 ]
1973 }
1974 ],
1975 "pipelines" : [
1976 {
1977 "name" : "ingress",
1978 "id" : 0,
1979 "source_info" : {
1980 "filename" : "tor.p4",
1981 "line" : 17,
1982 "column" : 8,
1983 "source_fragment" : "ingress_tor"
1984 },
1985 "init_table" : "node_2",
1986 "tables" : [
1987 {
1988 "name" : "tbl_act",
1989 "id" : 0,
1990 "key" : [],
1991 "match_type" : "exact",
1992 "type" : "simple",
1993 "max_size" : 1024,
1994 "with_counters" : false,
1995 "support_timeout" : false,
1996 "direct_meters" : null,
1997 "action_ids" : [12],
1998 "actions" : ["act"],
1999 "base_default_next" : null,
2000 "next_tables" : {
2001 "act" : null
2002 },
2003 "default_entry" : {
2004 "action_id" : 12,
2005 "action_const" : true,
2006 "action_data" : [],
2007 "action_entry_const" : true
2008 }
2009 },
2010 {
2011 "name" : "tbl_act_0",
2012 "id" : 1,
2013 "key" : [],
2014 "match_type" : "exact",
2015 "type" : "simple",
2016 "max_size" : 1024,
2017 "with_counters" : false,
2018 "support_timeout" : false,
2019 "direct_meters" : null,
2020 "action_ids" : [13],
2021 "actions" : ["act_0"],
2022 "base_default_next" : "vrf.vrf_classifier_table",
2023 "next_tables" : {
2024 "act_0" : "vrf.vrf_classifier_table"
2025 },
2026 "default_entry" : {
2027 "action_id" : 13,
2028 "action_const" : true,
2029 "action_data" : [],
2030 "action_entry_const" : true
2031 }
2032 },
2033 {
2034 "name" : "vrf.vrf_classifier_table",
2035 "id" : 2,
2036 "source_info" : {
2037 "filename" : "vrf.p4",
2038 "line" : 31,
2039 "column" : 8,
2040 "source_fragment" : "vrf_classifier_table"
2041 },
2042 "key" : [
2043 {
2044 "match_type" : "exact",
2045 "target" : ["ethernet", "ether_type"],
2046 "mask" : null
2047 },
2048 {
2049 "match_type" : "ternary",
2050 "target" : ["ethernet", "src_addr"],
2051 "mask" : null
2052 },
2053 {
2054 "match_type" : "ternary",
2055 "target" : ["ipv4_base", "diffserv"],
2056 "mask" : null
2057 },
2058 {
2059 "match_type" : "ternary",
2060 "target" : ["ipv4_base", "dst_addr"],
2061 "mask" : null
2062 },
2063 {
2064 "match_type" : "exact",
2065 "target" : ["standard_metadata", "ingress_port"],
2066 "mask" : null
2067 },
2068 {
2069 "match_type" : "ternary",
2070 "target" : ["ipv6_base", "traffic_class"],
2071 "mask" : null
2072 },
2073 {
2074 "match_type" : "ternary",
2075 "target" : ["ipv6_base", "dst_addr"],
2076 "mask" : null
2077 }
2078 ],
2079 "match_type" : "ternary",
2080 "type" : "simple",
2081 "max_size" : 1024,
2082 "with_counters" : false,
2083 "support_timeout" : false,
2084 "direct_meters" : null,
2085 "action_ids" : [5],
2086 "actions" : ["vrf.set_vrf"],
2087 "base_default_next" : "class_id.class_id_assignment_table",
2088 "next_tables" : {
2089 "vrf.set_vrf" : "class_id.class_id_assignment_table"
2090 },
2091 "default_entry" : {
2092 "action_id" : 5,
2093 "action_const" : true,
2094 "action_data" : ["0x0"],
2095 "action_entry_const" : true
2096 }
2097 },
2098 {
2099 "name" : "class_id.class_id_assignment_table",
2100 "id" : 3,
2101 "source_info" : {
2102 "filename" : "class_id.p4",
2103 "line" : 26,
2104 "column" : 8,
2105 "source_fragment" : "class_id_assignment_table"
2106 },
2107 "key" : [
2108 {
2109 "match_type" : "exact",
2110 "target" : ["ethernet", "ether_type"],
2111 "mask" : null
2112 },
2113 {
2114 "match_type" : "ternary",
2115 "target" : ["ipv4_base", "ttl"],
2116 "mask" : null
2117 },
2118 {
2119 "match_type" : "ternary",
2120 "target" : ["ipv6_base", "hop_limit"],
2121 "mask" : null
2122 },
2123 {
2124 "match_type" : "ternary",
2125 "target" : ["ipv4_base", "dst_addr"],
2126 "mask" : null
2127 },
2128 {
2129 "match_type" : "ternary",
2130 "target" : ["ipv6_base", "dst_addr"],
2131 "mask" : null
2132 },
2133 {
2134 "match_type" : "ternary",
2135 "target" : ["ipv4_base", "protocol"],
2136 "mask" : null
2137 },
2138 {
2139 "match_type" : "ternary",
2140 "target" : ["ipv6_base", "next_header"],
2141 "mask" : null
2142 },
2143 {
2144 "match_type" : "ternary",
2145 "target" : ["scalars", "local_metadata_t.l4_src_port"],
2146 "mask" : null
2147 },
2148 {
2149 "match_type" : "ternary",
2150 "target" : ["scalars", "local_metadata_t.l4_dst_port"],
2151 "mask" : null
2152 },
2153 {
2154 "match_type" : "ternary",
2155 "target" : ["vlan_tag[0]", "vid"],
2156 "mask" : null
2157 },
2158 {
2159 "match_type" : "ternary",
2160 "target" : ["vlan_tag[0]", "pcp"],
2161 "mask" : null
2162 }
2163 ],
2164 "match_type" : "ternary",
2165 "type" : "simple",
2166 "max_size" : 1024,
2167 "with_counters" : false,
2168 "support_timeout" : false,
2169 "direct_meters" : null,
2170 "action_ids" : [6],
2171 "actions" : ["class_id.set_class_id"],
2172 "base_default_next" : "l3_fwd.l3_routing_classifier_table",
2173 "next_tables" : {
2174 "class_id.set_class_id" : "l3_fwd.l3_routing_classifier_table"
2175 },
2176 "default_entry" : {
2177 "action_id" : 6,
2178 "action_const" : true,
2179 "action_data" : ["0x0"],
2180 "action_entry_const" : true
2181 }
2182 },
2183 {
2184 "name" : "l3_fwd.l3_routing_classifier_table",
2185 "id" : 4,
2186 "source_info" : {
2187 "filename" : "l3_fwd.p4",
2188 "line" : 42,
2189 "column" : 8,
2190 "source_fragment" : "l3_routing_classifier_table"
2191 },
2192 "key" : [
2193 {
2194 "match_type" : "exact",
2195 "target" : ["ethernet", "dst_addr"],
2196 "mask" : null
2197 }
2198 ],
2199 "match_type" : "exact",
2200 "type" : "simple",
2201 "max_size" : 1024,
2202 "with_counters" : false,
2203 "support_timeout" : false,
2204 "direct_meters" : null,
2205 "action_ids" : [0],
2206 "actions" : ["NoAction"],
2207 "base_default_next" : null,
2208 "next_tables" : {
2209 "__HIT__" : "tbl_act_1",
2210 "__MISS__" : "tbl_act_2"
2211 },
2212 "default_entry" : {
2213 "action_id" : 0,
2214 "action_const" : true,
2215 "action_data" : [],
2216 "action_entry_const" : true
2217 }
2218 },
2219 {
2220 "name" : "tbl_act_1",
2221 "id" : 5,
2222 "key" : [],
2223 "match_type" : "exact",
2224 "type" : "simple",
2225 "max_size" : 1024,
2226 "with_counters" : false,
2227 "support_timeout" : false,
2228 "direct_meters" : null,
2229 "action_ids" : [14],
2230 "actions" : ["act_1"],
2231 "base_default_next" : "node_11",
2232 "next_tables" : {
2233 "act_1" : "node_11"
2234 },
2235 "default_entry" : {
2236 "action_id" : 14,
2237 "action_const" : true,
2238 "action_data" : [],
2239 "action_entry_const" : true
2240 }
2241 },
2242 {
2243 "name" : "tbl_act_2",
2244 "id" : 6,
2245 "key" : [],
2246 "match_type" : "exact",
2247 "type" : "simple",
2248 "max_size" : 1024,
2249 "with_counters" : false,
2250 "support_timeout" : false,
2251 "direct_meters" : null,
2252 "action_ids" : [15],
2253 "actions" : ["act_2"],
2254 "base_default_next" : "node_11",
2255 "next_tables" : {
2256 "act_2" : "node_11"
2257 },
2258 "default_entry" : {
2259 "action_id" : 15,
2260 "action_const" : true,
2261 "action_data" : [],
2262 "action_entry_const" : true
2263 }
2264 },
2265 {
2266 "name" : "l3_fwd.l3_ipv4_override_table",
2267 "id" : 7,
2268 "source_info" : {
2269 "filename" : "l3_fwd.p4",
2270 "line" : 56,
2271 "column" : 8,
2272 "source_fragment" : "l3_ipv4_override_table"
2273 },
2274 "key" : [
2275 {
2276 "match_type" : "lpm",
2277 "target" : ["ipv4_base", "dst_addr"],
2278 "mask" : null
2279 }
2280 ],
2281 "match_type" : "lpm",
2282 "type" : "indirect_ws",
2283 "action_profile" : "l3_fwd.wcmp_action_profile",
2284 "max_size" : 1024,
2285 "with_counters" : false,
2286 "support_timeout" : false,
2287 "direct_meters" : null,
2288 "action_ids" : [7, 1],
2289 "actions" : ["l3_fwd.set_nexthop", "NoAction"],
2290 "base_default_next" : null,
2291 "next_tables" : {
2292 "__HIT__" : "tbl_act_3",
2293 "__MISS__" : "tbl_act_4"
2294 }
2295 },
2296 {
2297 "name" : "tbl_act_3",
2298 "id" : 8,
2299 "key" : [],
2300 "match_type" : "exact",
2301 "type" : "simple",
2302 "max_size" : 1024,
2303 "with_counters" : false,
2304 "support_timeout" : false,
2305 "direct_meters" : null,
2306 "action_ids" : [16],
2307 "actions" : ["act_3"],
2308 "base_default_next" : "node_16",
2309 "next_tables" : {
2310 "act_3" : "node_16"
2311 },
2312 "default_entry" : {
2313 "action_id" : 16,
2314 "action_const" : true,
2315 "action_data" : [],
2316 "action_entry_const" : true
2317 }
2318 },
2319 {
2320 "name" : "tbl_act_4",
2321 "id" : 9,
2322 "key" : [],
2323 "match_type" : "exact",
2324 "type" : "simple",
2325 "max_size" : 1024,
2326 "with_counters" : false,
2327 "support_timeout" : false,
2328 "direct_meters" : null,
2329 "action_ids" : [17],
2330 "actions" : ["act_4"],
2331 "base_default_next" : "node_16",
2332 "next_tables" : {
2333 "act_4" : "node_16"
2334 },
2335 "default_entry" : {
2336 "action_id" : 17,
2337 "action_const" : true,
2338 "action_data" : [],
2339 "action_entry_const" : true
2340 }
2341 },
2342 {
2343 "name" : "l3_fwd.l3_ipv4_vrf_table",
2344 "id" : 10,
2345 "source_info" : {
2346 "filename" : "l3_fwd.p4",
2347 "line" : 76,
2348 "column" : 8,
2349 "source_fragment" : "l3_ipv4_vrf_table"
2350 },
2351 "key" : [
2352 {
2353 "match_type" : "exact",
2354 "target" : ["scalars", "local_metadata_t.vrf_id"],
2355 "mask" : null
2356 },
2357 {
2358 "match_type" : "lpm",
2359 "target" : ["ipv4_base", "dst_addr"],
2360 "mask" : null
2361 }
2362 ],
2363 "match_type" : "lpm",
2364 "type" : "indirect_ws",
2365 "action_profile" : "l3_fwd.wcmp_action_profile",
2366 "max_size" : 1024,
2367 "with_counters" : false,
2368 "support_timeout" : false,
2369 "direct_meters" : null,
2370 "action_ids" : [8, 2],
2371 "actions" : ["l3_fwd.set_nexthop", "NoAction"],
2372 "base_default_next" : null,
2373 "next_tables" : {
2374 "__HIT__" : "tbl_act_5",
2375 "__MISS__" : "tbl_act_6"
2376 }
2377 },
2378 {
2379 "name" : "tbl_act_5",
2380 "id" : 11,
2381 "key" : [],
2382 "match_type" : "exact",
2383 "type" : "simple",
2384 "max_size" : 1024,
2385 "with_counters" : false,
2386 "support_timeout" : false,
2387 "direct_meters" : null,
2388 "action_ids" : [18],
2389 "actions" : ["act_5"],
2390 "base_default_next" : "node_20",
2391 "next_tables" : {
2392 "act_5" : "node_20"
2393 },
2394 "default_entry" : {
2395 "action_id" : 18,
2396 "action_const" : true,
2397 "action_data" : [],
2398 "action_entry_const" : true
2399 }
2400 },
2401 {
2402 "name" : "tbl_act_6",
2403 "id" : 12,
2404 "key" : [],
2405 "match_type" : "exact",
2406 "type" : "simple",
2407 "max_size" : 1024,
2408 "with_counters" : false,
2409 "support_timeout" : false,
2410 "direct_meters" : null,
2411 "action_ids" : [19],
2412 "actions" : ["act_6"],
2413 "base_default_next" : "node_20",
2414 "next_tables" : {
2415 "act_6" : "node_20"
2416 },
2417 "default_entry" : {
2418 "action_id" : 19,
2419 "action_const" : true,
2420 "action_data" : [],
2421 "action_entry_const" : true
2422 }
2423 },
2424 {
2425 "name" : "l3_fwd.l3_ipv4_fallback_table",
2426 "id" : 13,
2427 "source_info" : {
2428 "filename" : "l3_fwd.p4",
2429 "line" : 95,
2430 "column" : 8,
2431 "source_fragment" : "l3_ipv4_fallback_table"
2432 },
2433 "key" : [
2434 {
2435 "match_type" : "lpm",
2436 "target" : ["ipv4_base", "dst_addr"],
2437 "mask" : null
2438 }
2439 ],
2440 "match_type" : "lpm",
2441 "type" : "indirect_ws",
2442 "action_profile" : "l3_fwd.wcmp_action_profile",
2443 "max_size" : 1024,
2444 "with_counters" : false,
2445 "support_timeout" : false,
2446 "direct_meters" : null,
2447 "action_ids" : [9, 3],
2448 "actions" : ["l3_fwd.set_nexthop", "NoAction"],
2449 "base_default_next" : "node_22",
2450 "next_tables" : {
2451 "l3_fwd.set_nexthop" : "node_22",
2452 "NoAction" : "node_22"
2453 }
2454 },
2455 {
2456 "name" : "tbl_act_7",
2457 "id" : 14,
2458 "key" : [],
2459 "match_type" : "exact",
2460 "type" : "simple",
2461 "max_size" : 1024,
2462 "with_counters" : false,
2463 "support_timeout" : false,
2464 "direct_meters" : null,
2465 "action_ids" : [20],
2466 "actions" : ["act_7"],
2467 "base_default_next" : "punt.punt_table",
2468 "next_tables" : {
2469 "act_7" : "punt.punt_table"
2470 },
2471 "default_entry" : {
2472 "action_id" : 20,
2473 "action_const" : true,
2474 "action_data" : [],
2475 "action_entry_const" : true
2476 }
2477 },
2478 {
2479 "name" : "punt.punt_table",
2480 "id" : 15,
2481 "source_info" : {
2482 "filename" : "punt.p4",
2483 "line" : 55,
2484 "column" : 8,
2485 "source_fragment" : "punt_table"
2486 },
2487 "key" : [
2488 {
2489 "match_type" : "ternary",
2490 "target" : ["standard_metadata", "ingress_port"],
2491 "mask" : null
2492 },
2493 {
2494 "match_type" : "ternary",
2495 "target" : ["standard_metadata", "egress_spec"],
2496 "mask" : null
2497 },
2498 {
2499 "match_type" : "ternary",
2500 "target" : ["ethernet", "ether_type"],
2501 "mask" : null
2502 },
2503 {
2504 "match_type" : "ternary",
2505 "target" : ["ipv4_base", "diffserv"],
2506 "mask" : null
2507 },
2508 {
2509 "match_type" : "ternary",
2510 "target" : ["ipv6_base", "traffic_class"],
2511 "mask" : null
2512 },
2513 {
2514 "match_type" : "ternary",
2515 "target" : ["ipv4_base", "ttl"],
2516 "mask" : null
2517 },
2518 {
2519 "match_type" : "ternary",
2520 "target" : ["ipv6_base", "hop_limit"],
2521 "mask" : null
2522 },
2523 {
2524 "match_type" : "ternary",
2525 "target" : ["ipv4_base", "src_addr"],
2526 "mask" : null
2527 },
2528 {
2529 "match_type" : "ternary",
2530 "target" : ["ipv4_base", "dst_addr"],
2531 "mask" : null
2532 },
2533 {
2534 "match_type" : "ternary",
2535 "target" : ["ipv6_base", "src_addr"],
2536 "mask" : null
2537 },
2538 {
2539 "match_type" : "ternary",
2540 "target" : ["ipv6_base", "dst_addr"],
2541 "mask" : null
2542 },
2543 {
2544 "match_type" : "ternary",
2545 "target" : ["ipv4_base", "protocol"],
2546 "mask" : null
2547 },
2548 {
2549 "match_type" : "ternary",
2550 "target" : ["ipv6_base", "next_header"],
2551 "mask" : null
2552 },
2553 {
2554 "match_type" : "ternary",
2555 "target" : ["arp", "target_proto_addr"],
2556 "mask" : null
2557 },
2558 {
2559 "match_type" : "ternary",
2560 "target" : ["scalars", "local_metadata_t.icmp_code"],
2561 "mask" : null
2562 },
2563 {
2564 "match_type" : "ternary",
2565 "target" : ["vlan_tag[0]", "vid"],
2566 "mask" : null
2567 },
2568 {
2569 "match_type" : "ternary",
2570 "target" : ["vlan_tag[0]", "pcp"],
2571 "mask" : null
2572 },
2573 {
2574 "match_type" : "ternary",
2575 "target" : ["scalars", "local_metadata_t.class_id"],
2576 "mask" : null
2577 },
2578 {
2579 "match_type" : "ternary",
2580 "target" : ["scalars", "local_metadata_t.vrf_id"],
2581 "mask" : null
2582 }
2583 ],
2584 "match_type" : "ternary",
2585 "type" : "simple",
2586 "max_size" : 1024,
2587 "support_timeout" : false,
2588 "direct_meters" : "punt.ingress_port_meter",
2589 "action_ids" : [10, 11, 4],
2590 "actions" : ["punt.set_queue_and_clone_to_cpu", "punt.set_queue_and_send_to_cpu", "NoAction"],
2591 "base_default_next" : "node_25",
2592 "next_tables" : {
2593 "punt.set_queue_and_clone_to_cpu" : "node_25",
2594 "punt.set_queue_and_send_to_cpu" : "node_25",
2595 "NoAction" : "node_25"
2596 },
2597 "default_entry" : {
2598 "action_id" : 4,
2599 "action_const" : false,
2600 "action_data" : [],
2601 "action_entry_const" : false
2602 }
2603 },
2604 {
2605 "name" : "tbl_act_8",
2606 "id" : 16,
2607 "key" : [],
2608 "match_type" : "exact",
2609 "type" : "simple",
2610 "max_size" : 1024,
2611 "with_counters" : false,
2612 "support_timeout" : false,
2613 "direct_meters" : null,
2614 "action_ids" : [21],
2615 "actions" : ["act_8"],
2616 "base_default_next" : null,
2617 "next_tables" : {
2618 "act_8" : null
2619 },
2620 "default_entry" : {
2621 "action_id" : 21,
2622 "action_const" : true,
2623 "action_data" : [],
2624 "action_entry_const" : true
2625 }
2626 }
2627 ],
2628 "action_profiles" : [
2629 {
2630 "name" : "l3_fwd.wcmp_action_profile",
2631 "id" : 0,
2632 "max_size" : 1024,
2633 "selector" : {
2634 "algo" : "crc16",
2635 "input" : [
2636 {
2637 "type" : "field",
2638 "value" : ["ipv4_base", "dst_addr"]
2639 },
2640 {
2641 "type" : "field",
2642 "value" : ["ipv4_base", "src_addr"]
2643 },
2644 {
2645 "type" : "field",
2646 "value" : ["ipv4_base", "protocol"]
2647 },
2648 {
2649 "type" : "field",
2650 "value" : ["scalars", "local_metadata_t.l4_src_port"]
2651 },
2652 {
2653 "type" : "field",
2654 "value" : ["scalars", "local_metadata_t.l4_dst_port"]
2655 }
2656 ]
2657 }
2658 }
2659 ],
2660 "conditionals" : [
2661 {
2662 "name" : "node_2",
2663 "id" : 0,
2664 "source_info" : {
2665 "filename" : "tor.p4",
2666 "line" : 21,
2667 "column" : 8,
2668 "source_fragment" : "hdr.packet_out.isValid()"
2669 },
2670 "expression" : {
2671 "type" : "expression",
2672 "value" : {
2673 "op" : "==",
2674 "left" : {
2675 "type" : "field",
2676 "value" : ["packet_out", "$valid$"]
2677 },
2678 "right" : {
2679 "type" : "hexstr",
2680 "value" : "0x01"
2681 }
2682 }
2683 },
2684 "true_next" : "node_3",
2685 "false_next" : "vrf.vrf_classifier_table"
2686 },
2687 {
2688 "name" : "node_3",
2689 "id" : 1,
2690 "source_info" : {
2691 "filename" : "packetio.p4",
2692 "line" : 20,
2693 "column" : 8,
2694 "source_fragment" : "hdr.packet_out.submit_to_ingress == 0"
2695 },
2696 "expression" : {
2697 "type" : "expression",
2698 "value" : {
2699 "op" : "==",
2700 "left" : {
2701 "type" : "field",
2702 "value" : ["packet_out", "submit_to_ingress"]
2703 },
2704 "right" : {
2705 "type" : "hexstr",
2706 "value" : "0x00"
2707 }
2708 }
2709 },
2710 "true_next" : "tbl_act",
2711 "false_next" : "tbl_act_0"
2712 },
2713 {
2714 "name" : "node_11",
2715 "id" : 2,
2716 "expression" : {
2717 "type" : "expression",
2718 "value" : {
2719 "op" : "d2b",
2720 "left" : null,
2721 "right" : {
2722 "type" : "field",
2723 "value" : ["scalars", "l3_fwd_tmp_4"]
2724 }
2725 }
2726 },
2727 "true_next" : "node_12",
2728 "false_next" : "punt.punt_table"
2729 },
2730 {
2731 "name" : "node_12",
2732 "id" : 3,
2733 "source_info" : {
2734 "filename" : "l3_fwd.p4",
2735 "line" : 165,
2736 "column" : 10,
2737 "source_fragment" : "hdr.ipv4_base.isValid()"
2738 },
2739 "expression" : {
2740 "type" : "expression",
2741 "value" : {
2742 "op" : "==",
2743 "left" : {
2744 "type" : "field",
2745 "value" : ["ipv4_base", "$valid$"]
2746 },
2747 "right" : {
2748 "type" : "hexstr",
2749 "value" : "0x01"
2750 }
2751 }
2752 },
2753 "true_next" : "l3_fwd.l3_ipv4_override_table",
2754 "false_next" : "punt.punt_table"
2755 },
2756 {
2757 "name" : "node_16",
2758 "id" : 4,
2759 "source_info" : {
2760 "filename" : "l3_fwd.p4",
2761 "line" : 166,
2762 "column" : 11,
2763 "source_fragment" : "!l3_ipv4_override_table.apply().hit"
2764 },
2765 "expression" : {
2766 "type" : "expression",
2767 "value" : {
2768 "op" : "not",
2769 "left" : null,
2770 "right" : {
2771 "type" : "expression",
2772 "value" : {
2773 "op" : "d2b",
2774 "left" : null,
2775 "right" : {
2776 "type" : "field",
2777 "value" : ["scalars", "l3_fwd_tmp_3"]
2778 }
2779 }
2780 }
2781 }
2782 },
2783 "true_next" : "l3_fwd.l3_ipv4_vrf_table",
2784 "false_next" : "node_22"
2785 },
2786 {
2787 "name" : "node_20",
2788 "id" : 5,
2789 "source_info" : {
2790 "filename" : "l3_fwd.p4",
2791 "line" : 167,
2792 "column" : 13,
2793 "source_fragment" : "!l3_ipv4_vrf_table.apply().hit"
2794 },
2795 "expression" : {
2796 "type" : "expression",
2797 "value" : {
2798 "op" : "not",
2799 "left" : null,
2800 "right" : {
2801 "type" : "expression",
2802 "value" : {
2803 "op" : "d2b",
2804 "left" : null,
2805 "right" : {
2806 "type" : "field",
2807 "value" : ["scalars", "l3_fwd_tmp_2"]
2808 }
2809 }
2810 }
2811 }
2812 },
2813 "true_next" : "l3_fwd.l3_ipv4_fallback_table",
2814 "false_next" : "node_22"
2815 },
2816 {
2817 "name" : "node_22",
2818 "id" : 6,
2819 "source_info" : {
2820 "filename" : "l3_fwd.p4",
2821 "line" : 171,
2822 "column" : 11,
2823 "source_fragment" : "hdr.ipv4_base.ttl == 0"
2824 },
2825 "expression" : {
2826 "type" : "expression",
2827 "value" : {
2828 "op" : "==",
2829 "left" : {
2830 "type" : "field",
2831 "value" : ["ipv4_base", "ttl"]
2832 },
2833 "right" : {
2834 "type" : "hexstr",
2835 "value" : "0x00"
2836 }
2837 }
2838 },
2839 "true_next" : "tbl_act_7",
2840 "false_next" : "punt.punt_table"
2841 },
2842 {
2843 "name" : "node_25",
2844 "id" : 7,
2845 "source_info" : {
2846 "filename" : "punt.p4",
2847 "line" : 92,
2848 "column" : 7,
2849 "source_fragment" : "local_metadata.color != 0"
2850 },
2851 "expression" : {
2852 "type" : "expression",
2853 "value" : {
2854 "op" : "!=",
2855 "left" : {
2856 "type" : "field",
2857 "value" : ["scalars", "local_metadata_t.color"]
2858 },
2859 "right" : {
2860 "type" : "hexstr",
2861 "value" : "0x00"
2862 }
2863 }
2864 },
2865 "false_next" : null,
2866 "true_next" : "tbl_act_8"
2867 }
2868 ]
2869 },
2870 {
2871 "name" : "egress",
2872 "id" : 1,
2873 "source_info" : {
2874 "filename" : "tor.p4",
2875 "line" : 31,
2876 "column" : 8,
2877 "source_fragment" : "egress_tor"
2878 },
2879 "init_table" : "node_29",
2880 "tables" : [
2881 {
2882 "name" : "tbl_act_9",
2883 "id" : 17,
2884 "key" : [],
2885 "match_type" : "exact",
2886 "type" : "simple",
2887 "max_size" : 1024,
2888 "with_counters" : false,
2889 "support_timeout" : false,
2890 "direct_meters" : null,
2891 "action_ids" : [25],
2892 "actions" : ["act_9"],
2893 "base_default_next" : "node_31",
2894 "next_tables" : {
2895 "act_9" : "node_31"
2896 },
2897 "default_entry" : {
2898 "action_id" : 25,
2899 "action_const" : true,
2900 "action_data" : [],
2901 "action_entry_const" : true
2902 }
2903 },
2904 {
2905 "name" : "tbl_act_10",
2906 "id" : 18,
2907 "key" : [],
2908 "match_type" : "exact",
2909 "type" : "simple",
2910 "max_size" : 1024,
2911 "with_counters" : false,
2912 "support_timeout" : false,
2913 "direct_meters" : null,
2914 "action_ids" : [26],
2915 "actions" : ["act_10"],
2916 "base_default_next" : "node_33",
2917 "next_tables" : {
2918 "act_10" : "node_33"
2919 },
2920 "default_entry" : {
2921 "action_id" : 26,
2922 "action_const" : true,
2923 "action_data" : [],
2924 "action_entry_const" : true
2925 }
2926 },
2927 {
2928 "name" : "tbl_packetio_egress_encap_packet_in_header",
2929 "id" : 19,
2930 "key" : [],
2931 "match_type" : "exact",
2932 "type" : "simple",
2933 "max_size" : 1024,
2934 "with_counters" : false,
2935 "support_timeout" : false,
2936 "direct_meters" : null,
2937 "action_ids" : [23],
2938 "actions" : ["packetio_egress.encap_packet_in_header"],
2939 "base_default_next" : "node_35",
2940 "next_tables" : {
2941 "packetio_egress.encap_packet_in_header" : "node_35"
2942 },
2943 "default_entry" : {
2944 "action_id" : 23,
2945 "action_const" : true,
2946 "action_data" : [],
2947 "action_entry_const" : true
2948 }
2949 },
2950 {
2951 "name" : "spoof_protection.dhcp_spoof_protection_table",
2952 "id" : 20,
2953 "source_info" : {
2954 "filename" : "spoof_protection.p4",
2955 "line" : 30,
2956 "column" : 8,
2957 "source_fragment" : "dhcp_spoof_protection_table"
2958 },
2959 "key" : [
2960 {
2961 "match_type" : "exact",
2962 "target" : ["scalars", "local_metadata_t.l4_dst_port"],
2963 "mask" : null
2964 },
2965 {
2966 "match_type" : "exact",
2967 "target" : ["standard_metadata", "egress_spec"],
2968 "mask" : null
2969 }
2970 ],
2971 "match_type" : "exact",
2972 "type" : "simple",
2973 "max_size" : 1024,
2974 "with_counters" : false,
2975 "support_timeout" : false,
2976 "direct_meters" : null,
2977 "action_ids" : [24, 22],
2978 "actions" : ["spoof_protection.drop_packet", "NoAction"],
2979 "base_default_next" : null,
2980 "next_tables" : {
2981 "spoof_protection.drop_packet" : null,
2982 "NoAction" : null
2983 },
2984 "default_entry" : {
2985 "action_id" : 22,
2986 "action_const" : false,
2987 "action_data" : [],
2988 "action_entry_const" : false
2989 }
2990 }
2991 ],
2992 "action_profiles" : [],
2993 "conditionals" : [
2994 {
2995 "name" : "node_29",
2996 "id" : 8,
2997 "source_info" : {
2998 "filename" : "packetio.p4",
2999 "line" : 55,
3000 "column" : 8,
3001 "source_fragment" : "standard_metadata.egress_port < 510"
3002 },
3003 "expression" : {
3004 "type" : "expression",
3005 "value" : {
3006 "op" : "<",
3007 "left" : {
3008 "type" : "field",
3009 "value" : ["standard_metadata", "egress_port"]
3010 },
3011 "right" : {
3012 "type" : "hexstr",
3013 "value" : "0x01fe"
3014 }
3015 }
3016 },
3017 "true_next" : "tbl_act_9",
3018 "false_next" : "node_31"
3019 },
3020 {
3021 "name" : "node_31",
3022 "id" : 9,
3023 "source_info" : {
3024 "filename" : "packetio.p4",
3025 "line" : 58,
3026 "column" : 8,
3027 "source_fragment" : "standard_metadata.ingress_port < 510"
3028 },
3029 "expression" : {
3030 "type" : "expression",
3031 "value" : {
3032 "op" : "<",
3033 "left" : {
3034 "type" : "field",
3035 "value" : ["standard_metadata", "ingress_port"]
3036 },
3037 "right" : {
3038 "type" : "hexstr",
3039 "value" : "0x01fe"
3040 }
3041 }
3042 },
3043 "true_next" : "tbl_act_10",
3044 "false_next" : "node_33"
3045 },
3046 {
3047 "name" : "node_33",
3048 "id" : 10,
3049 "source_info" : {
3050 "filename" : "packetio.p4",
3051 "line" : 63,
3052 "column" : 8,
3053 "source_fragment" : "standard_metadata.egress_port == 255"
3054 },
3055 "expression" : {
3056 "type" : "expression",
3057 "value" : {
3058 "op" : "==",
3059 "left" : {
3060 "type" : "field",
3061 "value" : ["standard_metadata", "egress_port"]
3062 },
3063 "right" : {
3064 "type" : "hexstr",
3065 "value" : "0x00ff"
3066 }
3067 }
3068 },
3069 "true_next" : "tbl_packetio_egress_encap_packet_in_header",
3070 "false_next" : "node_35"
3071 },
3072 {
3073 "name" : "node_35",
3074 "id" : 11,
3075 "source_info" : {
3076 "filename" : "packetio.p4",
3077 "line" : 66,
3078 "column" : 8,
3079 "source_fragment" : "local_metadata.skip_egress == 1"
3080 },
3081 "expression" : {
3082 "type" : "expression",
3083 "value" : {
3084 "op" : "==",
3085 "left" : {
3086 "type" : "field",
3087 "value" : ["scalars", "local_metadata_t.skip_egress"]
3088 },
3089 "right" : {
3090 "type" : "hexstr",
3091 "value" : "0x01"
3092 }
3093 }
3094 },
3095 "true_next" : null,
3096 "false_next" : "node_36"
3097 },
3098 {
3099 "name" : "node_36",
3100 "id" : 12,
3101 "source_info" : {
3102 "filename" : "spoof_protection.p4",
3103 "line" : 41,
3104 "column" : 7,
3105 "source_fragment" : "hdr.udp.isValid()"
3106 },
3107 "expression" : {
3108 "type" : "expression",
3109 "value" : {
3110 "op" : "==",
3111 "left" : {
3112 "type" : "field",
3113 "value" : ["udp", "$valid$"]
3114 },
3115 "right" : {
3116 "type" : "hexstr",
3117 "value" : "0x01"
3118 }
3119 }
3120 },
3121 "false_next" : null,
3122 "true_next" : "spoof_protection.dhcp_spoof_protection_table"
3123 }
3124 ]
3125 }
3126 ],
3127 "checksums" : [
3128 {
3129 "name" : "cksum",
3130 "id" : 0,
3131 "target" : ["ipv4_base", "hdr_checksum"],
3132 "type" : "generic",
3133 "calculation" : "calc"
3134 }
3135 ],
3136 "force_arith" : [],
3137 "extern_instances" : [],
3138 "field_aliases" : [
3139 [
3140 "queueing_metadata.enq_timestamp",
3141 ["standard_metadata", "enq_timestamp"]
3142 ],
3143 [
3144 "queueing_metadata.enq_qdepth",
3145 ["standard_metadata", "enq_qdepth"]
3146 ],
3147 [
3148 "queueing_metadata.deq_timedelta",
3149 ["standard_metadata", "deq_timedelta"]
3150 ],
3151 [
3152 "queueing_metadata.deq_qdepth",
3153 ["standard_metadata", "deq_qdepth"]
3154 ],
3155 [
3156 "intrinsic_metadata.ingress_global_timestamp",
3157 ["standard_metadata", "ingress_global_timestamp"]
3158 ],
3159 [
3160 "intrinsic_metadata.lf_field_list",
3161 ["standard_metadata", "lf_field_list"]
3162 ],
3163 [
3164 "intrinsic_metadata.mcast_grp",
3165 ["standard_metadata", "mcast_grp"]
3166 ],
3167 [
3168 "intrinsic_metadata.resubmit_flag",
3169 ["standard_metadata", "resubmit_flag"]
3170 ],
3171 [
3172 "intrinsic_metadata.egress_rid",
3173 ["standard_metadata", "egress_rid"]
3174 ]
3175 ]
3176}