Fixed spgw.p4 decapping GTP packets not meant to be decapped

Also reduces the number of tables used for downlink processing.

Change-Id: I09a67cfac335b805d80e90cf5bb69fbab931e80b
This commit is contained in:
Carmelo Cascone 2018-08-14 01:43:57 -07:00
parent 6ac9035267
commit 9b0171bc34
14 changed files with 2805 additions and 3145 deletions

View File

@ -33,8 +33,6 @@ public final class FabricConstants {
}
// Header field IDs
public static final PiMatchFieldId SPGW_META_S1U_SGW_ADDR =
PiMatchFieldId.of("spgw_meta.s1u_sgw_addr");
public static final PiMatchFieldId HDR_VLAN_TAG_VLAN_ID =
PiMatchFieldId.of("hdr.vlan_tag.vlan_id");
public static final PiMatchFieldId HDR_MPLS_LABEL =
@ -63,6 +61,8 @@ public final class FabricConstants {
PiMatchFieldId.of("fabric_metadata.l4_dst_port");
public static final PiMatchFieldId STANDARD_METADATA_EGRESS_SPEC =
PiMatchFieldId.of("standard_metadata.egress_spec");
public static final PiMatchFieldId GTPU_IPV4_DST_ADDR =
PiMatchFieldId.of("gtpu_ipv4.dst_addr");
public static final PiMatchFieldId FABRIC_METADATA_IP_PROTO =
PiMatchFieldId.of("fabric_metadata.ip_proto");
public static final PiMatchFieldId FABRIC_METADATA_NEXT_ID =
@ -122,12 +122,8 @@ public final class FabricConstants {
PiTableId.of("FabricEgress.egress_next.egress_vlan");
public static final PiTableId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK =
PiTableId.of("FabricIngress.process_set_source_sink.tb_set_sink");
public static final PiTableId FABRIC_INGRESS_SPGW_INGRESS_UE_CDR_TABLE =
PiTableId.of("FabricIngress.spgw_ingress.ue_cdr_table");
public static final PiTableId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE =
PiTableId.of("FabricIngress.process_set_source_sink.tb_set_source");
public static final PiTableId FABRIC_INGRESS_SPGW_INGRESS_UE_FILTER_TABLE =
PiTableId.of("FabricIngress.spgw_ingress.ue_filter_table");
// Indirect Counter IDs
public static final PiCounterId FABRIC_INGRESS_PORT_COUNTERS_CONTROL_EGRESS_PORT_COUNTER =
PiCounterId.of("FabricIngress.port_counters_control.egress_port_counter");
@ -179,8 +175,8 @@ public final class FabricConstants {
// Action IDs
public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I14 =
PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i14");
public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_UPDATE_UE_CDR =
PiActionId.of("FabricIngress.spgw_ingress.update_ue_cdr");
public static final PiActionId FABRIC_INGRESS_FORWARDING_PUNT_TO_CPU =
PiActionId.of("FabricIngress.forwarding.punt_to_cpu");
public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I12 =
PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i12");
public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I13 =
@ -197,8 +193,8 @@ public final class FabricConstants {
PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i14");
public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_BRIDGING =
PiActionId.of("FabricIngress.forwarding.set_next_id_bridging");
public static final PiActionId FABRIC_INGRESS_FORWARDING_PUNT_TO_CPU =
PiActionId.of("FabricIngress.forwarding.punt_to_cpu");
public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I15 =
PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i15");
public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I2 =
PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i2");
public static final PiActionId FABRIC_EGRESS_PROCESS_INT_OUTER_ENCAP_INT_UPDATE_IPV4 =
@ -322,8 +318,6 @@ public final class FabricConstants {
PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i5");
public static final PiActionId FABRIC_INGRESS_NEXT_L3_ROUTING_VLAN =
PiActionId.of("FabricIngress.next.l3_routing_vlan");
public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I15 =
PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i15");
public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ACL =
PiActionId.of("FabricIngress.forwarding.set_next_id_acl");
public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0407_I6 =
@ -367,4 +361,4 @@ public final class FabricConstants {
PiControlMetadataId.of("ingress_port");
public static final PiControlMetadataId EGRESS_PORT =
PiControlMetadataId.of("egress_port");
}
}

View File

@ -48,6 +48,10 @@ inout standard_metadata_t standard_metadata) {
PortCountersControl() port_counters_control;
apply {
#ifdef WITH_SPGW
spgw_normalizer.apply(hdr.gtpu.isValid(), hdr.gtpu_ipv4, hdr.gtpu_udp,
hdr.ipv4, hdr.udp, hdr.inner_ipv4, hdr.inner_udp);
#endif // WITH_SPGW
packet_io_ingress.apply(hdr, fabric_metadata, standard_metadata);
#ifdef WITH_SPGW
#ifdef WITH_SPGW_PCC_GATING

View File

@ -72,9 +72,6 @@ control FabricVerifyChecksum(inout parsed_headers_t hdr,
hdr.ipv4.hdr_checksum,
HashAlgorithm.csum16
);
#ifdef WITH_SPGW
verify_gtpu_checksum.apply(hdr.gtpu_ipv4);
#endif // WITH_SPGW
}
}

View File

@ -68,6 +68,21 @@ typedef bit<9> port_num_t;
typedef bit<48> mac_addr_t;
typedef bit<16> group_id_t;
typedef bit<12> vlan_id_t;
typedef bit<48> timestamp_t;
typedef bit<32> switch_id_t;
typedef bit<32> ipv4_addr_t;
typedef bit<16> l4_port_t;
// SPGW types
typedef bit<2> direction_t;
typedef bit pcc_gate_status_t;
typedef bit<32> sdf_rule_id_t;
typedef bit<32> pcc_rule_id_t;
// spgw.p4 expects uplink packets with IP dst on this subnet
// 140.0.0.0/8
const ipv4_addr_t S1U_SGW_PREFIX = 2348810240;
#define S1U_SGW_PREFIX_LEN 8
const bit<16> ETHERTYPE_QINQ = 0x88A8;
const bit<16> ETHERTYPE_QINQ_NON_STD = 0x9100;
@ -95,28 +110,17 @@ const fwd_type_t FWD_IPV6_MULTICAST = 5;
const bit<8> DEFAULT_MPLS_TTL = 64;
const bit<8> DEFAULT_IPV4_TTL = 64;
typedef bit direction_t;
typedef bit pcc_gate_status_t;
typedef bit<32> sdf_rule_id_t;
typedef bit<32> pcc_rule_id_t;
const sdf_rule_id_t DEFAULT_SDF_RULE_ID = 0;
const pcc_rule_id_t DEFAULT_PCC_RULE_ID = 0;
const direction_t DIR_UPLINK = 1w0;
const direction_t DIR_DOWNLINK = 1w1;
const direction_t SPGW_DIR_UNKNOWN = 2w0;
const direction_t SPGW_DIR_UPLINK = 2w1;
const direction_t SPGW_DIR_DOWNLINK = 2w2;
const pcc_gate_status_t PCC_GATE_OPEN = 1w0;
const pcc_gate_status_t PCC_GATE_CLOSED = 1w1;
/* indicate INT at LSB of DSCP */
const bit<6> INT_DSCP = 0x1;
typedef bit<48> timestamp_t;
typedef bit<32> switch_id_t;
typedef bit<32> ip_address_t;
typedef bit<16> l4_port_t;
const bit<8> INT_HEADER_LEN_WORD = 4;
const bit<8> CPU_MIRROR_SESSION_ID = 250;

View File

@ -132,7 +132,6 @@ header gtpu_t {
}
struct spgw_meta_t {
_BOOL do_spgw;
direction_t direction;
bit<16> ipv4_len;
bit<32> teid;
@ -291,6 +290,8 @@ struct parsed_headers_t {
ipv4_t gtpu_ipv4;
udp_t gtpu_udp;
gtpu_t gtpu;
ipv4_t inner_ipv4;
udp_t inner_udp;
#endif // WITH_SPGW
ipv4_t ipv4;
#ifdef WITH_IPV6

View File

@ -44,8 +44,8 @@ control process_int_report (
(bit<32>) standard_metadata.enq_timestamp;
}
action do_report_encapsulation(mac_addr_t src_mac, mac_addr_t mon_mac, ip_address_t src_ip,
ip_address_t mon_ip, l4_port_t mon_port) {
action do_report_encapsulation(mac_addr_t src_mac, mac_addr_t mon_mac, ipv4_addr_t src_ip,
ipv4_addr_t mon_ip, l4_port_t mon_port) {
//Report Ethernet Header
hdr.report_ethernet.setValid();
hdr.report_ethernet.dst_addr = mon_mac;

View File

@ -179,24 +179,35 @@ inout standard_metadata_t standard_metadata) {
#ifdef WITH_SPGW
state parse_gtpu {
packet.extract(hdr.gtpu);
transition parse_ipv4_inner;
transition select(hdr.ipv4.dst_addr[31:32-S1U_SGW_PREFIX_LEN]) {
// Avoid parsing GTP and inner headers if we know this GTP packet
// is not to be processed by this switch.
// FIXME: use parser value sets when support is ready in ONOS.
// To set the S1U_SGW_PREFIX value at runtime.
S1U_SGW_PREFIX[31:32-S1U_SGW_PREFIX_LEN]: do_parse_gtpu;
default: accept;
}
}
state parse_ipv4_inner {
packet.extract(hdr.gtpu_ipv4);
transition select(hdr.gtpu_ipv4.protocol) {
state do_parse_gtpu {
packet.extract(hdr.gtpu);
transition parse_inner_ipv4;
}
state parse_inner_ipv4 {
packet.extract(hdr.inner_ipv4);
transition select(hdr.inner_ipv4.protocol) {
PROTO_TCP: parse_tcp;
PROTO_UDP: parse_udp_inner;
PROTO_UDP: parse_inner_udp;
PROTO_ICMP: parse_icmp;
default: accept;
}
}
state parse_udp_inner {
packet.extract(hdr.gtpu_udp);
fabric_metadata.l4_src_port = hdr.gtpu_udp.src_port;
fabric_metadata.l4_dst_port = hdr.gtpu_udp.dst_port;
state parse_inner_udp {
packet.extract(hdr.inner_udp);
fabric_metadata.l4_src_port = hdr.inner_udp.src_port;
fabric_metadata.l4_dst_port = hdr.inner_udp.dst_port;
#ifdef WITH_INT
transition select(hdr.ipv4.isValid() && (hdr.ipv4.dscp & INT_DSCP) == INT_DSCP) {
true: parse_intl4_shim;

View File

@ -17,6 +17,27 @@
#ifndef __SPGW__
#define __SPGW__
control spgw_normalizer(
in bool is_gtpu_encapped,
out ipv4_t gtpu_ipv4,
out udp_t gtpu_udp,
inout ipv4_t ipv4,
inout udp_t udp,
in ipv4_t inner_ipv4,
in udp_t inner_udp
) {
apply {
if (! is_gtpu_encapped) return;
gtpu_ipv4 = ipv4;
ipv4 = inner_ipv4;
gtpu_udp = udp;
if (inner_udp.isValid()) {
udp = inner_udp;
} else {
udp.setInvalid();
}
}
}
control spgw_ingress(
inout ipv4_t gtpu_ipv4,
@ -41,26 +62,24 @@ control spgw_ingress(
spgw_meta.teid = teid;
spgw_meta.s1u_enb_addr = s1u_enb_addr;
spgw_meta.s1u_sgw_addr = s1u_sgw_addr;
}
action update_ue_cdr() {
ue_counter.count();
}
table ue_filter_table {
table dl_sess_lookup {
key = {
// IP prefixes of the UEs managed by this switch (when downlink)
ipv4.dst_addr : lpm;
// UE addr for downlink
ipv4.dst_addr : exact;
}
actions = {
NoAction();
set_dl_sess_info();
}
counters = ue_counter;
}
table s1u_filter_table {
key = {
// IP addresses of the S1U interfaces embodied by this switch.
spgw_meta.s1u_sgw_addr : exact;
// IP addresses of the S1U interfaces of this SPGW-U instance (when uplink)
gtpu_ipv4.dst_addr : exact;
}
actions = {
NoAction();
@ -116,56 +135,22 @@ control spgw_ingress(
}
#endif // WITH_SPGW_PCC_GATING
table dl_sess_lookup {
key = {
// UE addr for downlink
ipv4.dst_addr : exact;
}
actions = {
set_dl_sess_info();
}
}
table ue_cdr_table {
key = {
// UE addr for downlink
ipv4.dst_addr : exact;
}
actions = {
update_ue_cdr();
}
counters = ue_counter;
}
apply {
spgw_meta.do_spgw = _FALSE;
if (gtpu.isValid()) {
// If here, the parsed ipv4 header is the outer GTP one, but
// fabric needs to forward on the inner one, i.e. this.
// We store the outer values we need in the metadata, then replace
// the ipv4 header extracted before with this one.
spgw_meta.s1u_enb_addr = ipv4.src_addr;
spgw_meta.s1u_sgw_addr = ipv4.dst_addr;
ipv4 = gtpu_ipv4;
udp = gtpu_udp;
if (s1u_filter_table.apply().hit) {
// TODO: check also that gtpu.msgtype == GTP_GPDU
spgw_meta.do_spgw = _TRUE;
spgw_meta.direction = DIR_UPLINK;
// If here, pkt has outer IP dst on
// S1U_SGW_PREFIX/S1U_SGW_PREFIX_LEN subnet.
// TODO: check also that gtpu.msgtype == GTP_GPDU
if (!s1u_filter_table.apply().hit) {
drop_now();
}
} else if (ue_filter_table.apply().hit) {
spgw_meta.do_spgw = _TRUE;
spgw_meta.direction = DIR_DOWNLINK;
}
if (spgw_meta.do_spgw == _FALSE) {
// Exit this control block.
return;
}
if (spgw_meta.direction == DIR_UPLINK) {
spgw_meta.direction = SPGW_DIR_UPLINK;
gtpu_decap();
} else if (dl_sess_lookup.apply().hit) {
spgw_meta.direction = SPGW_DIR_DOWNLINK;
} else {
spgw_meta.direction = SPGW_DIR_UNKNOWN;
// No SPGW processing needed.
return;
}
#ifdef WITH_SPGW_PCC_GATING
@ -181,15 +166,6 @@ control spgw_ingress(
}
#endif // WITH_SPGW_PCC_GATING
if (spgw_meta.direction == DIR_DOWNLINK) {
if (!dl_sess_lookup.apply().hit) {
// We have no other choice than drop, as we miss the session
// info necessary to properly GTPU encap the packet.
drop_now();
}
ue_cdr_table.apply();
}
// Don't ask why... we'll need this later.
spgw_meta.ipv4_len = ipv4.total_len;
}
@ -197,12 +173,12 @@ control spgw_ingress(
control spgw_egress(
in ipv4_t ipv4,
out ipv4_t gtpu_ipv4,
out udp_t gtpu_udp,
out gtpu_t gtpu,
in spgw_meta_t spgw_meta,
in standard_metadata_t std_meta
in ipv4_t ipv4,
inout ipv4_t gtpu_ipv4,
inout udp_t gtpu_udp,
inout gtpu_t gtpu,
in spgw_meta_t spgw_meta,
in standard_metadata_t std_meta
) {
action gtpu_encap() {
@ -211,7 +187,7 @@ control spgw_egress(
gtpu_ipv4.ihl = IPV4_MIN_IHL;
gtpu_ipv4.dscp = 0;
gtpu_ipv4.ecn = 0;
gtpu_ipv4.total_len = spgw_meta.ipv4_len
gtpu_ipv4.total_len = ipv4.total_len
+ (IPV4_HDR_SIZE + UDP_HDR_SIZE + GTP_HDR_SIZE);
gtpu_ipv4.identification = 0x1513; /* From NGIC */
gtpu_ipv4.flags = 0;
@ -242,44 +218,13 @@ control spgw_egress(
}
apply {
if (spgw_meta.do_spgw == _TRUE && spgw_meta.direction == DIR_DOWNLINK) {
if (spgw_meta.direction == SPGW_DIR_DOWNLINK) {
gtpu_encap();
}
}
}
control verify_gtpu_checksum(
inout ipv4_t gtpu_ipv4
) {
apply {
// TODO: re-enable gtpu_ipv4 verification
// with the current parser logic, gtpu_ip4 contains values of
// the inner header, which is already verified by include/checksum.p4.
// We need to modify the parser to copy the outer header somewhere
// else, and verify that here.
// verify_checksum(gtpu_ipv4.isValid(),
// {
// gtpu_ipv4.version,
// gtpu_ipv4.ihl,
// gtpu_ipv4.diffserv,
// gtpu_ipv4.total_len,
// gtpu_ipv4.identification,
// gtpu_ipv4.flags,
// gtpu_ipv4.frag_offset,
// gtpu_ipv4.ttl,
// gtpu_ipv4.protocol,
// gtpu_ipv4.src_addr,
// gtpu_ipv4.dst_addr
// },
// gtpu_ipv4.hdr_checksum,
// HashAlgorithm.csum16
// );
}
}
control update_gtpu_checksum(
inout ipv4_t gtpu_ipv4,
inout udp_t gtpu_udp,

View File

@ -1,39 +1,3 @@
tables {
preamble {
id: 33618733
name: "FabricIngress.spgw_ingress.ue_filter_table"
alias: "ue_filter_table"
}
match_fields {
id: 1
name: "ipv4.dst_addr"
bitwidth: 32
match_type: LPM
}
action_refs {
id: 16800567
}
size: 1024
idle_timeout_behavior: NO_TIMEOUT
}
tables {
preamble {
id: 33615906
name: "FabricIngress.spgw_ingress.s1u_filter_table"
alias: "s1u_filter_table"
}
match_fields {
id: 1
name: "spgw_meta.s1u_sgw_addr"
bitwidth: 32
match_type: EXACT
}
action_refs {
id: 16800567
}
size: 1024
idle_timeout_behavior: NO_TIMEOUT
}
tables {
preamble {
id: 33582731
@ -53,29 +17,25 @@ tables {
id: 16800567
annotations: "@defaultonly()"
}
direct_resource_ids: 318781522
size: 1024
idle_timeout_behavior: NO_TIMEOUT
}
tables {
preamble {
id: 33611263
name: "FabricIngress.spgw_ingress.ue_cdr_table"
alias: "ue_cdr_table"
id: 33615906
name: "FabricIngress.spgw_ingress.s1u_filter_table"
alias: "s1u_filter_table"
}
match_fields {
id: 1
name: "ipv4.dst_addr"
name: "gtpu_ipv4.dst_addr"
bitwidth: 32
match_type: EXACT
}
action_refs {
id: 16818129
}
action_refs {
id: 16800567
annotations: "@defaultonly()"
}
direct_resource_ids: 318781522
size: 1024
idle_timeout_behavior: NO_TIMEOUT
}
@ -857,13 +817,6 @@ actions {
bitwidth: 32
}
}
actions {
preamble {
id: 16818129
name: "FabricIngress.spgw_ingress.update_ue_cdr"
alias: "update_ue_cdr"
}
}
actions {
preamble {
id: 16778827
@ -1657,7 +1610,7 @@ direct_counters {
spec {
unit: BOTH
}
direct_table_id: 33611263
direct_table_id: 33582731
}
direct_counters {
preamble {

View File

@ -1340,7 +1340,7 @@
"id" : 0,
"source_info" : {
"filename" : "include/parser.p4",
"line" : 212,
"line" : 222,
"column" : 8,
"source_fragment" : "FabricDeparser"
},
@ -1865,7 +1865,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 74,
"line" : 89,
"column" : 31,
"source_fragment" : "0x8100; ..."
}
@ -2480,7 +2480,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 75,
"line" : 90,
"column" : 31,
"source_fragment" : "0x8847; ..."
}
@ -2556,7 +2556,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 95,
"line" : 110,
"column" : 32,
"source_fragment" : "64; ..."
}
@ -2671,7 +2671,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 75,
"line" : 90,
"column" : 31,
"source_fragment" : "0x8847; ..."
}
@ -2747,7 +2747,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 95,
"line" : 110,
"column" : 32,
"source_fragment" : "64; ..."
}
@ -3039,7 +3039,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 75,
"line" : 90,
"column" : 31,
"source_fragment" : "0x8847; ..."
}
@ -3115,7 +3115,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 95,
"line" : 110,
"column" : 32,
"source_fragment" : "64; ..."
}
@ -3230,7 +3230,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 75,
"line" : 90,
"column" : 31,
"source_fragment" : "0x8847; ..."
}
@ -3306,7 +3306,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 95,
"line" : 110,
"column" : 32,
"source_fragment" : "64; ..."
}
@ -3433,7 +3433,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 77,
"line" : 92,
"column" : 31,
"source_fragment" : "0x0800; ..."
}
@ -4031,7 +4031,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 120,
"line" : 124,
"column" : 35,
"source_fragment" : "4; ..."
}
@ -4462,7 +4462,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 113,
"line" : 122,
"column" : 24,
"source_fragment" : "0x1; ..."
}
@ -8201,7 +8201,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 77,
"line" : 92,
"column" : 31,
"source_fragment" : "0x0800; ..."
}
@ -8429,7 +8429,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 83,
"line" : 98,
"column" : 25,
"source_fragment" : "17; ..."
}
@ -8644,7 +8644,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 125,
"line" : 129,
"column" : 31,
"source_fragment" : "0; ..."
}
@ -8739,7 +8739,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 129,
"line" : 133,
"column" : 21,
"source_fragment" : "1; ..."
}
@ -10529,7 +10529,7 @@
"id" : 12,
"source_info" : {
"filename" : "fabric.p4",
"line" : 66,
"line" : 70,
"column" : 11,
"source_fragment" : "fabric_metadata.int_meta.sink == 1"
},
@ -10557,7 +10557,7 @@
"id" : 1,
"source_info" : {
"filename" : "fabric.p4",
"line" : 76,
"line" : 80,
"column" : 8,
"source_fragment" : "FabricEgress"
},
@ -11252,7 +11252,7 @@
"id" : 17,
"source_info" : {
"filename" : "fabric.p4",
"line" : 90,
"line" : 100,
"column" : 12,
"source_fragment" : "standard_metadata.ingress_port != 255 && ..."
},
@ -11332,7 +11332,7 @@
"id" : 18,
"source_info" : {
"filename" : "fabric.p4",
"line" : 93,
"line" : 103,
"column" : 16,
"source_fragment" : "fabric_metadata.int_meta.source == 1"
},
@ -11358,7 +11358,7 @@
"id" : 19,
"source_info" : {
"filename" : "fabric.p4",
"line" : 96,
"line" : 106,
"column" : 15,
"source_fragment" : "hdr.int_header.isValid()"
},
@ -11450,7 +11450,7 @@
"id" : 23,
"source_info" : {
"filename" : "fabric.p4",
"line" : 100,
"line" : 110,
"column" : 20,
"source_fragment" : "standard_metadata.instance_type == 1"
},
@ -11476,7 +11476,7 @@
"id" : 24,
"source_info" : {
"filename" : "fabric.p4",
"line" : 104,
"line" : 114,
"column" : 20,
"source_fragment" : "fabric_metadata.int_meta.sink == 1"
},

View File

@ -1,39 +1,3 @@
tables {
preamble {
id: 33618733
name: "FabricIngress.spgw_ingress.ue_filter_table"
alias: "ue_filter_table"
}
match_fields {
id: 1
name: "ipv4.dst_addr"
bitwidth: 32
match_type: LPM
}
action_refs {
id: 16800567
}
size: 1024
idle_timeout_behavior: NO_TIMEOUT
}
tables {
preamble {
id: 33615906
name: "FabricIngress.spgw_ingress.s1u_filter_table"
alias: "s1u_filter_table"
}
match_fields {
id: 1
name: "spgw_meta.s1u_sgw_addr"
bitwidth: 32
match_type: EXACT
}
action_refs {
id: 16800567
}
size: 1024
idle_timeout_behavior: NO_TIMEOUT
}
tables {
preamble {
id: 33582731
@ -53,29 +17,25 @@ tables {
id: 16800567
annotations: "@defaultonly()"
}
direct_resource_ids: 318781522
size: 1024
idle_timeout_behavior: NO_TIMEOUT
}
tables {
preamble {
id: 33611263
name: "FabricIngress.spgw_ingress.ue_cdr_table"
alias: "ue_cdr_table"
id: 33615906
name: "FabricIngress.spgw_ingress.s1u_filter_table"
alias: "s1u_filter_table"
}
match_fields {
id: 1
name: "ipv4.dst_addr"
name: "gtpu_ipv4.dst_addr"
bitwidth: 32
match_type: EXACT
}
action_refs {
id: 16818129
}
action_refs {
id: 16800567
annotations: "@defaultonly()"
}
direct_resource_ids: 318781522
size: 1024
idle_timeout_behavior: NO_TIMEOUT
}
@ -520,13 +480,6 @@ actions {
bitwidth: 32
}
}
actions {
preamble {
id: 16818129
name: "FabricIngress.spgw_ingress.update_ue_cdr"
alias: "update_ue_cdr"
}
}
actions {
preamble {
id: 16798734
@ -933,7 +886,7 @@ direct_counters {
spec {
unit: BOTH
}
direct_table_id: 33611263
direct_table_id: 33582731
}
direct_counters {
preamble {

View File

@ -668,7 +668,7 @@
"id" : 0,
"source_info" : {
"filename" : "include/parser.p4",
"line" : 212,
"line" : 222,
"column" : 8,
"source_fragment" : "FabricDeparser"
},
@ -1093,7 +1093,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 74,
"line" : 89,
"column" : 31,
"source_fragment" : "0x8100; ..."
}
@ -1708,7 +1708,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 75,
"line" : 90,
"column" : 31,
"source_fragment" : "0x8847; ..."
}
@ -1784,7 +1784,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 95,
"line" : 110,
"column" : 32,
"source_fragment" : "64; ..."
}
@ -1899,7 +1899,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 75,
"line" : 90,
"column" : 31,
"source_fragment" : "0x8847; ..."
}
@ -1975,7 +1975,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 95,
"line" : 110,
"column" : 32,
"source_fragment" : "64; ..."
}
@ -2267,7 +2267,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 75,
"line" : 90,
"column" : 31,
"source_fragment" : "0x8847; ..."
}
@ -2343,7 +2343,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 95,
"line" : 110,
"column" : 32,
"source_fragment" : "64; ..."
}
@ -2458,7 +2458,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 75,
"line" : 90,
"column" : 31,
"source_fragment" : "0x8847; ..."
}
@ -2534,7 +2534,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 95,
"line" : 110,
"column" : 32,
"source_fragment" : "64; ..."
}
@ -2661,7 +2661,7 @@
],
"source_info" : {
"filename" : "include/control/../define.p4",
"line" : 77,
"line" : 92,
"column" : 31,
"source_fragment" : "0x0800; ..."
}
@ -4400,7 +4400,7 @@
"id" : 1,
"source_info" : {
"filename" : "fabric.p4",
"line" : 76,
"line" : 80,
"column" : 8,
"source_fragment" : "FabricEgress"
},