mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-17 18:32:28 +02:00
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:
parent
6ac9035267
commit
9b0171bc34
@ -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");
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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 {
|
||||
|
@ -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"
|
||||
},
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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 {
|
||||
|
@ -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"
|
||||
},
|
||||
|
Loading…
x
Reference in New Issue
Block a user