Avoid egress processing for controller packet-in/out in fabric.p4
Change-Id: If8ac129efd11a437054ed6b7178e167eff9c6e74
diff --git a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
index e8ad083..4dbc6e8 100644
--- a/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
+++ b/pipelines/fabric/src/main/resources/p4c-out/fabric/bmv2/default/bmv2.json
@@ -16,11 +16,11 @@
["fabric_metadata_t.next_id", 32, false],
["fabric_metadata_t.pop_vlan_when_packet_in", 1, false],
["fabric_metadata_t.is_multicast", 1, false],
+ ["fabric_metadata_t.is_controller_packet_out", 1, false],
["fabric_metadata_t.clone_to_cpu", 1, false],
["fabric_metadata_t.ip_proto", 8, false],
["fabric_metadata_t.l4_src_port", 16, false],
- ["fabric_metadata_t.l4_dst_port", 16, false],
- ["_padding_0", 1, false]
+ ["fabric_metadata_t.l4_dst_port", 16, false]
]
},
{
@@ -2640,6 +2640,35 @@
"column" : 12,
"source_fragment" : "hdr.packet_out.setInvalid()"
}
+ },
+ {
+ "op" : "assign",
+ "parameters" : [
+ {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.is_controller_packet_out"]
+ },
+ {
+ "type" : "expression",
+ "value" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "b2d",
+ "left" : null,
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ }
+ }
+ ],
+ "source_info" : {
+ "filename" : "include/control/packetio.p4",
+ "line" : 28,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.is_controller_packet_out = true"
+ }
}
]
},
@@ -3245,7 +3274,7 @@
],
"source_info" : {
"filename" : "include/control/packetio.p4",
- "line" : 38,
+ "line" : 39,
"column" : 8,
"source_fragment" : "hdr.ethernet.ether_type = hdr.vlan_tag.ether_type"
}
@@ -3260,7 +3289,7 @@
],
"source_info" : {
"filename" : "include/control/packetio.p4",
- "line" : 39,
+ "line" : 40,
"column" : 8,
"source_fragment" : "hdr.vlan_tag.setInvalid()"
}
@@ -3323,7 +3352,7 @@
],
"source_info" : {
"filename" : "include/control/packetio.p4",
- "line" : 51,
+ "line" : 56,
"column" : 12,
"source_fragment" : "hdr.packet_in.setValid()"
}
@@ -3342,7 +3371,7 @@
],
"source_info" : {
"filename" : "include/control/packetio.p4",
- "line" : 52,
+ "line" : 57,
"column" : 12,
"source_fragment" : "hdr.packet_in.ingress_port = standard_metadata.ingress_port"
}
@@ -4578,7 +4607,7 @@
"init_table" : "node_43",
"tables" : [
{
- "name" : "tbl_drop_now",
+ "name" : "tbl_pkt_io_egress_pop_vlan",
"id" : 26,
"key" : [],
"match_type" : "exact",
@@ -4587,11 +4616,34 @@
"with_counters" : false,
"support_timeout" : false,
"direct_meters" : null,
+ "action_ids" : [50],
+ "actions" : ["FabricEgress.pkt_io_egress.pop_vlan"],
+ "base_default_next" : "node_47",
+ "next_tables" : {
+ "FabricEgress.pkt_io_egress.pop_vlan" : "node_47"
+ },
+ "default_entry" : {
+ "action_id" : 50,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_drop_now",
+ "id" : 27,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
"action_ids" : [48],
"actions" : ["drop_now"],
- "base_default_next" : "FabricEgress.egress_next.egress_vlan",
+ "base_default_next" : "tbl_act_15",
"next_tables" : {
- "drop_now" : "FabricEgress.egress_next.egress_vlan"
+ "drop_now" : "tbl_act_15"
},
"default_entry" : {
"action_id" : 48,
@@ -4601,8 +4653,54 @@
}
},
{
+ "name" : "tbl_act_15",
+ "id" : 28,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [52],
+ "actions" : ["act_15"],
+ "base_default_next" : null,
+ "next_tables" : {
+ "act_15" : null
+ },
+ "default_entry" : {
+ "action_id" : 52,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
+ "name" : "tbl_drop_now_0",
+ "id" : 29,
+ "key" : [],
+ "match_type" : "exact",
+ "type" : "simple",
+ "max_size" : 1024,
+ "with_counters" : false,
+ "support_timeout" : false,
+ "direct_meters" : null,
+ "action_ids" : [49],
+ "actions" : ["drop_now"],
+ "base_default_next" : "FabricEgress.egress_next.egress_vlan",
+ "next_tables" : {
+ "drop_now" : "FabricEgress.egress_next.egress_vlan"
+ },
+ "default_entry" : {
+ "action_id" : 49,
+ "action_const" : true,
+ "action_data" : [],
+ "action_entry_const" : true
+ }
+ },
+ {
"name" : "FabricEgress.egress_next.egress_vlan",
- "id" : 27,
+ "id" : 30,
"source_info" : {
"filename" : "include/control/next.p4",
"line" : 258,
@@ -4631,10 +4729,10 @@
"direct_meters" : null,
"action_ids" : [51, 47],
"actions" : ["FabricEgress.egress_next.pop_vlan", "nop"],
- "base_default_next" : "node_46",
+ "base_default_next" : null,
"next_tables" : {
- "FabricEgress.egress_next.pop_vlan" : "node_46",
- "nop" : "node_46"
+ "FabricEgress.egress_next.pop_vlan" : null,
+ "nop" : null
},
"default_entry" : {
"action_id" : 47,
@@ -4642,75 +4740,6 @@
"action_data" : [],
"action_entry_const" : false
}
- },
- {
- "name" : "tbl_pkt_io_egress_pop_vlan",
- "id" : 28,
- "key" : [],
- "match_type" : "exact",
- "type" : "simple",
- "max_size" : 1024,
- "with_counters" : false,
- "support_timeout" : false,
- "direct_meters" : null,
- "action_ids" : [50],
- "actions" : ["FabricEgress.pkt_io_egress.pop_vlan"],
- "base_default_next" : "node_49",
- "next_tables" : {
- "FabricEgress.pkt_io_egress.pop_vlan" : "node_49"
- },
- "default_entry" : {
- "action_id" : 50,
- "action_const" : true,
- "action_data" : [],
- "action_entry_const" : true
- }
- },
- {
- "name" : "tbl_drop_now_0",
- "id" : 29,
- "key" : [],
- "match_type" : "exact",
- "type" : "simple",
- "max_size" : 1024,
- "with_counters" : false,
- "support_timeout" : false,
- "direct_meters" : null,
- "action_ids" : [49],
- "actions" : ["drop_now"],
- "base_default_next" : "tbl_act_15",
- "next_tables" : {
- "drop_now" : "tbl_act_15"
- },
- "default_entry" : {
- "action_id" : 49,
- "action_const" : true,
- "action_data" : [],
- "action_entry_const" : true
- }
- },
- {
- "name" : "tbl_act_15",
- "id" : 30,
- "key" : [],
- "match_type" : "exact",
- "type" : "simple",
- "max_size" : 1024,
- "with_counters" : false,
- "support_timeout" : false,
- "direct_meters" : null,
- "action_ids" : [52],
- "actions" : ["act_15"],
- "base_default_next" : null,
- "next_tables" : {
- "act_15" : null
- },
- "default_entry" : {
- "action_id" : 52,
- "action_const" : true,
- "action_data" : [],
- "action_entry_const" : true
- }
}
],
"action_profiles" : [],
@@ -4719,61 +4748,41 @@
"name" : "node_43",
"id" : 13,
"source_info" : {
- "filename" : "include/control/next.p4",
- "line" : 272,
+ "filename" : "include/control/packetio.p4",
+ "line" : 43,
"column" : 12,
- "source_fragment" : "fabric_metadata.is_multicast == true ..."
+ "source_fragment" : "fabric_metadata.is_controller_packet_out == true"
},
"expression" : {
"type" : "expression",
"value" : {
- "op" : "and",
+ "op" : "==",
"left" : {
"type" : "expression",
"value" : {
- "op" : "==",
- "left" : {
- "type" : "expression",
- "value" : {
- "op" : "d2b",
- "left" : null,
- "right" : {
- "type" : "field",
- "value" : ["scalars", "fabric_metadata_t.is_multicast"]
- }
- }
- },
+ "op" : "d2b",
+ "left" : null,
"right" : {
- "type" : "bool",
- "value" : true
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.is_controller_packet_out"]
}
}
},
"right" : {
- "type" : "expression",
- "value" : {
- "op" : "==",
- "left" : {
- "type" : "field",
- "value" : ["standard_metadata", "ingress_port"]
- },
- "right" : {
- "type" : "field",
- "value" : ["standard_metadata", "egress_port"]
- }
- }
+ "type" : "bool",
+ "value" : true
}
}
},
- "true_next" : "tbl_drop_now",
- "false_next" : "FabricEgress.egress_next.egress_vlan"
+ "true_next" : null,
+ "false_next" : "node_44"
},
{
- "name" : "node_46",
+ "name" : "node_44",
"id" : 14,
"source_info" : {
"filename" : "include/control/packetio.p4",
- "line" : 42,
+ "line" : 47,
"column" : 12,
"source_fragment" : "standard_metadata.egress_port == 255"
},
@@ -4791,15 +4800,15 @@
}
}
},
- "false_next" : null,
- "true_next" : "node_47"
+ "true_next" : "node_45",
+ "false_next" : "node_50"
},
{
- "name" : "node_47",
+ "name" : "node_45",
"id" : 15,
"source_info" : {
"filename" : "include/control/packetio.p4",
- "line" : 43,
+ "line" : 48,
"column" : 16,
"source_fragment" : "hdr.vlan_tag.isValid() && fabric_metadata.pop_vlan_when_packet_in == true"
},
@@ -4842,14 +4851,14 @@
}
},
"true_next" : "tbl_pkt_io_egress_pop_vlan",
- "false_next" : "node_49"
+ "false_next" : "node_47"
},
{
- "name" : "node_49",
+ "name" : "node_47",
"id" : 16,
"source_info" : {
"filename" : "include/control/packetio.p4",
- "line" : 46,
+ "line" : 51,
"column" : 16,
"source_fragment" : "fabric_metadata.is_multicast == true && ..."
},
@@ -4901,8 +4910,61 @@
}
}
},
- "true_next" : "tbl_drop_now_0",
+ "true_next" : "tbl_drop_now",
"false_next" : "tbl_act_15"
+ },
+ {
+ "name" : "node_50",
+ "id" : 17,
+ "source_info" : {
+ "filename" : "include/control/next.p4",
+ "line" : 272,
+ "column" : 12,
+ "source_fragment" : "fabric_metadata.is_multicast == true ..."
+ },
+ "expression" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "and",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "d2b",
+ "left" : null,
+ "right" : {
+ "type" : "field",
+ "value" : ["scalars", "fabric_metadata_t.is_multicast"]
+ }
+ }
+ },
+ "right" : {
+ "type" : "bool",
+ "value" : true
+ }
+ }
+ },
+ "right" : {
+ "type" : "expression",
+ "value" : {
+ "op" : "==",
+ "left" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "ingress_port"]
+ },
+ "right" : {
+ "type" : "field",
+ "value" : ["standard_metadata", "egress_port"]
+ }
+ }
+ }
+ }
+ },
+ "true_next" : "tbl_drop_now_0",
+ "false_next" : "FabricEgress.egress_next.egress_vlan"
}
]
}