blob: 8b272b04a31484da3e24043b97dd2b6af4875228 [file] [log] [blame]
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001{
2 "program" : "wcmp.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" : [
Brian O'Connora6862e02017-09-08 01:17:39 -070012 ["tmp_0", 104, false],
13 ["tmp", 8, false],
Carmelo Cascone16de6db2017-08-22 00:27:57 +020014 ["tmp_1", 32, false],
15 ["tmp_2", 32, false]
Carmelo Casconefc3776d2017-08-21 23:17:22 +020016 ]
17 },
18 {
19 "name" : "ethernet_t",
20 "id" : 1,
21 "fields" : [
22 ["dstAddr", 48, false],
23 ["srcAddr", 48, false],
24 ["etherType", 16, false]
25 ]
26 },
27 {
28 "name" : "ipv4_t",
29 "id" : 2,
30 "fields" : [
31 ["version", 4, false],
32 ["ihl", 4, false],
33 ["diffserv", 8, false],
34 ["totalLen", 16, false],
35 ["identification", 16, false],
36 ["flags", 3, false],
37 ["fragOffset", 13, false],
38 ["ttl", 8, false],
39 ["protocol", 8, false],
40 ["hdrChecksum", 16, false],
41 ["srcAddr", 32, false],
42 ["dstAddr", 32, false]
43 ]
44 },
45 {
Carmelo Cascone16de6db2017-08-22 00:27:57 +020046 "name" : "packet_in_t",
Carmelo Casconefc3776d2017-08-21 23:17:22 +020047 "id" : 3,
48 "fields" : [
Carmelo Cascone16de6db2017-08-22 00:27:57 +020049 ["ingress_port", 9, false],
50 ["_padding", 7, false]
51 ]
52 },
53 {
54 "name" : "packet_out_t",
55 "id" : 4,
56 "fields" : [
57 ["egress_port", 9, false],
58 ["_padding_0", 7, false]
59 ]
60 },
61 {
62 "name" : "tcp_t",
63 "id" : 5,
64 "fields" : [
Carmelo Casconefc3776d2017-08-21 23:17:22 +020065 ["srcPort", 16, false],
66 ["dstPort", 16, false],
67 ["seqNo", 32, false],
68 ["ackNo", 32, false],
69 ["dataOffset", 4, false],
70 ["res", 3, false],
71 ["ecn", 3, false],
72 ["ctrl", 6, false],
73 ["window", 16, false],
74 ["checksum", 16, false],
75 ["urgentPtr", 16, false]
76 ]
77 },
78 {
79 "name" : "udp_t",
Carmelo Cascone16de6db2017-08-22 00:27:57 +020080 "id" : 6,
Carmelo Casconefc3776d2017-08-21 23:17:22 +020081 "fields" : [
82 ["srcPort", 16, false],
83 ["dstPort", 16, false],
84 ["length_", 16, false],
85 ["checksum", 16, false]
86 ]
87 },
88 {
Carmelo Casconefc3776d2017-08-21 23:17:22 +020089 "name" : "wcmp_meta_t",
Carmelo Cascone16de6db2017-08-22 00:27:57 +020090 "id" : 7,
Carmelo Casconefc3776d2017-08-21 23:17:22 +020091 "fields" : [
92 ["groupId", 16, false],
93 ["numBits", 8, false],
94 ["selector", 32, false]
95 ]
96 },
97 {
98 "name" : "standard_metadata",
Carmelo Cascone16de6db2017-08-22 00:27:57 +020099 "id" : 8,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200100 "fields" : [
101 ["ingress_port", 9, false],
102 ["egress_spec", 9, false],
103 ["egress_port", 9, false],
104 ["clone_spec", 32, false],
105 ["instance_type", 32, false],
106 ["drop", 1, false],
107 ["recirculate_port", 16, false],
108 ["packet_length", 32, false],
109 ["enq_timestamp", 32, false],
110 ["enq_qdepth", 19, false],
111 ["deq_timedelta", 32, false],
112 ["deq_qdepth", 19, false],
113 ["ingress_global_timestamp", 48, false],
114 ["lf_field_list", 32, false],
115 ["mcast_grp", 16, false],
116 ["resubmit_flag", 1, false],
117 ["egress_rid", 16, false],
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200118 ["_padding_1", 5, false]
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200119 ]
120 }
121 ],
122 "headers" : [
123 {
124 "name" : "scalars",
125 "id" : 0,
126 "header_type" : "scalars_0",
127 "metadata" : true,
128 "pi_omit" : true
129 },
130 {
131 "name" : "standard_metadata",
132 "id" : 1,
133 "header_type" : "standard_metadata",
134 "metadata" : true,
135 "pi_omit" : true
136 },
137 {
138 "name" : "ethernet",
139 "id" : 2,
140 "header_type" : "ethernet_t",
141 "metadata" : false,
142 "pi_omit" : true
143 },
144 {
145 "name" : "ipv4",
146 "id" : 3,
147 "header_type" : "ipv4_t",
148 "metadata" : false,
149 "pi_omit" : true
150 },
151 {
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200152 "name" : "packet_in_hdr",
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200153 "id" : 4,
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200154 "header_type" : "packet_in_t",
155 "metadata" : false,
156 "pi_omit" : true
157 },
158 {
159 "name" : "packet_out_hdr",
160 "id" : 5,
161 "header_type" : "packet_out_t",
162 "metadata" : false,
163 "pi_omit" : true
164 },
165 {
166 "name" : "tcp",
167 "id" : 6,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200168 "header_type" : "tcp_t",
169 "metadata" : false,
170 "pi_omit" : true
171 },
172 {
173 "name" : "udp",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200174 "id" : 7,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200175 "header_type" : "udp_t",
176 "metadata" : false,
177 "pi_omit" : true
178 },
179 {
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200180 "name" : "wcmp_meta",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200181 "id" : 8,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200182 "header_type" : "wcmp_meta_t",
183 "metadata" : true,
184 "pi_omit" : true
185 }
186 ],
187 "header_stacks" : [],
188 "header_union_types" : [],
189 "header_unions" : [],
190 "header_union_stacks" : [],
191 "field_lists" : [],
192 "errors" : [
193 ["NoError", 1],
194 ["PacketTooShort", 2],
195 ["NoMatch", 3],
196 ["StackOutOfBounds", 4],
197 ["HeaderTooShort", 5],
198 ["ParserTimeout", 6]
199 ],
200 "enums" : [],
201 "parsers" : [
202 {
203 "name" : "parser",
204 "id" : 0,
205 "init_state" : "start",
206 "parse_states" : [
207 {
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200208 "name" : "default_parser",
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200209 "id" : 0,
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200210 "parser_ops" : [],
211 "transitions" : [
212 {
213 "value" : "0x00ff",
214 "mask" : null,
215 "next_state" : "parse_pkt_out"
216 },
217 {
218 "value" : "default",
219 "mask" : null,
220 "next_state" : "parse_ethernet"
221 }
222 ],
223 "transition_key" : [
224 {
225 "type" : "field",
226 "value" : ["standard_metadata", "ingress_port"]
227 }
228 ]
229 },
230 {
231 "name" : "parse_ethernet",
232 "id" : 1,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200233 "parser_ops" : [
234 {
235 "parameters" : [
236 {
237 "type" : "regular",
238 "value" : "ethernet"
239 }
240 ],
241 "op" : "extract"
242 }
243 ],
244 "transitions" : [
245 {
246 "value" : "0x0800",
247 "mask" : null,
248 "next_state" : "parse_ipv4"
249 },
250 {
251 "value" : "default",
252 "mask" : null,
253 "next_state" : null
254 }
255 ],
256 "transition_key" : [
257 {
258 "type" : "field",
259 "value" : ["ethernet", "etherType"]
260 }
261 ]
262 },
263 {
264 "name" : "parse_ipv4",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200265 "id" : 2,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200266 "parser_ops" : [
267 {
268 "parameters" : [
269 {
270 "type" : "regular",
271 "value" : "ipv4"
272 }
273 ],
274 "op" : "extract"
275 }
276 ],
277 "transitions" : [
278 {
279 "value" : "0x000006",
280 "mask" : null,
281 "next_state" : "parse_tcp"
282 },
283 {
284 "value" : "0x000011",
285 "mask" : null,
286 "next_state" : "parse_udp"
287 },
288 {
289 "value" : "default",
290 "mask" : null,
291 "next_state" : null
292 }
293 ],
294 "transition_key" : [
295 {
296 "type" : "field",
297 "value" : ["ipv4", "fragOffset"]
298 },
299 {
300 "type" : "field",
301 "value" : ["ipv4", "protocol"]
302 }
303 ]
304 },
305 {
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200306 "name" : "parse_pkt_in",
307 "id" : 3,
308 "parser_ops" : [
309 {
310 "parameters" : [
311 {
312 "type" : "regular",
313 "value" : "packet_in_hdr"
314 }
315 ],
316 "op" : "extract"
317 }
318 ],
319 "transitions" : [
320 {
321 "value" : "default",
322 "mask" : null,
323 "next_state" : "parse_ethernet"
324 }
325 ],
326 "transition_key" : []
327 },
328 {
329 "name" : "parse_pkt_out",
330 "id" : 4,
331 "parser_ops" : [
332 {
333 "parameters" : [
334 {
335 "type" : "regular",
336 "value" : "packet_out_hdr"
337 }
338 ],
339 "op" : "extract"
340 }
341 ],
342 "transitions" : [
343 {
344 "value" : "default",
345 "mask" : null,
346 "next_state" : "parse_ethernet"
347 }
348 ],
349 "transition_key" : []
350 },
351 {
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200352 "name" : "parse_tcp",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200353 "id" : 5,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200354 "parser_ops" : [
355 {
356 "parameters" : [
357 {
358 "type" : "regular",
359 "value" : "tcp"
360 }
361 ],
362 "op" : "extract"
363 }
364 ],
365 "transitions" : [
366 {
367 "value" : "default",
368 "mask" : null,
369 "next_state" : null
370 }
371 ],
372 "transition_key" : []
373 },
374 {
375 "name" : "parse_udp",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200376 "id" : 6,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200377 "parser_ops" : [
378 {
379 "parameters" : [
380 {
381 "type" : "regular",
382 "value" : "udp"
383 }
384 ],
385 "op" : "extract"
386 }
387 ],
388 "transitions" : [
389 {
390 "value" : "default",
391 "mask" : null,
392 "next_state" : null
393 }
394 ],
395 "transition_key" : []
396 },
397 {
398 "name" : "start",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200399 "id" : 7,
400 "parser_ops" : [
401 {
402 "parameters" : [
403 {
404 "type" : "field",
405 "value" : ["scalars", "tmp_0"]
406 },
407 {
408 "type" : "lookahead",
Brian O'Connora6862e02017-09-08 01:17:39 -0700409 "value" : [0, 104]
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200410 }
411 ],
412 "op" : "set"
413 },
414 {
415 "parameters" : [
416 {
417 "type" : "field",
418 "value" : ["scalars", "tmp"]
419 },
420 {
421 "type" : "expression",
422 "value" : {
423 "type" : "expression",
424 "value" : {
425 "op" : "&",
426 "left" : {
427 "type" : "field",
428 "value" : ["scalars", "tmp_0"]
429 },
430 "right" : {
431 "type" : "hexstr",
Brian O'Connora6862e02017-09-08 01:17:39 -0700432 "value" : "0xff"
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200433 }
434 }
435 }
436 }
437 ],
438 "op" : "set"
439 }
440 ],
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200441 "transitions" : [
442 {
Brian O'Connora6862e02017-09-08 01:17:39 -0700443 "value" : "0x00",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200444 "mask" : null,
445 "next_state" : "parse_pkt_in"
446 },
447 {
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200448 "value" : "default",
449 "mask" : null,
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200450 "next_state" : "default_parser"
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200451 }
452 ],
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200453 "transition_key" : [
454 {
455 "type" : "field",
456 "value" : ["scalars", "tmp"]
457 }
458 ]
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200459 }
460 ]
461 }
462 ],
463 "deparsers" : [
464 {
465 "name" : "deparser",
466 "id" : 0,
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200467 "order" : ["packet_out_hdr", "packet_in_hdr", "ethernet", "ipv4", "udp", "tcp"]
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200468 }
469 ],
470 "meter_arrays" : [],
471 "counter_arrays" : [
472 {
473 "name" : "table0_counter",
474 "id" : 0,
475 "is_direct" : true,
476 "binding" : "table0"
477 },
478 {
479 "name" : "wcmp_group_table_counter",
480 "id" : 1,
481 "is_direct" : true,
482 "binding" : "wcmp_group_table"
483 },
484 {
485 "name" : "egress_port_counter",
486 "id" : 2,
Brian O'Connora6862e02017-09-08 01:17:39 -0700487 "size" : 254,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200488 "is_direct" : false
489 },
490 {
491 "name" : "ingress_port_counter",
492 "id" : 3,
Brian O'Connora6862e02017-09-08 01:17:39 -0700493 "size" : 254,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200494 "is_direct" : false
495 }
496 ],
497 "register_arrays" : [],
498 "calculations" : [
499 {
500 "name" : "calc",
501 "id" : 0,
502 "algo" : "crc32",
503 "input" : [
504 {
505 "type" : "field",
506 "value" : ["ipv4", "srcAddr"]
507 },
508 {
509 "type" : "field",
510 "value" : ["ipv4", "dstAddr"]
511 },
512 {
513 "type" : "field",
514 "value" : ["ipv4", "protocol"]
515 },
516 {
517 "type" : "field",
518 "value" : ["tcp", "srcPort"]
519 },
520 {
521 "type" : "field",
522 "value" : ["tcp", "dstPort"]
523 },
524 {
525 "type" : "field",
526 "value" : ["udp", "srcPort"]
527 },
528 {
529 "type" : "field",
530 "value" : ["udp", "dstPort"]
531 }
532 ]
533 }
534 ],
535 "learn_lists" : [],
536 "actions" : [
537 {
Carmelo Casconef2ac7202017-09-08 00:57:44 +0200538 "name" : "NoAction",
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200539 "id" : 0,
540 "runtime_data" : [],
Carmelo Casconef2ac7202017-09-08 00:57:44 +0200541 "primitives" : []
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200542 },
543 {
544 "name" : "NoAction",
545 "id" : 1,
546 "runtime_data" : [],
547 "primitives" : []
548 },
549 {
550 "name" : "NoAction",
551 "id" : 2,
552 "runtime_data" : [],
553 "primitives" : []
554 },
555 {
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200556 "name" : "wcmp_set_selector",
Carmelo Casconef2ac7202017-09-08 00:57:44 +0200557 "id" : 3,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200558 "runtime_data" : [],
559 "primitives" : [
560 {
561 "op" : "assign",
562 "parameters" : [
563 {
564 "type" : "field",
565 "value" : ["wcmp_meta", "selector"]
566 },
567 {
568 "type" : "expression",
569 "value" : {
570 "type" : "expression",
571 "value" : {
572 "op" : "&",
573 "left" : {
574 "type" : "expression",
575 "value" : {
576 "op" : "&",
577 "left" : {
578 "type" : "expression",
579 "value" : {
580 "op" : "<<",
581 "left" : {
582 "type" : "expression",
583 "value" : {
584 "op" : "&",
585 "left" : {
586 "type" : "expression",
587 "value" : {
588 "op" : "+",
589 "left" : {
590 "type" : "expression",
591 "value" : {
592 "op" : "&",
593 "left" : {
594 "type" : "expression",
595 "value" : {
596 "op" : "<<",
597 "left" : {
598 "type" : "hexstr",
599 "value" : "0x01"
600 },
601 "right" : {
602 "type" : "field",
603 "value" : ["wcmp_meta", "numBits"]
604 }
605 }
606 },
607 "right" : {
608 "type" : "hexstr",
609 "value" : "0xff"
610 }
611 }
612 },
613 "right" : {
614 "type" : "hexstr",
615 "value" : "0xff"
616 }
617 }
618 },
619 "right" : {
620 "type" : "hexstr",
621 "value" : "0xff"
622 }
623 }
624 },
625 "right" : {
626 "type" : "expression",
627 "value" : {
628 "op" : "&",
629 "left" : {
630 "type" : "expression",
631 "value" : {
632 "op" : "-",
633 "left" : {
634 "type" : "hexstr",
635 "value" : "0x20"
636 },
637 "right" : {
638 "type" : "field",
639 "value" : ["wcmp_meta", "numBits"]
640 }
641 }
642 },
643 "right" : {
644 "type" : "hexstr",
645 "value" : "0xff"
646 }
647 }
648 }
649 }
650 },
651 "right" : {
652 "type" : "hexstr",
653 "value" : "0xff"
654 }
655 }
656 },
657 "right" : {
658 "type" : "hexstr",
659 "value" : "0xffffffff"
660 }
661 }
662 }
663 }
664 ],
665 "source_info" : {
666 "filename" : "wcmp.p4",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200667 "line" : 44,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200668 "column" : 4,
669 "source_fragment" : "modify_field(wcmp_meta.selector, ..."
670 }
671 }
672 ]
673 },
674 {
675 "name" : "set_egress_port",
Carmelo Casconef2ac7202017-09-08 00:57:44 +0200676 "id" : 4,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200677 "runtime_data" : [
678 {
679 "name" : "port",
680 "bitwidth" : 9
681 }
682 ],
683 "primitives" : [
684 {
685 "op" : "assign",
686 "parameters" : [
687 {
688 "type" : "field",
689 "value" : ["standard_metadata", "egress_spec"]
690 },
691 {
692 "type" : "runtime_data",
693 "value" : 0
694 }
695 ],
696 "source_info" : {
697 "filename" : "include/actions.p4",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200698 "line" : 5,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200699 "column" : 23,
700 "source_fragment" : "port) { ..."
701 }
702 }
703 ]
704 },
705 {
706 "name" : "wcmp_group",
Carmelo Casconef2ac7202017-09-08 00:57:44 +0200707 "id" : 5,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200708 "runtime_data" : [
709 {
710 "name" : "groupId",
711 "bitwidth" : 16
712 }
713 ],
714 "primitives" : [
715 {
716 "op" : "assign",
717 "parameters" : [
718 {
719 "type" : "field",
720 "value" : ["wcmp_meta", "groupId"]
721 },
722 {
723 "type" : "runtime_data",
724 "value" : 0
725 }
726 ],
727 "source_info" : {
728 "filename" : "wcmp.p4",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200729 "line" : 38,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200730 "column" : 18,
731 "source_fragment" : "groupId) { ..."
732 }
733 },
734 {
735 "op" : "modify_field_with_hash_based_offset",
736 "parameters" : [
737 {
738 "type" : "field",
739 "value" : ["wcmp_meta", "numBits"]
740 },
741 {
742 "type" : "hexstr",
743 "value" : "0x00000002"
744 },
745 {
746 "type" : "calculation",
747 "value" : "calc"
748 },
749 {
750 "type" : "hexstr",
751 "value" : "0x000000000000001e"
752 }
753 ],
754 "source_info" : {
755 "filename" : "wcmp.p4",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200756 "line" : 40,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200757 "column" : 4,
758 "source_fragment" : "modify_field_with_hash_based_offset(wcmp_meta.numBits, 2, wcmp_hash, (32 - 2))"
759 }
760 }
761 ]
762 },
763 {
764 "name" : "send_to_cpu",
Carmelo Casconef2ac7202017-09-08 00:57:44 +0200765 "id" : 6,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200766 "runtime_data" : [],
767 "primitives" : [
768 {
769 "op" : "assign",
770 "parameters" : [
771 {
772 "type" : "field",
773 "value" : ["standard_metadata", "egress_spec"]
774 },
775 {
776 "type" : "hexstr",
777 "value" : "0x00ff"
778 }
779 ],
780 "source_info" : {
781 "filename" : "include/actions.p4",
Carmelo Casconef2ac7202017-09-08 00:57:44 +0200782 "line" : 18,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200783 "column" : 4,
784 "source_fragment" : "modify_field(standard_metadata.egress_spec, 255)"
785 }
Carmelo Casconef2ac7202017-09-08 00:57:44 +0200786 },
787 {
788 "op" : "add_header",
789 "parameters" : [
790 {
791 "type" : "header",
792 "value" : "packet_in_hdr"
793 }
794 ],
795 "source_info" : {
796 "filename" : "include/actions.p4",
797 "line" : 19,
798 "column" : 4,
799 "source_fragment" : "add_header(packet_in_hdr)"
800 }
801 },
802 {
803 "op" : "assign",
804 "parameters" : [
805 {
806 "type" : "field",
807 "value" : ["packet_in_hdr", "ingress_port"]
808 },
809 {
810 "type" : "field",
811 "value" : ["standard_metadata", "ingress_port"]
812 }
813 ],
814 "source_info" : {
815 "filename" : "include/actions.p4",
816 "line" : 20,
817 "column" : 4,
818 "source_fragment" : "modify_field(packet_in_hdr.ingress_port, standard_metadata.ingress_port)"
819 }
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200820 }
821 ]
822 },
823 {
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200824 "name" : "_drop",
Carmelo Casconef2ac7202017-09-08 00:57:44 +0200825 "id" : 7,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200826 "runtime_data" : [],
827 "primitives" : [
828 {
829 "op" : "assign",
830 "parameters" : [
831 {
832 "type" : "field",
833 "value" : ["standard_metadata", "egress_spec"]
834 },
835 {
836 "type" : "hexstr",
837 "value" : "0x01ff"
838 }
839 ],
840 "source_info" : {
841 "filename" : "include/actions.p4",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200842 "line" : 13,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200843 "column" : 4,
844 "source_fragment" : "modify_field(standard_metadata.egress_spec, 511)"
845 }
846 }
847 ]
848 },
849 {
850 "name" : "set_egress_port",
Carmelo Casconef2ac7202017-09-08 00:57:44 +0200851 "id" : 8,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200852 "runtime_data" : [
853 {
854 "name" : "port",
855 "bitwidth" : 9
856 }
857 ],
858 "primitives" : [
859 {
860 "op" : "assign",
861 "parameters" : [
862 {
863 "type" : "field",
864 "value" : ["standard_metadata", "egress_spec"]
865 },
866 {
867 "type" : "runtime_data",
868 "value" : 0
869 }
870 ],
871 "source_info" : {
872 "filename" : "include/actions.p4",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200873 "line" : 5,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200874 "column" : 23,
875 "source_fragment" : "port) { ..."
876 }
877 }
878 ]
879 },
880 {
Carmelo Casconef2ac7202017-09-08 00:57:44 +0200881 "name" : "_process_packet_out",
882 "id" : 9,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200883 "runtime_data" : [],
884 "primitives" : [
885 {
886 "op" : "assign",
887 "parameters" : [
888 {
889 "type" : "field",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200890 "value" : ["standard_metadata", "egress_spec"]
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200891 },
892 {
893 "type" : "field",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200894 "value" : ["packet_out_hdr", "egress_port"]
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200895 }
896 ],
897 "source_info" : {
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200898 "filename" : "include/packet_io.p4",
899 "line" : 7,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200900 "column" : 4,
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200901 "source_fragment" : "modify_field(standard_metadata.egress_spec, packet_out_hdr.egress_port)"
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200902 }
903 },
904 {
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200905 "op" : "remove_header",
906 "parameters" : [
907 {
908 "type" : "header",
909 "value" : "packet_out_hdr"
910 }
911 ],
912 "source_info" : {
913 "filename" : "include/packet_io.p4",
914 "line" : 8,
915 "column" : 4,
916 "source_fragment" : "remove_header(packet_out_hdr)"
917 }
918 }
919 ]
920 },
921 {
922 "name" : "count_egress",
Carmelo Casconef2ac7202017-09-08 00:57:44 +0200923 "id" : 10,
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200924 "runtime_data" : [],
925 "primitives" : [
926 {
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200927 "op" : "assign",
928 "parameters" : [
929 {
930 "type" : "field",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200931 "value" : ["scalars", "tmp_1"]
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200932 },
933 {
934 "type" : "expression",
935 "value" : {
936 "type" : "expression",
937 "value" : {
938 "op" : "&",
939 "left" : {
940 "type" : "field",
941 "value" : ["standard_metadata", "egress_spec"]
942 },
943 "right" : {
944 "type" : "hexstr",
945 "value" : "0xffffffff"
946 }
947 }
948 }
949 }
950 ]
951 },
952 {
953 "op" : "count",
954 "parameters" : [
955 {
956 "type" : "counter_array",
957 "value" : "egress_port_counter"
958 },
959 {
960 "type" : "field",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200961 "value" : ["scalars", "tmp_1"]
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200962 }
963 ],
964 "source_info" : {
965 "filename" : "include/port_counters.p4",
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200966 "line" : 22,
Carmelo Casconefc3776d2017-08-21 23:17:22 +0200967 "column" : 4,
968 "source_fragment" : "count(egress_port_counter, standard_metadata.egress_spec)"
969 }
970 }
971 ]
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200972 },
973 {
974 "name" : "count_ingress",
Carmelo Casconef2ac7202017-09-08 00:57:44 +0200975 "id" : 11,
Carmelo Cascone16de6db2017-08-22 00:27:57 +0200976 "runtime_data" : [],
977 "primitives" : [
978 {
979 "op" : "assign",
980 "parameters" : [
981 {
982 "type" : "field",
983 "value" : ["scalars", "tmp_2"]
984 },
985 {
986 "type" : "expression",
987 "value" : {
988 "type" : "expression",
989 "value" : {
990 "op" : "&",
991 "left" : {
992 "type" : "field",
993 "value" : ["standard_metadata", "ingress_port"]
994 },
995 "right" : {
996 "type" : "hexstr",
997 "value" : "0xffffffff"
998 }
999 }
1000 }
1001 }
1002 ]
1003 },
1004 {
1005 "op" : "count",
1006 "parameters" : [
1007 {
1008 "type" : "counter_array",
1009 "value" : "ingress_port_counter"
1010 },
1011 {
1012 "type" : "field",
1013 "value" : ["scalars", "tmp_2"]
1014 }
1015 ],
1016 "source_info" : {
1017 "filename" : "include/port_counters.p4",
1018 "line" : 18,
1019 "column" : 4,
1020 "source_fragment" : "count(ingress_port_counter, standard_metadata.ingress_port)"
1021 }
1022 }
1023 ]
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001024 }
1025 ],
1026 "pipelines" : [
1027 {
1028 "name" : "ingress",
1029 "id" : 0,
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001030 "init_table" : "node_2",
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001031 "tables" : [
1032 {
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001033 "name" : "table0",
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001034 "id" : 0,
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001035 "source_info" : {
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001036 "filename" : "wcmp.p4",
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001037 "line" : 48,
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001038 "column" : 0,
1039 "source_fragment" : "table table0 { ..."
1040 },
1041 "key" : [
1042 {
1043 "match_type" : "ternary",
1044 "target" : ["standard_metadata", "ingress_port"],
1045 "mask" : null
1046 },
1047 {
1048 "match_type" : "ternary",
1049 "target" : ["ethernet", "dstAddr"],
1050 "mask" : null
1051 },
1052 {
1053 "match_type" : "ternary",
1054 "target" : ["ethernet", "srcAddr"],
1055 "mask" : null
1056 },
1057 {
1058 "match_type" : "ternary",
1059 "target" : ["ethernet", "etherType"],
1060 "mask" : null
1061 }
1062 ],
1063 "match_type" : "ternary",
1064 "type" : "simple",
1065 "max_size" : 1024,
1066 "with_counters" : true,
1067 "support_timeout" : false,
1068 "direct_meters" : null,
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001069 "action_ids" : [4, 5, 6, 7, 0],
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001070 "actions" : ["set_egress_port", "wcmp_group", "send_to_cpu", "_drop", "NoAction"],
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001071 "base_default_next" : "node_6",
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001072 "next_tables" : {
1073 "wcmp_group" : "wcmp_set_selector_table",
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001074 "set_egress_port" : "node_6",
1075 "send_to_cpu" : "node_6",
1076 "_drop" : "node_6",
1077 "NoAction" : "node_6"
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001078 },
1079 "default_entry" : {
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001080 "action_id" : 0,
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001081 "action_const" : false,
1082 "action_data" : [],
1083 "action_entry_const" : false
1084 }
1085 },
1086 {
1087 "name" : "wcmp_set_selector_table",
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001088 "id" : 1,
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001089 "source_info" : {
1090 "filename" : "wcmp.p4",
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001091 "line" : 64,
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001092 "column" : 0,
1093 "source_fragment" : "table wcmp_set_selector_table { ..."
1094 },
1095 "key" : [],
1096 "match_type" : "exact",
1097 "type" : "simple",
1098 "max_size" : 1024,
1099 "with_counters" : false,
1100 "support_timeout" : false,
1101 "direct_meters" : null,
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001102 "action_ids" : [3, 2],
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001103 "actions" : ["wcmp_set_selector", "NoAction"],
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001104 "base_default_next" : "node_6",
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001105 "next_tables" : {
1106 "wcmp_set_selector" : "wcmp_group_table",
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001107 "NoAction" : "node_6"
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001108 },
1109 "default_entry" : {
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001110 "action_id" : 2,
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001111 "action_const" : false,
1112 "action_data" : [],
1113 "action_entry_const" : false
1114 }
1115 },
1116 {
1117 "name" : "wcmp_group_table",
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001118 "id" : 2,
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001119 "source_info" : {
1120 "filename" : "wcmp.p4",
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001121 "line" : 70,
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001122 "column" : 0,
1123 "source_fragment" : "table wcmp_group_table { ..."
1124 },
1125 "key" : [
1126 {
1127 "match_type" : "exact",
1128 "target" : ["wcmp_meta", "groupId"],
1129 "mask" : null
1130 },
1131 {
1132 "match_type" : "lpm",
1133 "target" : ["wcmp_meta", "selector"],
1134 "mask" : null
1135 }
1136 ],
1137 "match_type" : "lpm",
1138 "type" : "simple",
1139 "max_size" : 1024,
1140 "with_counters" : true,
1141 "support_timeout" : false,
1142 "direct_meters" : null,
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001143 "action_ids" : [8, 1],
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001144 "actions" : ["set_egress_port", "NoAction"],
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001145 "base_default_next" : "node_6",
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001146 "next_tables" : {
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001147 "set_egress_port" : "node_6",
1148 "NoAction" : "node_6"
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001149 },
1150 "default_entry" : {
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001151 "action_id" : 1,
1152 "action_const" : false,
1153 "action_data" : [],
1154 "action_entry_const" : false
1155 }
1156 },
1157 {
1158 "name" : "process_packet_out_table",
1159 "id" : 3,
1160 "source_info" : {
1161 "filename" : "include/packet_io.p4",
1162 "line" : 11,
1163 "column" : 0,
1164 "source_fragment" : "table process_packet_out_table { ..."
1165 },
1166 "key" : [],
1167 "match_type" : "exact",
1168 "type" : "simple",
1169 "max_size" : 1024,
1170 "with_counters" : false,
1171 "support_timeout" : false,
1172 "direct_meters" : null,
1173 "action_ids" : [9],
1174 "actions" : ["_process_packet_out"],
1175 "base_default_next" : "node_8",
1176 "next_tables" : {
1177 "_process_packet_out" : "node_8"
1178 },
1179 "default_entry" : {
1180 "action_id" : 9,
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001181 "action_const" : false,
1182 "action_data" : [],
1183 "action_entry_const" : false
1184 }
1185 },
1186 {
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001187 "name" : "ingress_port_count_table",
1188 "id" : 4,
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001189 "source_info" : {
1190 "filename" : "include/port_counters.p4",
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001191 "line" : 25,
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001192 "column" : 0,
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001193 "source_fragment" : "table ingress_port_count_table { ..."
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001194 },
1195 "key" : [],
1196 "match_type" : "exact",
1197 "type" : "simple",
1198 "max_size" : 1024,
1199 "with_counters" : false,
1200 "support_timeout" : false,
1201 "direct_meters" : null,
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001202 "action_ids" : [11],
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001203 "actions" : ["count_ingress"],
1204 "base_default_next" : "egress_port_count_table",
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001205 "next_tables" : {
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001206 "count_ingress" : "egress_port_count_table"
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001207 },
1208 "default_entry" : {
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001209 "action_id" : 11,
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001210 "action_const" : false,
1211 "action_data" : [],
1212 "action_entry_const" : false
1213 }
1214 },
1215 {
1216 "name" : "egress_port_count_table",
1217 "id" : 5,
1218 "source_info" : {
1219 "filename" : "include/port_counters.p4",
1220 "line" : 30,
1221 "column" : 0,
1222 "source_fragment" : "table egress_port_count_table { ..."
1223 },
1224 "key" : [],
1225 "match_type" : "exact",
1226 "type" : "simple",
1227 "max_size" : 1024,
1228 "with_counters" : false,
1229 "support_timeout" : false,
1230 "direct_meters" : null,
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001231 "action_ids" : [10],
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001232 "actions" : ["count_egress"],
1233 "base_default_next" : null,
1234 "next_tables" : {
1235 "count_egress" : null
1236 },
1237 "default_entry" : {
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001238 "action_id" : 10,
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001239 "action_const" : false,
1240 "action_data" : [],
1241 "action_entry_const" : false
1242 }
1243 }
1244 ],
1245 "action_profiles" : [],
1246 "conditionals" : [
1247 {
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001248 "name" : "node_2",
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001249 "id" : 0,
1250 "source_info" : {
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001251 "filename" : "wcmp.p4",
1252 "line" : 93,
1253 "column" : 12,
1254 "source_fragment" : "valid(packet_out_hdr)"
1255 },
1256 "expression" : {
1257 "type" : "expression",
1258 "value" : {
1259 "op" : "!=",
1260 "left" : {
1261 "type" : "field",
1262 "value" : ["packet_out_hdr", "$valid$"]
1263 },
1264 "right" : {
1265 "type" : "hexstr",
1266 "value" : "0x01"
1267 }
1268 }
1269 },
1270 "true_next" : "table0",
1271 "false_next" : "node_6"
1272 },
1273 {
1274 "name" : "node_6",
1275 "id" : 1,
1276 "source_info" : {
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001277 "filename" : "include/packet_io.p4",
1278 "line" : 19,
1279 "column" : 8,
1280 "source_fragment" : "valid(packet_out_hdr)"
1281 },
1282 "expression" : {
1283 "type" : "expression",
1284 "value" : {
1285 "op" : "==",
1286 "left" : {
1287 "type" : "field",
1288 "value" : ["packet_out_hdr", "$valid$"]
1289 },
1290 "right" : {
1291 "type" : "hexstr",
1292 "value" : "0x01"
1293 }
1294 }
1295 },
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001296 "true_next" : "process_packet_out_table",
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001297 "false_next" : "node_8"
1298 },
1299 {
1300 "name" : "node_8",
1301 "id" : 2,
1302 "source_info" : {
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001303 "filename" : "include/port_counters.p4",
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001304 "line" : 36,
1305 "column" : 38,
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001306 "source_fragment" : "<"
1307 },
1308 "expression" : {
1309 "type" : "expression",
1310 "value" : {
1311 "op" : "<",
1312 "left" : {
1313 "type" : "field",
1314 "value" : ["standard_metadata", "egress_spec"]
1315 },
1316 "right" : {
1317 "type" : "hexstr",
Brian O'Connora6862e02017-09-08 01:17:39 -07001318 "value" : "0x00fe"
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001319 }
1320 }
1321 },
1322 "false_next" : null,
Carmelo Cascone16de6db2017-08-22 00:27:57 +02001323 "true_next" : "ingress_port_count_table"
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001324 }
1325 ]
1326 },
1327 {
1328 "name" : "egress",
1329 "id" : 1,
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001330 "init_table" : null,
1331 "tables" : [],
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001332 "action_profiles" : [],
Carmelo Casconef2ac7202017-09-08 00:57:44 +02001333 "conditionals" : []
Carmelo Casconefc3776d2017-08-21 23:17:22 +02001334 }
1335 ],
1336 "checksums" : [],
1337 "force_arith" : [],
1338 "extern_instances" : [],
1339 "field_aliases" : [
1340 [
1341 "queueing_metadata.enq_timestamp",
1342 ["standard_metadata", "enq_timestamp"]
1343 ],
1344 [
1345 "queueing_metadata.enq_qdepth",
1346 ["standard_metadata", "enq_qdepth"]
1347 ],
1348 [
1349 "queueing_metadata.deq_timedelta",
1350 ["standard_metadata", "deq_timedelta"]
1351 ],
1352 [
1353 "queueing_metadata.deq_qdepth",
1354 ["standard_metadata", "deq_qdepth"]
1355 ],
1356 [
1357 "intrinsic_metadata.ingress_global_timestamp",
1358 ["standard_metadata", "ingress_global_timestamp"]
1359 ],
1360 [
1361 "intrinsic_metadata.lf_field_list",
1362 ["standard_metadata", "lf_field_list"]
1363 ],
1364 [
1365 "intrinsic_metadata.mcast_grp",
1366 ["standard_metadata", "mcast_grp"]
1367 ],
1368 [
1369 "intrinsic_metadata.resubmit_flag",
1370 ["standard_metadata", "resubmit_flag"]
1371 ],
1372 [
1373 "intrinsic_metadata.egress_rid",
1374 ["standard_metadata", "egress_rid"]
1375 ]
1376 ]
1377}