mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-10-18 02:41:49 +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
|
// 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 =
|
public static final PiMatchFieldId HDR_VLAN_TAG_VLAN_ID =
|
||||||
PiMatchFieldId.of("hdr.vlan_tag.vlan_id");
|
PiMatchFieldId.of("hdr.vlan_tag.vlan_id");
|
||||||
public static final PiMatchFieldId HDR_MPLS_LABEL =
|
public static final PiMatchFieldId HDR_MPLS_LABEL =
|
||||||
@ -63,6 +61,8 @@ public final class FabricConstants {
|
|||||||
PiMatchFieldId.of("fabric_metadata.l4_dst_port");
|
PiMatchFieldId.of("fabric_metadata.l4_dst_port");
|
||||||
public static final PiMatchFieldId STANDARD_METADATA_EGRESS_SPEC =
|
public static final PiMatchFieldId STANDARD_METADATA_EGRESS_SPEC =
|
||||||
PiMatchFieldId.of("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 =
|
public static final PiMatchFieldId FABRIC_METADATA_IP_PROTO =
|
||||||
PiMatchFieldId.of("fabric_metadata.ip_proto");
|
PiMatchFieldId.of("fabric_metadata.ip_proto");
|
||||||
public static final PiMatchFieldId FABRIC_METADATA_NEXT_ID =
|
public static final PiMatchFieldId FABRIC_METADATA_NEXT_ID =
|
||||||
@ -122,12 +122,8 @@ public final class FabricConstants {
|
|||||||
PiTableId.of("FabricEgress.egress_next.egress_vlan");
|
PiTableId.of("FabricEgress.egress_next.egress_vlan");
|
||||||
public static final PiTableId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK =
|
public static final PiTableId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SINK =
|
||||||
PiTableId.of("FabricIngress.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 =
|
public static final PiTableId FABRIC_INGRESS_PROCESS_SET_SOURCE_SINK_TB_SET_SOURCE =
|
||||||
PiTableId.of("FabricIngress.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
|
// Indirect Counter IDs
|
||||||
public static final PiCounterId FABRIC_INGRESS_PORT_COUNTERS_CONTROL_EGRESS_PORT_COUNTER =
|
public static final PiCounterId FABRIC_INGRESS_PORT_COUNTERS_CONTROL_EGRESS_PORT_COUNTER =
|
||||||
PiCounterId.of("FabricIngress.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
|
// Action IDs
|
||||||
public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I14 =
|
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");
|
PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i14");
|
||||||
public static final PiActionId FABRIC_INGRESS_SPGW_INGRESS_UPDATE_UE_CDR =
|
public static final PiActionId FABRIC_INGRESS_FORWARDING_PUNT_TO_CPU =
|
||||||
PiActionId.of("FabricIngress.spgw_ingress.update_ue_cdr");
|
PiActionId.of("FabricIngress.forwarding.punt_to_cpu");
|
||||||
public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I12 =
|
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");
|
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 =
|
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");
|
PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i14");
|
||||||
public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_BRIDGING =
|
public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_BRIDGING =
|
||||||
PiActionId.of("FabricIngress.forwarding.set_next_id_bridging");
|
PiActionId.of("FabricIngress.forwarding.set_next_id_bridging");
|
||||||
public static final PiActionId FABRIC_INGRESS_FORWARDING_PUNT_TO_CPU =
|
public static final PiActionId FABRIC_EGRESS_PROCESS_INT_TRANSIT_INT_SET_HEADER_0003_I15 =
|
||||||
PiActionId.of("FabricIngress.forwarding.punt_to_cpu");
|
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 =
|
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");
|
PiActionId.of("FabricEgress.process_int_transit.int_set_header_0407_i2");
|
||||||
public static final PiActionId FABRIC_EGRESS_PROCESS_INT_OUTER_ENCAP_INT_UPDATE_IPV4 =
|
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");
|
PiActionId.of("FabricEgress.process_int_transit.int_set_header_0003_i5");
|
||||||
public static final PiActionId FABRIC_INGRESS_NEXT_L3_ROUTING_VLAN =
|
public static final PiActionId FABRIC_INGRESS_NEXT_L3_ROUTING_VLAN =
|
||||||
PiActionId.of("FabricIngress.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 =
|
public static final PiActionId FABRIC_INGRESS_FORWARDING_SET_NEXT_ID_ACL =
|
||||||
PiActionId.of("FabricIngress.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 =
|
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");
|
PiControlMetadataId.of("ingress_port");
|
||||||
public static final PiControlMetadataId EGRESS_PORT =
|
public static final PiControlMetadataId EGRESS_PORT =
|
||||||
PiControlMetadataId.of("egress_port");
|
PiControlMetadataId.of("egress_port");
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,10 @@ inout standard_metadata_t standard_metadata) {
|
|||||||
PortCountersControl() port_counters_control;
|
PortCountersControl() port_counters_control;
|
||||||
|
|
||||||
apply {
|
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);
|
packet_io_ingress.apply(hdr, fabric_metadata, standard_metadata);
|
||||||
#ifdef WITH_SPGW
|
#ifdef WITH_SPGW
|
||||||
#ifdef WITH_SPGW_PCC_GATING
|
#ifdef WITH_SPGW_PCC_GATING
|
||||||
|
@ -72,9 +72,6 @@ control FabricVerifyChecksum(inout parsed_headers_t hdr,
|
|||||||
hdr.ipv4.hdr_checksum,
|
hdr.ipv4.hdr_checksum,
|
||||||
HashAlgorithm.csum16
|
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<48> mac_addr_t;
|
||||||
typedef bit<16> group_id_t;
|
typedef bit<16> group_id_t;
|
||||||
typedef bit<12> vlan_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 = 0x88A8;
|
||||||
const bit<16> ETHERTYPE_QINQ_NON_STD = 0x9100;
|
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_MPLS_TTL = 64;
|
||||||
const bit<8> DEFAULT_IPV4_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 sdf_rule_id_t DEFAULT_SDF_RULE_ID = 0;
|
||||||
const pcc_rule_id_t DEFAULT_PCC_RULE_ID = 0;
|
const pcc_rule_id_t DEFAULT_PCC_RULE_ID = 0;
|
||||||
|
const direction_t SPGW_DIR_UNKNOWN = 2w0;
|
||||||
const direction_t DIR_UPLINK = 1w0;
|
const direction_t SPGW_DIR_UPLINK = 2w1;
|
||||||
const direction_t DIR_DOWNLINK = 1w1;
|
const direction_t SPGW_DIR_DOWNLINK = 2w2;
|
||||||
|
|
||||||
const pcc_gate_status_t PCC_GATE_OPEN = 1w0;
|
const pcc_gate_status_t PCC_GATE_OPEN = 1w0;
|
||||||
const pcc_gate_status_t PCC_GATE_CLOSED = 1w1;
|
const pcc_gate_status_t PCC_GATE_CLOSED = 1w1;
|
||||||
|
|
||||||
/* indicate INT at LSB of DSCP */
|
/* indicate INT at LSB of DSCP */
|
||||||
const bit<6> INT_DSCP = 0x1;
|
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> INT_HEADER_LEN_WORD = 4;
|
||||||
|
|
||||||
const bit<8> CPU_MIRROR_SESSION_ID = 250;
|
const bit<8> CPU_MIRROR_SESSION_ID = 250;
|
||||||
|
@ -132,7 +132,6 @@ header gtpu_t {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct spgw_meta_t {
|
struct spgw_meta_t {
|
||||||
_BOOL do_spgw;
|
|
||||||
direction_t direction;
|
direction_t direction;
|
||||||
bit<16> ipv4_len;
|
bit<16> ipv4_len;
|
||||||
bit<32> teid;
|
bit<32> teid;
|
||||||
@ -291,6 +290,8 @@ struct parsed_headers_t {
|
|||||||
ipv4_t gtpu_ipv4;
|
ipv4_t gtpu_ipv4;
|
||||||
udp_t gtpu_udp;
|
udp_t gtpu_udp;
|
||||||
gtpu_t gtpu;
|
gtpu_t gtpu;
|
||||||
|
ipv4_t inner_ipv4;
|
||||||
|
udp_t inner_udp;
|
||||||
#endif // WITH_SPGW
|
#endif // WITH_SPGW
|
||||||
ipv4_t ipv4;
|
ipv4_t ipv4;
|
||||||
#ifdef WITH_IPV6
|
#ifdef WITH_IPV6
|
||||||
|
@ -44,8 +44,8 @@ control process_int_report (
|
|||||||
(bit<32>) standard_metadata.enq_timestamp;
|
(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,
|
action do_report_encapsulation(mac_addr_t src_mac, mac_addr_t mon_mac, ipv4_addr_t src_ip,
|
||||||
ip_address_t mon_ip, l4_port_t mon_port) {
|
ipv4_addr_t mon_ip, l4_port_t mon_port) {
|
||||||
//Report Ethernet Header
|
//Report Ethernet Header
|
||||||
hdr.report_ethernet.setValid();
|
hdr.report_ethernet.setValid();
|
||||||
hdr.report_ethernet.dst_addr = mon_mac;
|
hdr.report_ethernet.dst_addr = mon_mac;
|
||||||
|
@ -179,24 +179,35 @@ inout standard_metadata_t standard_metadata) {
|
|||||||
|
|
||||||
#ifdef WITH_SPGW
|
#ifdef WITH_SPGW
|
||||||
state parse_gtpu {
|
state parse_gtpu {
|
||||||
packet.extract(hdr.gtpu);
|
transition select(hdr.ipv4.dst_addr[31:32-S1U_SGW_PREFIX_LEN]) {
|
||||||
transition parse_ipv4_inner;
|
// 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 {
|
state do_parse_gtpu {
|
||||||
packet.extract(hdr.gtpu_ipv4);
|
packet.extract(hdr.gtpu);
|
||||||
transition select(hdr.gtpu_ipv4.protocol) {
|
transition parse_inner_ipv4;
|
||||||
|
}
|
||||||
|
|
||||||
|
state parse_inner_ipv4 {
|
||||||
|
packet.extract(hdr.inner_ipv4);
|
||||||
|
transition select(hdr.inner_ipv4.protocol) {
|
||||||
PROTO_TCP: parse_tcp;
|
PROTO_TCP: parse_tcp;
|
||||||
PROTO_UDP: parse_udp_inner;
|
PROTO_UDP: parse_inner_udp;
|
||||||
PROTO_ICMP: parse_icmp;
|
PROTO_ICMP: parse_icmp;
|
||||||
default: accept;
|
default: accept;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
state parse_udp_inner {
|
state parse_inner_udp {
|
||||||
packet.extract(hdr.gtpu_udp);
|
packet.extract(hdr.inner_udp);
|
||||||
fabric_metadata.l4_src_port = hdr.gtpu_udp.src_port;
|
fabric_metadata.l4_src_port = hdr.inner_udp.src_port;
|
||||||
fabric_metadata.l4_dst_port = hdr.gtpu_udp.dst_port;
|
fabric_metadata.l4_dst_port = hdr.inner_udp.dst_port;
|
||||||
#ifdef WITH_INT
|
#ifdef WITH_INT
|
||||||
transition select(hdr.ipv4.isValid() && (hdr.ipv4.dscp & INT_DSCP) == INT_DSCP) {
|
transition select(hdr.ipv4.isValid() && (hdr.ipv4.dscp & INT_DSCP) == INT_DSCP) {
|
||||||
true: parse_intl4_shim;
|
true: parse_intl4_shim;
|
||||||
|
@ -17,6 +17,27 @@
|
|||||||
#ifndef __SPGW__
|
#ifndef __SPGW__
|
||||||
#define __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(
|
control spgw_ingress(
|
||||||
inout ipv4_t gtpu_ipv4,
|
inout ipv4_t gtpu_ipv4,
|
||||||
@ -41,26 +62,24 @@ control spgw_ingress(
|
|||||||
spgw_meta.teid = teid;
|
spgw_meta.teid = teid;
|
||||||
spgw_meta.s1u_enb_addr = s1u_enb_addr;
|
spgw_meta.s1u_enb_addr = s1u_enb_addr;
|
||||||
spgw_meta.s1u_sgw_addr = s1u_sgw_addr;
|
spgw_meta.s1u_sgw_addr = s1u_sgw_addr;
|
||||||
}
|
|
||||||
|
|
||||||
action update_ue_cdr() {
|
|
||||||
ue_counter.count();
|
ue_counter.count();
|
||||||
}
|
}
|
||||||
|
|
||||||
table ue_filter_table {
|
table dl_sess_lookup {
|
||||||
key = {
|
key = {
|
||||||
// IP prefixes of the UEs managed by this switch (when downlink)
|
// UE addr for downlink
|
||||||
ipv4.dst_addr : lpm;
|
ipv4.dst_addr : exact;
|
||||||
}
|
}
|
||||||
actions = {
|
actions = {
|
||||||
NoAction();
|
set_dl_sess_info();
|
||||||
}
|
}
|
||||||
|
counters = ue_counter;
|
||||||
}
|
}
|
||||||
|
|
||||||
table s1u_filter_table {
|
table s1u_filter_table {
|
||||||
key = {
|
key = {
|
||||||
// IP addresses of the S1U interfaces embodied by this switch.
|
// IP addresses of the S1U interfaces of this SPGW-U instance (when uplink)
|
||||||
spgw_meta.s1u_sgw_addr : exact;
|
gtpu_ipv4.dst_addr : exact;
|
||||||
}
|
}
|
||||||
actions = {
|
actions = {
|
||||||
NoAction();
|
NoAction();
|
||||||
@ -116,56 +135,22 @@ control spgw_ingress(
|
|||||||
}
|
}
|
||||||
#endif // WITH_SPGW_PCC_GATING
|
#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 {
|
apply {
|
||||||
spgw_meta.do_spgw = _FALSE;
|
|
||||||
if (gtpu.isValid()) {
|
if (gtpu.isValid()) {
|
||||||
// If here, the parsed ipv4 header is the outer GTP one, but
|
// If here, pkt has outer IP dst on
|
||||||
// fabric needs to forward on the inner one, i.e. this.
|
// S1U_SGW_PREFIX/S1U_SGW_PREFIX_LEN subnet.
|
||||||
// We store the outer values we need in the metadata, then replace
|
// TODO: check also that gtpu.msgtype == GTP_GPDU
|
||||||
// the ipv4 header extracted before with this one.
|
if (!s1u_filter_table.apply().hit) {
|
||||||
spgw_meta.s1u_enb_addr = ipv4.src_addr;
|
drop_now();
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
} else if (ue_filter_table.apply().hit) {
|
spgw_meta.direction = SPGW_DIR_UPLINK;
|
||||||
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) {
|
|
||||||
gtpu_decap();
|
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
|
#ifdef WITH_SPGW_PCC_GATING
|
||||||
@ -181,15 +166,6 @@ control spgw_ingress(
|
|||||||
}
|
}
|
||||||
#endif // WITH_SPGW_PCC_GATING
|
#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.
|
// Don't ask why... we'll need this later.
|
||||||
spgw_meta.ipv4_len = ipv4.total_len;
|
spgw_meta.ipv4_len = ipv4.total_len;
|
||||||
}
|
}
|
||||||
@ -197,12 +173,12 @@ control spgw_ingress(
|
|||||||
|
|
||||||
|
|
||||||
control spgw_egress(
|
control spgw_egress(
|
||||||
in ipv4_t ipv4,
|
in ipv4_t ipv4,
|
||||||
out ipv4_t gtpu_ipv4,
|
inout ipv4_t gtpu_ipv4,
|
||||||
out udp_t gtpu_udp,
|
inout udp_t gtpu_udp,
|
||||||
out gtpu_t gtpu,
|
inout gtpu_t gtpu,
|
||||||
in spgw_meta_t spgw_meta,
|
in spgw_meta_t spgw_meta,
|
||||||
in standard_metadata_t std_meta
|
in standard_metadata_t std_meta
|
||||||
) {
|
) {
|
||||||
|
|
||||||
action gtpu_encap() {
|
action gtpu_encap() {
|
||||||
@ -211,7 +187,7 @@ control spgw_egress(
|
|||||||
gtpu_ipv4.ihl = IPV4_MIN_IHL;
|
gtpu_ipv4.ihl = IPV4_MIN_IHL;
|
||||||
gtpu_ipv4.dscp = 0;
|
gtpu_ipv4.dscp = 0;
|
||||||
gtpu_ipv4.ecn = 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);
|
+ (IPV4_HDR_SIZE + UDP_HDR_SIZE + GTP_HDR_SIZE);
|
||||||
gtpu_ipv4.identification = 0x1513; /* From NGIC */
|
gtpu_ipv4.identification = 0x1513; /* From NGIC */
|
||||||
gtpu_ipv4.flags = 0;
|
gtpu_ipv4.flags = 0;
|
||||||
@ -242,44 +218,13 @@ control spgw_egress(
|
|||||||
}
|
}
|
||||||
|
|
||||||
apply {
|
apply {
|
||||||
if (spgw_meta.do_spgw == _TRUE && spgw_meta.direction == DIR_DOWNLINK) {
|
if (spgw_meta.direction == SPGW_DIR_DOWNLINK) {
|
||||||
gtpu_encap();
|
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(
|
control update_gtpu_checksum(
|
||||||
inout ipv4_t gtpu_ipv4,
|
inout ipv4_t gtpu_ipv4,
|
||||||
inout udp_t gtpu_udp,
|
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 {
|
tables {
|
||||||
preamble {
|
preamble {
|
||||||
id: 33582731
|
id: 33582731
|
||||||
@ -53,29 +17,25 @@ tables {
|
|||||||
id: 16800567
|
id: 16800567
|
||||||
annotations: "@defaultonly()"
|
annotations: "@defaultonly()"
|
||||||
}
|
}
|
||||||
|
direct_resource_ids: 318781522
|
||||||
size: 1024
|
size: 1024
|
||||||
idle_timeout_behavior: NO_TIMEOUT
|
idle_timeout_behavior: NO_TIMEOUT
|
||||||
}
|
}
|
||||||
tables {
|
tables {
|
||||||
preamble {
|
preamble {
|
||||||
id: 33611263
|
id: 33615906
|
||||||
name: "FabricIngress.spgw_ingress.ue_cdr_table"
|
name: "FabricIngress.spgw_ingress.s1u_filter_table"
|
||||||
alias: "ue_cdr_table"
|
alias: "s1u_filter_table"
|
||||||
}
|
}
|
||||||
match_fields {
|
match_fields {
|
||||||
id: 1
|
id: 1
|
||||||
name: "ipv4.dst_addr"
|
name: "gtpu_ipv4.dst_addr"
|
||||||
bitwidth: 32
|
bitwidth: 32
|
||||||
match_type: EXACT
|
match_type: EXACT
|
||||||
}
|
}
|
||||||
action_refs {
|
|
||||||
id: 16818129
|
|
||||||
}
|
|
||||||
action_refs {
|
action_refs {
|
||||||
id: 16800567
|
id: 16800567
|
||||||
annotations: "@defaultonly()"
|
|
||||||
}
|
}
|
||||||
direct_resource_ids: 318781522
|
|
||||||
size: 1024
|
size: 1024
|
||||||
idle_timeout_behavior: NO_TIMEOUT
|
idle_timeout_behavior: NO_TIMEOUT
|
||||||
}
|
}
|
||||||
@ -857,13 +817,6 @@ actions {
|
|||||||
bitwidth: 32
|
bitwidth: 32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
actions {
|
|
||||||
preamble {
|
|
||||||
id: 16818129
|
|
||||||
name: "FabricIngress.spgw_ingress.update_ue_cdr"
|
|
||||||
alias: "update_ue_cdr"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
actions {
|
actions {
|
||||||
preamble {
|
preamble {
|
||||||
id: 16778827
|
id: 16778827
|
||||||
@ -1657,7 +1610,7 @@ direct_counters {
|
|||||||
spec {
|
spec {
|
||||||
unit: BOTH
|
unit: BOTH
|
||||||
}
|
}
|
||||||
direct_table_id: 33611263
|
direct_table_id: 33582731
|
||||||
}
|
}
|
||||||
direct_counters {
|
direct_counters {
|
||||||
preamble {
|
preamble {
|
||||||
|
@ -1340,7 +1340,7 @@
|
|||||||
"id" : 0,
|
"id" : 0,
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/parser.p4",
|
"filename" : "include/parser.p4",
|
||||||
"line" : 212,
|
"line" : 222,
|
||||||
"column" : 8,
|
"column" : 8,
|
||||||
"source_fragment" : "FabricDeparser"
|
"source_fragment" : "FabricDeparser"
|
||||||
},
|
},
|
||||||
@ -1865,7 +1865,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 74,
|
"line" : 89,
|
||||||
"column" : 31,
|
"column" : 31,
|
||||||
"source_fragment" : "0x8100; ..."
|
"source_fragment" : "0x8100; ..."
|
||||||
}
|
}
|
||||||
@ -2480,7 +2480,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 75,
|
"line" : 90,
|
||||||
"column" : 31,
|
"column" : 31,
|
||||||
"source_fragment" : "0x8847; ..."
|
"source_fragment" : "0x8847; ..."
|
||||||
}
|
}
|
||||||
@ -2556,7 +2556,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 95,
|
"line" : 110,
|
||||||
"column" : 32,
|
"column" : 32,
|
||||||
"source_fragment" : "64; ..."
|
"source_fragment" : "64; ..."
|
||||||
}
|
}
|
||||||
@ -2671,7 +2671,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 75,
|
"line" : 90,
|
||||||
"column" : 31,
|
"column" : 31,
|
||||||
"source_fragment" : "0x8847; ..."
|
"source_fragment" : "0x8847; ..."
|
||||||
}
|
}
|
||||||
@ -2747,7 +2747,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 95,
|
"line" : 110,
|
||||||
"column" : 32,
|
"column" : 32,
|
||||||
"source_fragment" : "64; ..."
|
"source_fragment" : "64; ..."
|
||||||
}
|
}
|
||||||
@ -3039,7 +3039,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 75,
|
"line" : 90,
|
||||||
"column" : 31,
|
"column" : 31,
|
||||||
"source_fragment" : "0x8847; ..."
|
"source_fragment" : "0x8847; ..."
|
||||||
}
|
}
|
||||||
@ -3115,7 +3115,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 95,
|
"line" : 110,
|
||||||
"column" : 32,
|
"column" : 32,
|
||||||
"source_fragment" : "64; ..."
|
"source_fragment" : "64; ..."
|
||||||
}
|
}
|
||||||
@ -3230,7 +3230,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 75,
|
"line" : 90,
|
||||||
"column" : 31,
|
"column" : 31,
|
||||||
"source_fragment" : "0x8847; ..."
|
"source_fragment" : "0x8847; ..."
|
||||||
}
|
}
|
||||||
@ -3306,7 +3306,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 95,
|
"line" : 110,
|
||||||
"column" : 32,
|
"column" : 32,
|
||||||
"source_fragment" : "64; ..."
|
"source_fragment" : "64; ..."
|
||||||
}
|
}
|
||||||
@ -3433,7 +3433,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 77,
|
"line" : 92,
|
||||||
"column" : 31,
|
"column" : 31,
|
||||||
"source_fragment" : "0x0800; ..."
|
"source_fragment" : "0x0800; ..."
|
||||||
}
|
}
|
||||||
@ -4031,7 +4031,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 120,
|
"line" : 124,
|
||||||
"column" : 35,
|
"column" : 35,
|
||||||
"source_fragment" : "4; ..."
|
"source_fragment" : "4; ..."
|
||||||
}
|
}
|
||||||
@ -4462,7 +4462,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 113,
|
"line" : 122,
|
||||||
"column" : 24,
|
"column" : 24,
|
||||||
"source_fragment" : "0x1; ..."
|
"source_fragment" : "0x1; ..."
|
||||||
}
|
}
|
||||||
@ -8201,7 +8201,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 77,
|
"line" : 92,
|
||||||
"column" : 31,
|
"column" : 31,
|
||||||
"source_fragment" : "0x0800; ..."
|
"source_fragment" : "0x0800; ..."
|
||||||
}
|
}
|
||||||
@ -8429,7 +8429,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 83,
|
"line" : 98,
|
||||||
"column" : 25,
|
"column" : 25,
|
||||||
"source_fragment" : "17; ..."
|
"source_fragment" : "17; ..."
|
||||||
}
|
}
|
||||||
@ -8644,7 +8644,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 125,
|
"line" : 129,
|
||||||
"column" : 31,
|
"column" : 31,
|
||||||
"source_fragment" : "0; ..."
|
"source_fragment" : "0; ..."
|
||||||
}
|
}
|
||||||
@ -8739,7 +8739,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 129,
|
"line" : 133,
|
||||||
"column" : 21,
|
"column" : 21,
|
||||||
"source_fragment" : "1; ..."
|
"source_fragment" : "1; ..."
|
||||||
}
|
}
|
||||||
@ -10529,7 +10529,7 @@
|
|||||||
"id" : 12,
|
"id" : 12,
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "fabric.p4",
|
"filename" : "fabric.p4",
|
||||||
"line" : 66,
|
"line" : 70,
|
||||||
"column" : 11,
|
"column" : 11,
|
||||||
"source_fragment" : "fabric_metadata.int_meta.sink == 1"
|
"source_fragment" : "fabric_metadata.int_meta.sink == 1"
|
||||||
},
|
},
|
||||||
@ -10557,7 +10557,7 @@
|
|||||||
"id" : 1,
|
"id" : 1,
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "fabric.p4",
|
"filename" : "fabric.p4",
|
||||||
"line" : 76,
|
"line" : 80,
|
||||||
"column" : 8,
|
"column" : 8,
|
||||||
"source_fragment" : "FabricEgress"
|
"source_fragment" : "FabricEgress"
|
||||||
},
|
},
|
||||||
@ -11252,7 +11252,7 @@
|
|||||||
"id" : 17,
|
"id" : 17,
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "fabric.p4",
|
"filename" : "fabric.p4",
|
||||||
"line" : 90,
|
"line" : 100,
|
||||||
"column" : 12,
|
"column" : 12,
|
||||||
"source_fragment" : "standard_metadata.ingress_port != 255 && ..."
|
"source_fragment" : "standard_metadata.ingress_port != 255 && ..."
|
||||||
},
|
},
|
||||||
@ -11332,7 +11332,7 @@
|
|||||||
"id" : 18,
|
"id" : 18,
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "fabric.p4",
|
"filename" : "fabric.p4",
|
||||||
"line" : 93,
|
"line" : 103,
|
||||||
"column" : 16,
|
"column" : 16,
|
||||||
"source_fragment" : "fabric_metadata.int_meta.source == 1"
|
"source_fragment" : "fabric_metadata.int_meta.source == 1"
|
||||||
},
|
},
|
||||||
@ -11358,7 +11358,7 @@
|
|||||||
"id" : 19,
|
"id" : 19,
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "fabric.p4",
|
"filename" : "fabric.p4",
|
||||||
"line" : 96,
|
"line" : 106,
|
||||||
"column" : 15,
|
"column" : 15,
|
||||||
"source_fragment" : "hdr.int_header.isValid()"
|
"source_fragment" : "hdr.int_header.isValid()"
|
||||||
},
|
},
|
||||||
@ -11450,7 +11450,7 @@
|
|||||||
"id" : 23,
|
"id" : 23,
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "fabric.p4",
|
"filename" : "fabric.p4",
|
||||||
"line" : 100,
|
"line" : 110,
|
||||||
"column" : 20,
|
"column" : 20,
|
||||||
"source_fragment" : "standard_metadata.instance_type == 1"
|
"source_fragment" : "standard_metadata.instance_type == 1"
|
||||||
},
|
},
|
||||||
@ -11476,7 +11476,7 @@
|
|||||||
"id" : 24,
|
"id" : 24,
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "fabric.p4",
|
"filename" : "fabric.p4",
|
||||||
"line" : 104,
|
"line" : 114,
|
||||||
"column" : 20,
|
"column" : 20,
|
||||||
"source_fragment" : "fabric_metadata.int_meta.sink == 1"
|
"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 {
|
tables {
|
||||||
preamble {
|
preamble {
|
||||||
id: 33582731
|
id: 33582731
|
||||||
@ -53,29 +17,25 @@ tables {
|
|||||||
id: 16800567
|
id: 16800567
|
||||||
annotations: "@defaultonly()"
|
annotations: "@defaultonly()"
|
||||||
}
|
}
|
||||||
|
direct_resource_ids: 318781522
|
||||||
size: 1024
|
size: 1024
|
||||||
idle_timeout_behavior: NO_TIMEOUT
|
idle_timeout_behavior: NO_TIMEOUT
|
||||||
}
|
}
|
||||||
tables {
|
tables {
|
||||||
preamble {
|
preamble {
|
||||||
id: 33611263
|
id: 33615906
|
||||||
name: "FabricIngress.spgw_ingress.ue_cdr_table"
|
name: "FabricIngress.spgw_ingress.s1u_filter_table"
|
||||||
alias: "ue_cdr_table"
|
alias: "s1u_filter_table"
|
||||||
}
|
}
|
||||||
match_fields {
|
match_fields {
|
||||||
id: 1
|
id: 1
|
||||||
name: "ipv4.dst_addr"
|
name: "gtpu_ipv4.dst_addr"
|
||||||
bitwidth: 32
|
bitwidth: 32
|
||||||
match_type: EXACT
|
match_type: EXACT
|
||||||
}
|
}
|
||||||
action_refs {
|
|
||||||
id: 16818129
|
|
||||||
}
|
|
||||||
action_refs {
|
action_refs {
|
||||||
id: 16800567
|
id: 16800567
|
||||||
annotations: "@defaultonly()"
|
|
||||||
}
|
}
|
||||||
direct_resource_ids: 318781522
|
|
||||||
size: 1024
|
size: 1024
|
||||||
idle_timeout_behavior: NO_TIMEOUT
|
idle_timeout_behavior: NO_TIMEOUT
|
||||||
}
|
}
|
||||||
@ -520,13 +480,6 @@ actions {
|
|||||||
bitwidth: 32
|
bitwidth: 32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
actions {
|
|
||||||
preamble {
|
|
||||||
id: 16818129
|
|
||||||
name: "FabricIngress.spgw_ingress.update_ue_cdr"
|
|
||||||
alias: "update_ue_cdr"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
actions {
|
actions {
|
||||||
preamble {
|
preamble {
|
||||||
id: 16798734
|
id: 16798734
|
||||||
@ -933,7 +886,7 @@ direct_counters {
|
|||||||
spec {
|
spec {
|
||||||
unit: BOTH
|
unit: BOTH
|
||||||
}
|
}
|
||||||
direct_table_id: 33611263
|
direct_table_id: 33582731
|
||||||
}
|
}
|
||||||
direct_counters {
|
direct_counters {
|
||||||
preamble {
|
preamble {
|
||||||
|
@ -668,7 +668,7 @@
|
|||||||
"id" : 0,
|
"id" : 0,
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/parser.p4",
|
"filename" : "include/parser.p4",
|
||||||
"line" : 212,
|
"line" : 222,
|
||||||
"column" : 8,
|
"column" : 8,
|
||||||
"source_fragment" : "FabricDeparser"
|
"source_fragment" : "FabricDeparser"
|
||||||
},
|
},
|
||||||
@ -1093,7 +1093,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 74,
|
"line" : 89,
|
||||||
"column" : 31,
|
"column" : 31,
|
||||||
"source_fragment" : "0x8100; ..."
|
"source_fragment" : "0x8100; ..."
|
||||||
}
|
}
|
||||||
@ -1708,7 +1708,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 75,
|
"line" : 90,
|
||||||
"column" : 31,
|
"column" : 31,
|
||||||
"source_fragment" : "0x8847; ..."
|
"source_fragment" : "0x8847; ..."
|
||||||
}
|
}
|
||||||
@ -1784,7 +1784,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 95,
|
"line" : 110,
|
||||||
"column" : 32,
|
"column" : 32,
|
||||||
"source_fragment" : "64; ..."
|
"source_fragment" : "64; ..."
|
||||||
}
|
}
|
||||||
@ -1899,7 +1899,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 75,
|
"line" : 90,
|
||||||
"column" : 31,
|
"column" : 31,
|
||||||
"source_fragment" : "0x8847; ..."
|
"source_fragment" : "0x8847; ..."
|
||||||
}
|
}
|
||||||
@ -1975,7 +1975,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 95,
|
"line" : 110,
|
||||||
"column" : 32,
|
"column" : 32,
|
||||||
"source_fragment" : "64; ..."
|
"source_fragment" : "64; ..."
|
||||||
}
|
}
|
||||||
@ -2267,7 +2267,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 75,
|
"line" : 90,
|
||||||
"column" : 31,
|
"column" : 31,
|
||||||
"source_fragment" : "0x8847; ..."
|
"source_fragment" : "0x8847; ..."
|
||||||
}
|
}
|
||||||
@ -2343,7 +2343,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 95,
|
"line" : 110,
|
||||||
"column" : 32,
|
"column" : 32,
|
||||||
"source_fragment" : "64; ..."
|
"source_fragment" : "64; ..."
|
||||||
}
|
}
|
||||||
@ -2458,7 +2458,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 75,
|
"line" : 90,
|
||||||
"column" : 31,
|
"column" : 31,
|
||||||
"source_fragment" : "0x8847; ..."
|
"source_fragment" : "0x8847; ..."
|
||||||
}
|
}
|
||||||
@ -2534,7 +2534,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 95,
|
"line" : 110,
|
||||||
"column" : 32,
|
"column" : 32,
|
||||||
"source_fragment" : "64; ..."
|
"source_fragment" : "64; ..."
|
||||||
}
|
}
|
||||||
@ -2661,7 +2661,7 @@
|
|||||||
],
|
],
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "include/control/../define.p4",
|
"filename" : "include/control/../define.p4",
|
||||||
"line" : 77,
|
"line" : 92,
|
||||||
"column" : 31,
|
"column" : 31,
|
||||||
"source_fragment" : "0x0800; ..."
|
"source_fragment" : "0x0800; ..."
|
||||||
}
|
}
|
||||||
@ -4400,7 +4400,7 @@
|
|||||||
"id" : 1,
|
"id" : 1,
|
||||||
"source_info" : {
|
"source_info" : {
|
||||||
"filename" : "fabric.p4",
|
"filename" : "fabric.p4",
|
||||||
"line" : 76,
|
"line" : 80,
|
||||||
"column" : 8,
|
"column" : 8,
|
||||||
"source_fragment" : "FabricEgress"
|
"source_fragment" : "FabricEgress"
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user