From 8be033993548373f68ba424ac0016a58c72a1712 Mon Sep 17 00:00:00 2001 From: Jonghwan Hyun Date: Mon, 4 Dec 2017 15:48:44 -0800 Subject: [PATCH] [ONOS-7154] Add DSCP bit support as an INT header indicator Change-Id: I2e80dd64b8c73808e96bba7470c1c331b562c45e --- .../src/main/resources/include/headers.p4 | 3 +- .../{int_defines.p4 => int_definitions.p4} | 3 +- .../src/main/resources/include/int_headers.p4 | 3 +- .../src/main/resources/include/int_parser.p4 | 15 +- .../src/main/resources/include/int_sink.p4 | 21 +- .../src/main/resources/include/int_source.p4 | 39 +- .../src/main/resources/include/int_transit.p4 | 8 +- pipelines/basic/src/main/resources/int.p4 | 10 +- .../main/resources/p4c-out/bmv2/basic.json | 3 +- .../src/main/resources/p4c-out/bmv2/int.json | 964 ++++++++++++------ .../main/resources/p4c-out/bmv2/int.p4info | 109 +- 11 files changed, 719 insertions(+), 459 deletions(-) rename pipelines/basic/src/main/resources/include/{int_defines.p4 => int_definitions.p4} (93%) diff --git a/pipelines/basic/src/main/resources/include/headers.p4 b/pipelines/basic/src/main/resources/include/headers.p4 index d8478a62d0..e45c9153c3 100644 --- a/pipelines/basic/src/main/resources/include/headers.p4 +++ b/pipelines/basic/src/main/resources/include/headers.p4 @@ -38,7 +38,8 @@ header ethernet_t { header ipv4_t { bit<4> version; bit<4> ihl; - bit<8> diffserv; + bit<6> dscp; + bit<2> ecn; bit<16> len; bit<16> identification; bit<3> flags; diff --git a/pipelines/basic/src/main/resources/include/int_defines.p4 b/pipelines/basic/src/main/resources/include/int_definitions.p4 similarity index 93% rename from pipelines/basic/src/main/resources/include/int_defines.p4 rename to pipelines/basic/src/main/resources/include/int_definitions.p4 index 30f0ce6cb8..18125f2379 100644 --- a/pipelines/basic/src/main/resources/include/int_defines.p4 +++ b/pipelines/basic/src/main/resources/include/int_definitions.p4 @@ -20,7 +20,8 @@ #include "defines.p4" -const next_hop_id_t INT_PORT = 54321; +/* indicate INT at LSB of DSCP */ +const bit<6> INT_DSCP = 0x1; typedef bit<48> timestamp_t; typedef bit<32> switch_id_t; diff --git a/pipelines/basic/src/main/resources/include/int_headers.p4 b/pipelines/basic/src/main/resources/include/int_headers.p4 index 8d8850f645..d55c5716f7 100644 --- a/pipelines/basic/src/main/resources/include/int_headers.p4 +++ b/pipelines/basic/src/main/resources/include/int_headers.p4 @@ -84,12 +84,11 @@ header intl4_tail_t { bit<8> dscp; } -header int_metadata_t { +struct int_metadata_t { switch_id_t switch_id; bit<16> insert_byte_cnt; bit<1> source; bit<1> sink; - bit<16> origin_port; bit<8> mirror_id; bit<16> flow_id; bit<8> metadata_len; diff --git a/pipelines/basic/src/main/resources/include/int_parser.p4 b/pipelines/basic/src/main/resources/include/int_parser.p4 index 63c29fb7a7..b178ea405b 100644 --- a/pipelines/basic/src/main/resources/include/int_parser.p4 +++ b/pipelines/basic/src/main/resources/include/int_parser.p4 @@ -15,8 +15,8 @@ */ /* -*- P4_16 -*- */ -#ifndef __PARSER__ -#define __PARSER__ +#ifndef __INT_PARSER__ +#define __INT_PARSER__ parser int_parser ( packet_in packet, @@ -54,15 +54,20 @@ parser int_parser ( state parse_tcp { packet.extract(hdr.tcp); - transition accept; + local_metadata.l4_src_port = hdr.tcp.src_port; + local_metadata.l4_dst_port = hdr.tcp.dst_port; + transition select((hdr.ipv4.dscp & INT_DSCP) == INT_DSCP) { + true: parse_intl4_shim; + default: accept; + } } state parse_udp { packet.extract(hdr.udp); local_metadata.l4_src_port = hdr.udp.src_port; local_metadata.l4_dst_port = hdr.udp.dst_port; - transition select(hdr.udp.dst_port) { - INT_PORT: parse_intl4_shim; + transition select((hdr.ipv4.dscp & INT_DSCP) == INT_DSCP) { + true: parse_intl4_shim; default: accept; } } diff --git a/pipelines/basic/src/main/resources/include/int_sink.p4 b/pipelines/basic/src/main/resources/include/int_sink.p4 index 29c85ef028..f87339e499 100644 --- a/pipelines/basic/src/main/resources/include/int_sink.p4 +++ b/pipelines/basic/src/main/resources/include/int_sink.p4 @@ -23,27 +23,34 @@ control process_int_sink ( inout headers_t hdr, inout local_metadata_t local_metadata, inout standard_metadata_t standard_metadata) { + action restore_header () { + hdr.udp.dst_port = hdr.intl4_tail.dest_port; + hdr.ipv4.dscp = (bit<6>)hdr.intl4_tail.dscp; + } + action int_sink() { // restore length fields of IPv4 header and UDP header hdr.ipv4.len = hdr.ipv4.len - (bit<16>)((hdr.intl4_shim.len - (bit<8>)hdr.int_header.ins_cnt) << 2); hdr.udp.length_ = hdr.udp.length_ - (bit<16>)((hdr.intl4_shim.len - (bit<8>)hdr.int_header.ins_cnt) << 2); - // restore original dst port - local_metadata.int_meta.origin_port = hdr.intl4_tail.dest_port; // remove all the INT information from the packet hdr.int_header.setInvalid(); hdr.int_data.setInvalid(); hdr.intl4_shim.setInvalid(); hdr.intl4_tail.setInvalid(); - } - - action restore_port () { - hdr.udp.dst_port = local_metadata.int_meta.origin_port; + hdr.int_switch_id.setInvalid(); + hdr.int_port_ids.setInvalid(); + hdr.int_hop_latency.setInvalid(); + hdr.int_q_occupancy.setInvalid(); + hdr.int_ingress_tstamp.setInvalid(); + hdr.int_egress_tstamp.setInvalid(); + hdr.int_q_congestion.setInvalid(); + hdr.int_egress_tx_util.setInvalid(); } apply { if (local_metadata.int_meta.sink == 1) { + restore_header(); int_sink(); - restore_port(); } } } diff --git a/pipelines/basic/src/main/resources/include/int_source.p4 b/pipelines/basic/src/main/resources/include/int_source.p4 index a09309f85a..15a8b264d3 100644 --- a/pipelines/basic/src/main/resources/include/int_source.p4 +++ b/pipelines/basic/src/main/resources/include/int_source.p4 @@ -52,26 +52,26 @@ control process_int_source ( hdr.intl4_tail.setValid(); hdr.intl4_tail.next_proto = hdr.ipv4.protocol; hdr.intl4_tail.dest_port = local_metadata.l4_dst_port; - hdr.intl4_tail.dscp = 0; // not used - - hdr.udp.dst_port = INT_PORT; + hdr.intl4_tail.dscp = (bit<8>) hdr.ipv4.dscp; // add the header len (8 bytes) to total len hdr.ipv4.len = hdr.ipv4.len + 16; hdr.udp.length_ = hdr.udp.length_ + 16; } + action int_source_dscp(bit<8> max_hop, bit<5> ins_cnt, bit<4> ins_mask0003, bit<4> ins_mask0407) { + int_source(max_hop, ins_cnt, ins_mask0003, ins_mask0407); + hdr.ipv4.dscp = INT_DSCP; + } table tb_int_source { key = { - local_metadata.int_meta.sink: exact; - local_metadata.int_meta.source: exact; hdr.ipv4.src_addr: ternary; hdr.ipv4.dst_addr: ternary; local_metadata.l4_src_port: ternary; local_metadata.l4_dst_port: ternary; } actions = { - int_source; // sink = 0 & source = 1 + int_source_dscp; } counters = counter_int_source; size = 1024; @@ -87,18 +87,17 @@ control process_set_source_sink ( inout local_metadata_t local_metadata, inout standard_metadata_t standard_metadata) { - direct_counter(CounterType.packets_and_bytes) counter_set_source; - direct_counter(CounterType.packets_and_bytes) counter_set_sink; + direct_counter(CounterType.packets_and_bytes) counter_set_source_sink; action int_set_source () { - local_metadata.int_meta.source = 1; + local_metadata.int_meta.source = 1; } action int_set_sink () { local_metadata.int_meta.sink = 1; } - table tb_set_source { + table tb_set_source_sink { key = { hdr.ipv4.src_addr: ternary; hdr.ipv4.dst_addr: ternary; @@ -107,30 +106,14 @@ control process_set_source_sink ( } actions = { int_set_source; - } - counters = counter_set_source; - size = 1024; - } - - table tb_set_sink { - key = { - hdr.ipv4.src_addr: ternary; - hdr.ipv4.dst_addr: ternary; - local_metadata.l4_src_port: ternary; - local_metadata.l4_dst_port: ternary; - } - actions = { int_set_sink; } - counters = counter_set_sink; + counters = counter_set_source_sink; size = 1024; } apply { - if (hdr.udp.isValid()) { - tb_set_source.apply(); - tb_set_sink.apply(); - } + tb_set_source_sink.apply(); } } #endif diff --git a/pipelines/basic/src/main/resources/include/int_transit.p4 b/pipelines/basic/src/main/resources/include/int_transit.p4 index 7f553c5072..9c066bd055 100644 --- a/pipelines/basic/src/main/resources/include/int_transit.p4 +++ b/pipelines/basic/src/main/resources/include/int_transit.p4 @@ -307,6 +307,8 @@ control process_int_outer_encap ( } action int_update_udp() { hdr.udp.length_ = hdr.udp.length_ + local_metadata.int_meta.insert_byte_cnt; + } + action int_update_shim() { hdr.intl4_shim.len = hdr.intl4_shim.len + (bit<8>)hdr.int_header.ins_cnt; } @@ -314,10 +316,12 @@ control process_int_outer_encap ( if (hdr.ipv4.isValid()) { int_update_ipv4(); } - - if (hdr.intl4_shim.isValid()) { + if (hdr.udp.isValid()) { int_update_udp(); } + if (hdr.intl4_shim.isValid()) { + int_update_shim(); + } } } diff --git a/pipelines/basic/src/main/resources/int.p4 b/pipelines/basic/src/main/resources/int.p4 index 1bbfefda70..5a8d23aba1 100644 --- a/pipelines/basic/src/main/resources/int.p4 +++ b/pipelines/basic/src/main/resources/int.p4 @@ -21,7 +21,7 @@ #include "include/defines.p4" #include "include/headers.p4" #include "include/actions.p4" -#include "include/int_defines.p4" +#include "include/int_definitions.p4" #include "include/int_headers.p4" #include "include/packet_io.p4" #include "include/port_counters.p4" @@ -53,9 +53,11 @@ control int_egress ( apply { if (standard_metadata.ingress_port != CPU_PORT && standard_metadata.egress_port != CPU_PORT && - hdr.udp.isValid()) { - process_int_source.apply(hdr, local_metadata, standard_metadata); - if(hdr.udp.dst_port == INT_PORT) { + (hdr.udp.isValid() || hdr.tcp.isValid())) { + if (local_metadata.int_meta.sink == 0 && local_metadata.int_meta.source == 1) { + process_int_source.apply(hdr, local_metadata, standard_metadata); + } + if(hdr.int_header.isValid()) { process_int_transit.apply(hdr, local_metadata, standard_metadata); // update underlay header based on INT information inserted process_int_outer_encap.apply(hdr, local_metadata, standard_metadata); diff --git a/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.json b/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.json index 62f94fcaf9..ac7b4f2269 100644 --- a/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.json +++ b/pipelines/basic/src/main/resources/p4c-out/bmv2/basic.json @@ -47,7 +47,8 @@ "fields" : [ ["version", 4, false], ["ihl", 4, false], - ["diffserv", 8, false], + ["dscp", 6, false], + ["ecn", 2, false], ["len", 16, false], ["identification", 16, false], ["flags", 3, false], diff --git a/pipelines/basic/src/main/resources/p4c-out/bmv2/int.json b/pipelines/basic/src/main/resources/p4c-out/bmv2/int.json index f57af6088d..31f6705199 100644 --- a/pipelines/basic/src/main/resources/p4c-out/bmv2/int.json +++ b/pipelines/basic/src/main/resources/p4c-out/bmv2/int.json @@ -9,13 +9,16 @@ "name" : "scalars_0", "id" : 0, "fields" : [ - ["tmp", 32, false], - ["tmp_0", 32, false], + ["tmp", 1, false], + ["tmp_0", 1, false], ["tmp_1", 32, false], + ["tmp_2", 32, false], + ["tmp_3", 32, false], ["local_metadata_t.l4_src_port", 16, false], ["local_metadata_t.l4_dst_port", 16, false], ["local_metadata_t.next_hop_id", 16, false], - ["local_metadata_t.selector", 16, false] + ["local_metadata_t.selector", 16, false], + ["_padding_3", 6, false] ] }, { @@ -49,7 +52,8 @@ "fields" : [ ["version", 4, false], ["ihl", 4, false], - ["diffserv", 8, false], + ["dscp", 6, false], + ["ecn", 2, false], ["len", 16, false], ["identification", 16, false], ["flags", 3, false], @@ -201,7 +205,6 @@ ["insert_byte_cnt", 16, false], ["source", 1, false], ["sink", 1, false], - ["origin_port", 16, false], ["mirror_id", 8, false], ["flow_id", 16, false], ["metadata_len", 8, false], @@ -379,7 +382,7 @@ "name" : "int_meta", "id" : 20, "header_type" : "int_metadata_t", - "metadata" : false, + "metadata" : true, "pi_omit" : true } ], @@ -532,16 +535,102 @@ } ], "op" : "extract" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "local_metadata_t.l4_src_port"] + }, + { + "type" : "field", + "value" : ["tcp", "src_port"] + } + ], + "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "local_metadata_t.l4_dst_port"] + }, + { + "type" : "field", + "value" : ["tcp", "dst_port"] + } + ], + "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "?", + "left" : { + "type" : "hexstr", + "value" : "0x01" + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + }, + "cond" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + } + } + } + } + ], + "op" : "set" } ], "transitions" : [ + { + "value" : "0x01", + "mask" : null, + "next_state" : "parse_intl4_shim" + }, { "value" : "default", "mask" : null, "next_state" : null } ], - "transition_key" : [] + "transition_key" : [ + { + "type" : "field", + "value" : ["scalars", "tmp"] + } + ] }, { "name" : "parse_udp", @@ -581,11 +670,61 @@ } ], "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_0"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "?", + "left" : { + "type" : "hexstr", + "value" : "0x01" + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + }, + "cond" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + } + } + } + } + ], + "op" : "set" } ], "transitions" : [ { - "value" : "0xd431", + "value" : "0x01", "mask" : null, "next_state" : "parse_intl4_shim" }, @@ -598,7 +737,7 @@ "transition_key" : [ { "type" : "field", - "value" : ["udp", "dst_port"] + "value" : ["scalars", "tmp_0"] } ] }, @@ -688,7 +827,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp"] + "value" : ["scalars", "tmp_1"] }, { "type" : "expression", @@ -760,7 +899,7 @@ "type" : "expression", "value" : { "type" : "field", - "value" : ["scalars", "tmp"] + "value" : ["scalars", "tmp_1"] } } ], @@ -808,7 +947,7 @@ "id" : 0, "source_info" : { "filename" : "./include/int_parser.p4", - "line" : 99, + "line" : 104, "column" : 8, "source_fragment" : "int_deparser" }, @@ -836,44 +975,38 @@ "binding" : "table0_control.table0" }, { - "name" : "process_set_source_sink.counter_set_source", + "name" : "process_set_source_sink.counter_set_source_sink", "id" : 2, "is_direct" : true, - "binding" : "process_set_source_sink.tb_set_source" - }, - { - "name" : "process_set_source_sink.counter_set_sink", - "id" : 3, - "is_direct" : true, - "binding" : "process_set_source_sink.tb_set_sink" + "binding" : "process_set_source_sink.tb_set_source_sink" }, { "name" : "process_int_source.counter_int_source", - "id" : 4, + "id" : 3, "is_direct" : true, "binding" : "process_int_source.tb_int_source" }, { "name" : "process_int_transit.counter_int_insert", - "id" : 5, + "id" : 4, "is_direct" : true, "binding" : "process_int_transit.tb_int_insert" }, { "name" : "process_int_transit.counter_int_inst_0003", - "id" : 6, + "id" : 5, "is_direct" : true, "binding" : "process_int_transit.tb_int_inst_0003" }, { "name" : "process_int_transit.counter_int_inst_0407", - "id" : 7, + "id" : 6, "is_direct" : true, "binding" : "process_int_transit.tb_int_inst_0407" }, { "name" : "port_counters_egress.egress_port_counter", - "id" : 8, + "id" : 7, "source_info" : { "filename" : "./include/port_counters.p4", "line" : 36, @@ -938,7 +1071,7 @@ ], "source_info" : { "filename" : "int.p4", - "line" : 21, + "line" : 20, "column" : 24, "source_fragment" : "255; ..." } @@ -968,15 +1101,9 @@ "runtime_data" : [], "primitives" : [] }, - { - "name" : "NoAction", - "id" : 4, - "runtime_data" : [], - "primitives" : [] - }, { "name" : "table0_control.set_next_hop_id", - "id" : 5, + "id" : 4, "runtime_data" : [ { "name" : "next_hop_id", @@ -1007,7 +1134,7 @@ }, { "name" : "process_set_source_sink.int_set_source", - "id" : 6, + "id" : 5, "runtime_data" : [], "primitives" : [ { @@ -1024,7 +1151,7 @@ ], "source_info" : { "filename" : "./include/int_source.p4", - "line" : 94, + "line" : 93, "column" : 8, "source_fragment" : "local_metadata.int_meta.source = 1" } @@ -1033,7 +1160,7 @@ }, { "name" : "process_set_source_sink.int_set_sink", - "id" : 7, + "id" : 6, "runtime_data" : [], "primitives" : [ { @@ -1050,7 +1177,7 @@ ], "source_info" : { "filename" : "./include/int_source.p4", - "line" : 98, + "line" : 97, "column" : 8, "source_fragment" : "local_metadata.int_meta.sink = 1" } @@ -1059,7 +1186,7 @@ }, { "name" : "act", - "id" : 8, + "id" : 7, "runtime_data" : [], "primitives" : [ { @@ -1100,7 +1227,7 @@ }, { "name" : "act_0", - "id" : 9, + "id" : 8, "runtime_data" : [], "primitives" : [ { @@ -1108,7 +1235,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp_2"] }, { "type" : "expression", @@ -1138,7 +1265,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_0"] + "value" : ["scalars", "tmp_2"] } ], "source_info" : { @@ -1150,6 +1277,12 @@ } ] }, + { + "name" : "NoAction", + "id" : 9, + "runtime_data" : [], + "primitives" : [] + }, { "name" : "NoAction", "id" : 10, @@ -1169,14 +1302,8 @@ "primitives" : [] }, { - "name" : "NoAction", + "name" : "process_int_source.int_source_dscp", "id" : 13, - "runtime_data" : [], - "primitives" : [] - }, - { - "name" : "process_int_source.int_source", - "id" : 14, "runtime_data" : [ { "name" : "max_hop", @@ -1243,8 +1370,8 @@ } ], "source_info" : { - "filename" : "./include/int_defines.p4", - "line" : 28, + "filename" : "./include/int_definitions.p4", + "line" : 29, "column" : 35, "source_fragment" : "4; ..." } @@ -1375,7 +1502,7 @@ "filename" : "./include/int_source.p4", "line" : 43, "column" : 8, - "source_fragment" : "hdr.int_header.ins_cnt = ins_cnt" + "source_fragment" : "hdr.int_header.ins_cnt = ins_cnt; ..." } }, { @@ -1394,7 +1521,7 @@ "filename" : "./include/int_source.p4", "line" : 44, "column" : 8, - "source_fragment" : "hdr.int_header.max_hop_cnt = max_hop" + "source_fragment" : "hdr.int_header.max_hop_cnt = max_hop; ..." } }, { @@ -1432,7 +1559,7 @@ "filename" : "./include/int_source.p4", "line" : 46, "column" : 8, - "source_fragment" : "hdr.int_header.instruction_mask_0003 = ins_mask0003" + "source_fragment" : "hdr.int_header.instruction_mask_0003 = ins_mask0003; ..." } }, { @@ -1451,7 +1578,7 @@ "filename" : "./include/int_source.p4", "line" : 47, "column" : 8, - "source_fragment" : "hdr.int_header.instruction_mask_0407 = ins_mask0407" + "source_fragment" : "hdr.int_header.instruction_mask_0407 = ins_mask0407; ..." } }, { @@ -1553,34 +1680,28 @@ "value" : ["intl4_tail", "dscp"] }, { - "type" : "hexstr", - "value" : "0x00" + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } } ], "source_info" : { "filename" : "./include/int_source.p4", "line" : 55, "column" : 8, - "source_fragment" : "hdr.intl4_tail.dscp = 0" - } - }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["udp", "dst_port"] - }, - { - "type" : "hexstr", - "value" : "0xd431" - } - ], - "source_info" : { - "filename" : "./include/int_defines.p4", - "line" : 23, - "column" : 31, - "source_fragment" : "54321; ..." + "source_fragment" : "hdr.intl4_tail.dscp = (bit<8>) hdr.ipv4.dscp" } }, { @@ -1620,7 +1741,7 @@ ], "source_info" : { "filename" : "./include/int_source.p4", - "line" : 60, + "line" : 58, "column" : 8, "source_fragment" : "hdr.ipv4.len = hdr.ipv4.len + 16" } @@ -1662,16 +1783,35 @@ ], "source_info" : { "filename" : "./include/int_source.p4", - "line" : 61, + "line" : 59, "column" : 8, "source_fragment" : "hdr.udp.length_ = hdr.udp.length_ + 16" } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "./include/int_definitions.p4", + "line" : 24, + "column" : 24, + "source_fragment" : "0x1; ..." + } } ] }, { "name" : "process_int_transit.int_update_total_hop_cnt", - "id" : 15, + "id" : 14, "runtime_data" : [], "primitives" : [ { @@ -1720,7 +1860,7 @@ }, { "name" : "process_int_transit.int_transit", - "id" : 16, + "id" : 15, "runtime_data" : [ { "name" : "switch_id", @@ -1803,13 +1943,13 @@ }, { "name" : "process_int_transit.int_set_header_0003_i0", - "id" : 17, + "id" : 16, "runtime_data" : [], "primitives" : [] }, { "name" : "process_int_transit.int_set_header_0003_i1", - "id" : 18, + "id" : 17, "runtime_data" : [], "primitives" : [ { @@ -1882,7 +2022,7 @@ }, { "name" : "process_int_transit.int_set_header_0003_i2", - "id" : 19, + "id" : 18, "runtime_data" : [], "primitives" : [ { @@ -1923,7 +2063,7 @@ }, { "name" : "process_int_transit.int_set_header_0003_i3", - "id" : 20, + "id" : 19, "runtime_data" : [], "primitives" : [ { @@ -2030,7 +2170,7 @@ }, { "name" : "process_int_transit.int_set_header_0003_i4", - "id" : 21, + "id" : 20, "runtime_data" : [], "primitives" : [ { @@ -2116,7 +2256,7 @@ }, { "name" : "process_int_transit.int_set_header_0003_i5", - "id" : 22, + "id" : 21, "runtime_data" : [], "primitives" : [ { @@ -2268,7 +2408,7 @@ }, { "name" : "process_int_transit.int_set_header_0003_i6", - "id" : 23, + "id" : 22, "runtime_data" : [], "primitives" : [ { @@ -2388,7 +2528,7 @@ }, { "name" : "process_int_transit.int_set_header_0003_i7", - "id" : 24, + "id" : 23, "runtime_data" : [], "primitives" : [ { @@ -2574,7 +2714,7 @@ }, { "name" : "process_int_transit.int_set_header_0003_i8", - "id" : 25, + "id" : 24, "runtime_data" : [], "primitives" : [ { @@ -2615,7 +2755,7 @@ }, { "name" : "process_int_transit.int_set_header_0003_i9", - "id" : 26, + "id" : 25, "runtime_data" : [], "primitives" : [ { @@ -2722,7 +2862,7 @@ }, { "name" : "process_int_transit.int_set_header_0003_i10", - "id" : 27, + "id" : 26, "runtime_data" : [], "primitives" : [ { @@ -2797,7 +2937,7 @@ }, { "name" : "process_int_transit.int_set_header_0003_i11", - "id" : 28, + "id" : 27, "runtime_data" : [], "primitives" : [ { @@ -2938,7 +3078,7 @@ }, { "name" : "process_int_transit.int_set_header_0003_i12", - "id" : 29, + "id" : 28, "runtime_data" : [], "primitives" : [ { @@ -3058,7 +3198,7 @@ }, { "name" : "process_int_transit.int_set_header_0003_i13", - "id" : 30, + "id" : 29, "runtime_data" : [], "primitives" : [ { @@ -3244,7 +3384,7 @@ }, { "name" : "process_int_transit.int_set_header_0003_i14", - "id" : 31, + "id" : 30, "runtime_data" : [], "primitives" : [ { @@ -3398,7 +3538,7 @@ }, { "name" : "process_int_transit.int_set_header_0003_i15", - "id" : 32, + "id" : 31, "runtime_data" : [], "primitives" : [ { @@ -3618,13 +3758,13 @@ }, { "name" : "process_int_transit.int_set_header_0407_i0", - "id" : 33, + "id" : 32, "runtime_data" : [], "primitives" : [] }, { "name" : "process_int_transit.int_set_header_0407_i1", - "id" : 34, + "id" : 33, "runtime_data" : [], "primitives" : [ { @@ -3665,7 +3805,7 @@ }, { "name" : "process_int_transit.int_set_header_0407_i2", - "id" : 35, + "id" : 34, "runtime_data" : [], "primitives" : [ { @@ -3725,7 +3865,7 @@ }, { "name" : "process_int_transit.int_set_header_0407_i3", - "id" : 36, + "id" : 35, "runtime_data" : [], "primitives" : [ { @@ -3819,7 +3959,7 @@ }, { "name" : "process_int_transit.int_set_header_0407_i4", - "id" : 37, + "id" : 36, "runtime_data" : [], "primitives" : [ { @@ -3883,7 +4023,7 @@ }, { "name" : "process_int_transit.int_set_header_0407_i5", - "id" : 38, + "id" : 37, "runtime_data" : [], "primitives" : [ { @@ -3981,7 +4121,7 @@ }, { "name" : "process_int_transit.int_set_header_0407_i6", - "id" : 39, + "id" : 38, "runtime_data" : [], "primitives" : [ { @@ -4098,7 +4238,7 @@ }, { "name" : "process_int_transit.int_set_header_0407_i7", - "id" : 40, + "id" : 39, "runtime_data" : [], "primitives" : [ { @@ -4249,7 +4389,7 @@ }, { "name" : "process_int_transit.int_set_header_0407_i8", - "id" : 41, + "id" : 40, "runtime_data" : [], "primitives" : [ { @@ -4290,7 +4430,7 @@ }, { "name" : "process_int_transit.int_set_header_0407_i9", - "id" : 42, + "id" : 41, "runtime_data" : [], "primitives" : [ { @@ -4365,7 +4505,7 @@ }, { "name" : "process_int_transit.int_set_header_0407_i10", - "id" : 43, + "id" : 42, "runtime_data" : [], "primitives" : [ { @@ -4459,7 +4599,7 @@ }, { "name" : "process_int_transit.int_set_header_0407_i11", - "id" : 44, + "id" : 43, "runtime_data" : [], "primitives" : [ { @@ -4587,7 +4727,7 @@ }, { "name" : "process_int_transit.int_set_header_0407_i12", - "id" : 45, + "id" : 44, "runtime_data" : [], "primitives" : [ { @@ -4685,7 +4825,7 @@ }, { "name" : "process_int_transit.int_set_header_0407_i13", - "id" : 46, + "id" : 45, "runtime_data" : [], "primitives" : [ { @@ -4817,7 +4957,7 @@ }, { "name" : "process_int_transit.int_set_header_0407_i14", - "id" : 47, + "id" : 46, "runtime_data" : [], "primitives" : [ { @@ -4968,7 +5108,7 @@ }, { "name" : "process_int_transit.int_set_header_0407_i15", - "id" : 48, + "id" : 47, "runtime_data" : [], "primitives" : [ { @@ -5153,7 +5293,7 @@ }, { "name" : "process_int_outer_encap.int_update_ipv4", - "id" : 49, + "id" : 48, "runtime_data" : [], "primitives" : [ { @@ -5202,7 +5342,7 @@ }, { "name" : "process_int_outer_encap.int_update_udp", - "id" : 50, + "id" : 49, "runtime_data" : [], "primitives" : [ { @@ -5246,7 +5386,14 @@ "column" : 8, "source_fragment" : "hdr.udp.length_ = hdr.udp.length_ + local_metadata.int_meta.insert_byte_cnt" } - }, + } + ] + }, + { + "name" : "process_int_outer_encap.int_update_shim", + "id" : 50, + "runtime_data" : [], + "primitives" : [ { "op" : "assign", "parameters" : [ @@ -5294,7 +5441,7 @@ ], "source_info" : { "filename" : "./include/int_transit.p4", - "line" : 310, + "line" : 312, "column" : 8, "source_fragment" : "hdr.intl4_shim.len = hdr.intl4_shim.len + (bit<8>)hdr.int_header.ins_cnt" } @@ -5302,9 +5449,67 @@ ] }, { - "name" : "process_int_sink.int_sink", + "name" : "process_int_sink.restore_header", "id" : 51, "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["udp", "dst_port"] + }, + { + "type" : "field", + "value" : ["intl4_tail", "dest_port"] + } + ], + "source_info" : { + "filename" : "./include/int_sink.p4", + "line" : 27, + "column" : 8, + "source_fragment" : "hdr.udp.dst_port = hdr.intl4_tail.dest_port" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["ipv4", "dscp"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["intl4_tail", "dscp"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x3f" + } + } + } + } + ], + "source_info" : { + "filename" : "./include/int_sink.p4", + "line" : 28, + "column" : 8, + "source_fragment" : "hdr.ipv4.dscp = (bit<6>)hdr.intl4_tail.dscp" + } + } + ] + }, + { + "name" : "process_int_sink.int_sink", + "id" : 52, + "runtime_data" : [], "primitives" : [ { "op" : "assign", @@ -5403,7 +5608,7 @@ ], "source_info" : { "filename" : "./include/int_sink.p4", - "line" : 28, + "line" : 33, "column" : 8, "source_fragment" : "hdr.ipv4.len = hdr.ipv4.len - (bit<16>)((hdr.intl4_shim.len - (bit<8>)hdr.int_header.ins_cnt) << 2)" } @@ -5505,30 +5710,11 @@ ], "source_info" : { "filename" : "./include/int_sink.p4", - "line" : 29, + "line" : 34, "column" : 8, "source_fragment" : "hdr.udp.length_ = hdr.udp.length_ - (bit<16>)((hdr.intl4_shim.len - (bit<8>)hdr.int_header.ins_cnt) << 2)" } }, - { - "op" : "assign", - "parameters" : [ - { - "type" : "field", - "value" : ["int_meta", "origin_port"] - }, - { - "type" : "field", - "value" : ["intl4_tail", "dest_port"] - } - ], - "source_info" : { - "filename" : "./include/int_sink.p4", - "line" : 31, - "column" : 8, - "source_fragment" : "local_metadata.int_meta.origin_port = hdr.intl4_tail.dest_port" - } - }, { "op" : "remove_header", "parameters" : [ @@ -5539,7 +5725,7 @@ ], "source_info" : { "filename" : "./include/int_sink.p4", - "line" : 33, + "line" : 36, "column" : 8, "source_fragment" : "hdr.int_header.setInvalid()" } @@ -5554,7 +5740,7 @@ ], "source_info" : { "filename" : "./include/int_sink.p4", - "line" : 34, + "line" : 37, "column" : 8, "source_fragment" : "hdr.int_data.setInvalid()" } @@ -5569,7 +5755,7 @@ ], "source_info" : { "filename" : "./include/int_sink.p4", - "line" : 35, + "line" : 38, "column" : 8, "source_fragment" : "hdr.intl4_shim.setInvalid()" } @@ -5584,35 +5770,129 @@ ], "source_info" : { "filename" : "./include/int_sink.p4", - "line" : 36, + "line" : 39, "column" : 8, "source_fragment" : "hdr.intl4_tail.setInvalid()" } - } - ] - }, - { - "name" : "process_int_sink.restore_port", - "id" : 52, - "runtime_data" : [], - "primitives" : [ + }, { - "op" : "assign", + "op" : "remove_header", "parameters" : [ { - "type" : "field", - "value" : ["udp", "dst_port"] - }, - { - "type" : "field", - "value" : ["int_meta", "origin_port"] + "type" : "header", + "value" : "int_switch_id" } ], "source_info" : { "filename" : "./include/int_sink.p4", "line" : 40, "column" : 8, - "source_fragment" : "hdr.udp.dst_port = local_metadata.int_meta.origin_port" + "source_fragment" : "hdr.int_switch_id.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_port_ids" + } + ], + "source_info" : { + "filename" : "./include/int_sink.p4", + "line" : 41, + "column" : 8, + "source_fragment" : "hdr.int_port_ids.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_hop_latency" + } + ], + "source_info" : { + "filename" : "./include/int_sink.p4", + "line" : 42, + "column" : 8, + "source_fragment" : "hdr.int_hop_latency.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_occupancy" + } + ], + "source_info" : { + "filename" : "./include/int_sink.p4", + "line" : 43, + "column" : 8, + "source_fragment" : "hdr.int_q_occupancy.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_ingress_tstamp" + } + ], + "source_info" : { + "filename" : "./include/int_sink.p4", + "line" : 44, + "column" : 8, + "source_fragment" : "hdr.int_ingress_tstamp.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tstamp" + } + ], + "source_info" : { + "filename" : "./include/int_sink.p4", + "line" : 45, + "column" : 8, + "source_fragment" : "hdr.int_egress_tstamp.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_q_congestion" + } + ], + "source_info" : { + "filename" : "./include/int_sink.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "hdr.int_q_congestion.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "int_egress_tx_util" + } + ], + "source_info" : { + "filename" : "./include/int_sink.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "hdr.int_egress_tx_util.setInvalid()" } } ] @@ -5668,7 +5948,7 @@ "parameters" : [ { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_3"] }, { "type" : "expression", @@ -5698,7 +5978,7 @@ }, { "type" : "field", - "value" : ["scalars", "tmp_1"] + "value" : ["scalars", "tmp_3"] } ], "source_info" : { @@ -5717,7 +5997,7 @@ "id" : 0, "source_info" : { "filename" : "int.p4", - "line" : 36, + "line" : 35, "column" : 8, "source_fragment" : "int_ingress" }, @@ -5733,14 +6013,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [9], + "action_ids" : [8], "actions" : ["act_0"], "base_default_next" : "node_3", "next_tables" : { "act_0" : "node_3" }, "default_entry" : { - "action_id" : 9, + "action_id" : 8, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5756,14 +6036,14 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [8], + "action_ids" : [7], "actions" : ["act"], "base_default_next" : null, "next_tables" : { "act" : null }, "default_entry" : { - "action_id" : 8, + "action_id" : 7, "action_const" : true, "action_data" : [], "action_entry_const" : true @@ -5830,14 +6110,14 @@ "max_size" : 1024, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [0, 1, 5, 2], + "action_ids" : [0, 1, 4, 2], "actions" : ["set_egress_port", "send_to_cpu", "table0_control.set_next_hop_id", "_drop"], - "base_default_next" : "node_6", + "base_default_next" : "process_set_source_sink.tb_set_source_sink", "next_tables" : { - "set_egress_port" : "node_6", - "send_to_cpu" : "node_6", - "table0_control.set_next_hop_id" : "node_6", - "_drop" : "node_6" + "set_egress_port" : "process_set_source_sink.tb_set_source_sink", + "send_to_cpu" : "process_set_source_sink.tb_set_source_sink", + "table0_control.set_next_hop_id" : "process_set_source_sink.tb_set_source_sink", + "_drop" : "process_set_source_sink.tb_set_source_sink" }, "default_entry" : { "action_id" : 2, @@ -5847,13 +6127,13 @@ } }, { - "name" : "process_set_source_sink.tb_set_source", + "name" : "process_set_source_sink.tb_set_source_sink", "id" : 3, "source_info" : { "filename" : "./include/int_source.p4", - "line" : 101, + "line" : 100, "column" : 10, - "source_fragment" : "tb_set_source" + "source_fragment" : "tb_set_source_sink" }, "key" : [ { @@ -5882,65 +6162,16 @@ "max_size" : 1024, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [6, 3], - "actions" : ["process_set_source_sink.int_set_source", "NoAction"], - "base_default_next" : "process_set_source_sink.tb_set_sink", - "next_tables" : { - "process_set_source_sink.int_set_source" : "process_set_source_sink.tb_set_sink", - "NoAction" : "process_set_source_sink.tb_set_sink" - }, - "default_entry" : { - "action_id" : 3, - "action_const" : false, - "action_data" : [], - "action_entry_const" : false - } - }, - { - "name" : "process_set_source_sink.tb_set_sink", - "id" : 4, - "source_info" : { - "filename" : "./include/int_source.p4", - "line" : 115, - "column" : 10, - "source_fragment" : "tb_set_sink" - }, - "key" : [ - { - "match_type" : "ternary", - "target" : ["ipv4", "src_addr"], - "mask" : null - }, - { - "match_type" : "ternary", - "target" : ["ipv4", "dst_addr"], - "mask" : null - }, - { - "match_type" : "ternary", - "target" : ["scalars", "local_metadata_t.l4_src_port"], - "mask" : null - }, - { - "match_type" : "ternary", - "target" : ["scalars", "local_metadata_t.l4_dst_port"], - "mask" : null - } - ], - "match_type" : "ternary", - "type" : "simple", - "max_size" : 1024, - "support_timeout" : false, - "direct_meters" : null, - "action_ids" : [7, 4], - "actions" : ["process_set_source_sink.int_set_sink", "NoAction"], + "action_ids" : [5, 6, 3], + "actions" : ["process_set_source_sink.int_set_source", "process_set_source_sink.int_set_sink", "NoAction"], "base_default_next" : null, "next_tables" : { + "process_set_source_sink.int_set_source" : null, "process_set_source_sink.int_set_sink" : null, "NoAction" : null }, "default_entry" : { - "action_id" : 4, + "action_id" : 3, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -5974,32 +6205,6 @@ }, "true_next" : "tbl_act_0", "false_next" : "table0_control.table0" - }, - { - "name" : "node_6", - "id" : 1, - "source_info" : { - "filename" : "./include/int_source.p4", - "line" : 130, - "column" : 12, - "source_fragment" : "hdr.udp.isValid()" - }, - "expression" : { - "type" : "expression", - "value" : { - "op" : "==", - "left" : { - "type" : "field", - "value" : ["udp", "$valid$"] - }, - "right" : { - "type" : "hexstr", - "value" : "0x01" - } - } - }, - "false_next" : null, - "true_next" : "process_set_source_sink.tb_set_source" } ] }, @@ -6008,32 +6213,22 @@ "id" : 1, "source_info" : { "filename" : "int.p4", - "line" : 49, + "line" : 48, "column" : 8, "source_fragment" : "int_egress" }, - "init_table" : "node_11", + "init_table" : "node_9", "tables" : [ { "name" : "process_int_source.tb_int_source", - "id" : 5, + "id" : 4, "source_info" : { "filename" : "./include/int_source.p4", - "line" : 64, + "line" : 66, "column" : 10, "source_fragment" : "tb_int_source" }, "key" : [ - { - "match_type" : "exact", - "target" : ["int_meta", "sink"], - "mask" : null - }, - { - "match_type" : "exact", - "target" : ["int_meta", "source"], - "mask" : null - }, { "match_type" : "ternary", "target" : ["ipv4", "src_addr"], @@ -6060,15 +6255,15 @@ "max_size" : 1024, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [14, 10], - "actions" : ["process_int_source.int_source", "NoAction"], - "base_default_next" : "node_13", + "action_ids" : [13, 9], + "actions" : ["process_int_source.int_source_dscp", "NoAction"], + "base_default_next" : "node_12", "next_tables" : { - "process_int_source.int_source" : "node_13", - "NoAction" : "node_13" + "process_int_source.int_source_dscp" : "node_12", + "NoAction" : "node_12" }, "default_entry" : { - "action_id" : 10, + "action_id" : 9, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -6076,7 +6271,7 @@ }, { "name" : "process_int_transit.tb_int_insert", - "id" : 6, + "id" : 5, "source_info" : { "filename" : "./include/int_transit.p4", "line" : 227, @@ -6095,7 +6290,7 @@ "max_size" : 2, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [16, 11], + "action_ids" : [15, 10], "actions" : ["process_int_transit.int_transit", "NoAction"], "base_default_next" : "process_int_transit.tb_int_inst_0003", "next_tables" : { @@ -6103,7 +6298,7 @@ "NoAction" : "process_int_transit.tb_int_inst_0003" }, "default_entry" : { - "action_id" : 11, + "action_id" : 10, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -6111,7 +6306,7 @@ }, { "name" : "process_int_transit.tb_int_inst_0003", - "id" : 7, + "id" : 6, "source_info" : { "filename" : "./include/int_transit.p4", "line" : 239, @@ -6130,7 +6325,7 @@ "max_size" : 16, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 12], + "action_ids" : [16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 11], "actions" : ["process_int_transit.int_set_header_0003_i0", "process_int_transit.int_set_header_0003_i1", "process_int_transit.int_set_header_0003_i2", "process_int_transit.int_set_header_0003_i3", "process_int_transit.int_set_header_0003_i4", "process_int_transit.int_set_header_0003_i5", "process_int_transit.int_set_header_0003_i6", "process_int_transit.int_set_header_0003_i7", "process_int_transit.int_set_header_0003_i8", "process_int_transit.int_set_header_0003_i9", "process_int_transit.int_set_header_0003_i10", "process_int_transit.int_set_header_0003_i11", "process_int_transit.int_set_header_0003_i12", "process_int_transit.int_set_header_0003_i13", "process_int_transit.int_set_header_0003_i14", "process_int_transit.int_set_header_0003_i15", "NoAction"], "base_default_next" : "process_int_transit.tb_int_inst_0407", "next_tables" : { @@ -6153,7 +6348,7 @@ "NoAction" : "process_int_transit.tb_int_inst_0407" }, "default_entry" : { - "action_id" : 12, + "action_id" : 11, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -6161,7 +6356,7 @@ }, { "name" : "process_int_transit.tb_int_inst_0407", - "id" : 8, + "id" : 7, "source_info" : { "filename" : "./include/int_transit.p4", "line" : 266, @@ -6180,7 +6375,7 @@ "max_size" : 16, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 13], + "action_ids" : [32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 12], "actions" : ["process_int_transit.int_set_header_0407_i0", "process_int_transit.int_set_header_0407_i1", "process_int_transit.int_set_header_0407_i2", "process_int_transit.int_set_header_0407_i3", "process_int_transit.int_set_header_0407_i4", "process_int_transit.int_set_header_0407_i5", "process_int_transit.int_set_header_0407_i6", "process_int_transit.int_set_header_0407_i7", "process_int_transit.int_set_header_0407_i8", "process_int_transit.int_set_header_0407_i9", "process_int_transit.int_set_header_0407_i10", "process_int_transit.int_set_header_0407_i11", "process_int_transit.int_set_header_0407_i12", "process_int_transit.int_set_header_0407_i13", "process_int_transit.int_set_header_0407_i14", "process_int_transit.int_set_header_0407_i15", "NoAction"], "base_default_next" : "tbl_process_int_transit_int_update_total_hop_cnt", "next_tables" : { @@ -6203,7 +6398,7 @@ "NoAction" : "tbl_process_int_transit_int_update_total_hop_cnt" }, "default_entry" : { - "action_id" : 13, + "action_id" : 12, "action_const" : false, "action_data" : [], "action_entry_const" : false @@ -6211,6 +6406,29 @@ }, { "name" : "tbl_process_int_transit_int_update_total_hop_cnt", + "id" : 8, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [14], + "actions" : ["process_int_transit.int_update_total_hop_cnt"], + "base_default_next" : "node_17", + "next_tables" : { + "process_int_transit.int_update_total_hop_cnt" : "node_17" + }, + "default_entry" : { + "action_id" : 14, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_process_int_outer_encap_int_update_ipv4", "id" : 9, "key" : [], "match_type" : "exact", @@ -6219,21 +6437,21 @@ "with_counters" : false, "support_timeout" : false, "direct_meters" : null, - "action_ids" : [15], - "actions" : ["process_int_transit.int_update_total_hop_cnt"], - "base_default_next" : "node_18", + "action_ids" : [48], + "actions" : ["process_int_outer_encap.int_update_ipv4"], + "base_default_next" : "node_19", "next_tables" : { - "process_int_transit.int_update_total_hop_cnt" : "node_18" + "process_int_outer_encap.int_update_ipv4" : "node_19" }, "default_entry" : { - "action_id" : 15, + "action_id" : 48, "action_const" : true, "action_data" : [], "action_entry_const" : true } }, { - "name" : "tbl_process_int_outer_encap_int_update_ipv4", + "name" : "tbl_process_int_outer_encap_int_update_udp", "id" : 10, "key" : [], "match_type" : "exact", @@ -6243,10 +6461,10 @@ "support_timeout" : false, "direct_meters" : null, "action_ids" : [49], - "actions" : ["process_int_outer_encap.int_update_ipv4"], - "base_default_next" : "node_20", + "actions" : ["process_int_outer_encap.int_update_udp"], + "base_default_next" : "node_21", "next_tables" : { - "process_int_outer_encap.int_update_ipv4" : "node_20" + "process_int_outer_encap.int_update_udp" : "node_21" }, "default_entry" : { "action_id" : 49, @@ -6256,7 +6474,7 @@ } }, { - "name" : "tbl_process_int_outer_encap_int_update_udp", + "name" : "tbl_process_int_outer_encap_int_update_shim", "id" : 11, "key" : [], "match_type" : "exact", @@ -6266,10 +6484,10 @@ "support_timeout" : false, "direct_meters" : null, "action_ids" : [50], - "actions" : ["process_int_outer_encap.int_update_udp"], - "base_default_next" : "node_22", + "actions" : ["process_int_outer_encap.int_update_shim"], + "base_default_next" : "node_23", "next_tables" : { - "process_int_outer_encap.int_update_udp" : "node_22" + "process_int_outer_encap.int_update_shim" : "node_23" }, "default_entry" : { "action_id" : 50, @@ -6279,7 +6497,7 @@ } }, { - "name" : "tbl_process_int_sink_int_sink", + "name" : "tbl_process_int_sink_restore_header", "id" : 12, "key" : [], "match_type" : "exact", @@ -6289,10 +6507,10 @@ "support_timeout" : false, "direct_meters" : null, "action_ids" : [51], - "actions" : ["process_int_sink.int_sink"], - "base_default_next" : "tbl_process_int_sink_restore_port", + "actions" : ["process_int_sink.restore_header"], + "base_default_next" : "tbl_process_int_sink_int_sink", "next_tables" : { - "process_int_sink.int_sink" : "tbl_process_int_sink_restore_port" + "process_int_sink.restore_header" : "tbl_process_int_sink_int_sink" }, "default_entry" : { "action_id" : 51, @@ -6302,7 +6520,7 @@ } }, { - "name" : "tbl_process_int_sink_restore_port", + "name" : "tbl_process_int_sink_int_sink", "id" : 13, "key" : [], "match_type" : "exact", @@ -6312,10 +6530,10 @@ "support_timeout" : false, "direct_meters" : null, "action_ids" : [52], - "actions" : ["process_int_sink.restore_port"], + "actions" : ["process_int_sink.int_sink"], "base_default_next" : "tbl_act_1", "next_tables" : { - "process_int_sink.restore_port" : "tbl_act_1" + "process_int_sink.int_sink" : "tbl_act_1" }, "default_entry" : { "action_id" : 52, @@ -6336,9 +6554,9 @@ "direct_meters" : null, "action_ids" : [54], "actions" : ["act_2"], - "base_default_next" : "node_26", + "base_default_next" : "node_27", "next_tables" : { - "act_2" : "node_26" + "act_2" : "node_27" }, "default_entry" : { "action_id" : 54, @@ -6374,11 +6592,11 @@ "action_profiles" : [], "conditionals" : [ { - "name" : "node_11", - "id" : 2, + "name" : "node_9", + "id" : 1, "source_info" : { "filename" : "int.p4", - "line" : 55, + "line" : 54, "column" : 12, "source_fragment" : "standard_metadata.ingress_port != CPU_PORT && ..." }, @@ -6421,12 +6639,78 @@ } }, "right" : { + "type" : "expression", + "value" : { + "op" : "or", + "left" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["udp", "$valid$"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["tcp", "$valid$"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + } + } + } + } + }, + "true_next" : "node_10", + "false_next" : "tbl_act_1" + }, + { + "name" : "node_10", + "id" : 2, + "source_info" : { + "filename" : "int.p4", + "line" : 57, + "column" : 16, + "source_fragment" : "local_metadata.int_meta.sink == 0 && local_metadata.int_meta.source == 1" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "and", + "left" : { "type" : "expression", "value" : { "op" : "==", "left" : { "type" : "field", - "value" : ["udp", "$valid$"] + "value" : ["int_meta", "sink"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + }, + "right" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["int_meta", "source"] }, "right" : { "type" : "hexstr", @@ -6437,16 +6721,16 @@ } }, "true_next" : "process_int_source.tb_int_source", - "false_next" : "tbl_act_1" + "false_next" : "node_12" }, { - "name" : "node_13", + "name" : "node_12", "id" : 3, "source_info" : { "filename" : "int.p4", - "line" : 59, + "line" : 60, "column" : 15, - "source_fragment" : "hdr.udp.dst_port == INT_PORT" + "source_fragment" : "hdr.int_header.isValid()" }, "expression" : { "type" : "expression", @@ -6454,11 +6738,11 @@ "op" : "==", "left" : { "type" : "field", - "value" : ["udp", "dst_port"] + "value" : ["int_header", "$valid$"] }, "right" : { "type" : "hexstr", - "value" : "0xd431" + "value" : "0x01" } } }, @@ -6466,11 +6750,11 @@ "false_next" : "tbl_act_1" }, { - "name" : "node_18", + "name" : "node_17", "id" : 4, "source_info" : { "filename" : "./include/int_transit.p4", - "line" : 314, + "line" : 316, "column" : 12, "source_fragment" : "hdr.ipv4.isValid()" }, @@ -6489,14 +6773,40 @@ } }, "true_next" : "tbl_process_int_outer_encap_int_update_ipv4", - "false_next" : "node_20" + "false_next" : "node_19" }, { - "name" : "node_20", + "name" : "node_19", "id" : 5, "source_info" : { "filename" : "./include/int_transit.p4", - "line" : 318, + "line" : 319, + "column" : 12, + "source_fragment" : "hdr.udp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "==", + "left" : { + "type" : "field", + "value" : ["udp", "$valid$"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x01" + } + } + }, + "true_next" : "tbl_process_int_outer_encap_int_update_udp", + "false_next" : "node_21" + }, + { + "name" : "node_21", + "id" : 6, + "source_info" : { + "filename" : "./include/int_transit.p4", + "line" : 322, "column" : 12, "source_fragment" : "hdr.intl4_shim.isValid()" }, @@ -6514,15 +6824,15 @@ } } }, - "true_next" : "tbl_process_int_outer_encap_int_update_udp", - "false_next" : "node_22" + "true_next" : "tbl_process_int_outer_encap_int_update_shim", + "false_next" : "node_23" }, { - "name" : "node_22", - "id" : 6, + "name" : "node_23", + "id" : 7, "source_info" : { "filename" : "./include/int_sink.p4", - "line" : 44, + "line" : 51, "column" : 12, "source_fragment" : "local_metadata.int_meta.sink == 1" }, @@ -6540,12 +6850,12 @@ } } }, - "true_next" : "tbl_process_int_sink_int_sink", + "true_next" : "tbl_process_int_sink_restore_header", "false_next" : "tbl_act_1" }, { - "name" : "node_26", - "id" : 7, + "name" : "node_27", + "id" : 8, "source_info" : { "filename" : "./include/packet_io.p4", "line" : 37, diff --git a/pipelines/basic/src/main/resources/p4c-out/bmv2/int.p4info b/pipelines/basic/src/main/resources/p4c-out/bmv2/int.p4info index cf2ad556a3..db7c05eee2 100644 --- a/pipelines/basic/src/main/resources/p4c-out/bmv2/int.p4info +++ b/pipelines/basic/src/main/resources/p4c-out/bmv2/int.p4info @@ -76,9 +76,9 @@ tables { } tables { preamble { - id: 33573105 - name: "process_set_source_sink.tb_set_source" - alias: "tb_set_source" + id: 33582667 + name: "process_set_source_sink.tb_set_source_sink" + alias: "tb_set_source_sink" } match_fields { id: 1 @@ -107,43 +107,6 @@ tables { action_refs { id: 16816387 } - action_refs { - id: 16800567 - annotations: "@defaultonly()" - } - direct_resource_ids: 302036180 - size: 1024 -} -tables { - preamble { - id: 33590037 - name: "process_set_source_sink.tb_set_sink" - alias: "tb_set_sink" - } - match_fields { - id: 1 - name: "hdr.ipv4.src_addr" - bitwidth: 32 - match_type: TERNARY - } - match_fields { - id: 2 - name: "hdr.ipv4.dst_addr" - bitwidth: 32 - match_type: TERNARY - } - match_fields { - id: 3 - name: "local_metadata.l4_src_port" - bitwidth: 16 - match_type: TERNARY - } - match_fields { - id: 4 - name: "local_metadata.l4_dst_port" - bitwidth: 16 - match_type: TERNARY - } action_refs { id: 16784579 } @@ -151,7 +114,7 @@ tables { id: 16800567 annotations: "@defaultonly()" } - direct_resource_ids: 302053848 + direct_resource_ids: 301997871 size: 1024 } tables { @@ -162,42 +125,30 @@ tables { } match_fields { id: 1 - name: "local_metadata.int_meta.sink" - bitwidth: 1 - match_type: EXACT - } - match_fields { - id: 2 - name: "local_metadata.int_meta.source" - bitwidth: 1 - match_type: EXACT - } - match_fields { - id: 3 name: "hdr.ipv4.src_addr" bitwidth: 32 match_type: TERNARY } match_fields { - id: 4 + id: 2 name: "hdr.ipv4.dst_addr" bitwidth: 32 match_type: TERNARY } match_fields { - id: 5 + id: 3 name: "local_metadata.l4_src_port" bitwidth: 16 match_type: TERNARY } match_fields { - id: 6 + id: 4 name: "local_metadata.l4_dst_port" bitwidth: 16 match_type: TERNARY } action_refs { - id: 16841774 + id: 16820636 } action_refs { id: 16800567 @@ -423,9 +374,9 @@ actions { } actions { preamble { - id: 16841774 - name: "process_int_source.int_source" - alias: "int_source" + id: 16820636 + name: "process_int_source.int_source_dscp" + alias: "int_source_dscp" } params { id: 1 @@ -707,16 +658,23 @@ actions { } actions { preamble { - id: 16826281 - name: "process_int_sink.int_sink" - alias: "int_sink" + id: 16835077 + name: "process_int_outer_encap.int_update_shim" + alias: "int_update_shim" } } actions { preamble { - id: 16792548 - name: "process_int_sink.restore_port" - alias: "restore_port" + id: 16798801 + name: "process_int_sink.restore_header" + alias: "restore_header" + } +} +actions { + preamble { + id: 16826281 + name: "process_int_sink.int_sink" + alias: "int_sink" } } counters { @@ -754,25 +712,14 @@ direct_counters { } direct_counters { preamble { - id: 302036180 - name: "process_set_source_sink.counter_set_source" - alias: "counter_set_source" + id: 301997871 + name: "process_set_source_sink.counter_set_source_sink" + alias: "counter_set_source_sink" } spec { unit: BOTH } - direct_table_id: 33573105 -} -direct_counters { - preamble { - id: 302053848 - name: "process_set_source_sink.counter_set_sink" - alias: "counter_set_sink" - } - spec { - unit: BOTH - } - direct_table_id: 33590037 + direct_table_id: 33582667 } direct_counters { preamble {