Integrating INT into fabric pipeline
Change-Id: I9555de0852de79d1a3c7302ecaa17ff112fc5107
diff --git a/pipelines/fabric/src/main/resources/fabric.p4 b/pipelines/fabric/src/main/resources/fabric.p4
index 93e887e..06c16fd 100644
--- a/pipelines/fabric/src/main/resources/fabric.p4
+++ b/pipelines/fabric/src/main/resources/fabric.p4
@@ -30,6 +30,13 @@
#include "include/spgw.p4"
#endif // WITH_SPGW
+#ifdef WITH_INT
+#include "include/int_source.p4"
+#include "include/int_transit.p4"
+#include "include/int_sink.p4"
+#include "include/int_report.p4"
+#endif // WITH_INT
+
control FabricIngress (
inout parsed_headers_t hdr,
inout fabric_metadata_t fabric_metadata,
@@ -54,7 +61,15 @@
forwarding.apply(hdr, fabric_metadata, standard_metadata);
next.apply(hdr, fabric_metadata, standard_metadata);
port_counters_control.apply(hdr, fabric_metadata, standard_metadata);
-
+#ifdef WITH_INT
+ process_set_source_sink.apply(hdr, fabric_metadata, standard_metadata);
+ if(fabric_metadata.int_meta.sink == 1) {
+ // clone packet for Telemetry Report
+ #ifdef __TARGET_BMV2__
+ clone(CloneType.I2E, REPORT_MIRROR_SESSION_ID);
+ #endif
+ }
+#endif
}
}
@@ -71,6 +86,28 @@
spgw_egress.apply(hdr.ipv4, hdr.gtpu_ipv4, hdr.gtpu_udp, hdr.gtpu,
fabric_metadata.spgw, standard_metadata);
#endif // WITH_SPGW
+#ifdef WITH_INT
+ if (standard_metadata.ingress_port != CPU_PORT &&
+ standard_metadata.egress_port != CPU_PORT &&
+ (hdr.udp.isValid() || hdr.tcp.isValid())) {
+ if (fabric_metadata.int_meta.source == 1) {
+ process_int_source.apply(hdr, fabric_metadata, standard_metadata);
+ }
+ if(hdr.int_header.isValid()) {
+ process_int_transit.apply(hdr, fabric_metadata, standard_metadata);
+ // update underlay header based on INT information inserted
+ process_int_outer_encap.apply(hdr, fabric_metadata, standard_metadata);
+ if (standard_metadata.instance_type == PKT_INSTANCE_TYPE_INGRESS_CLONE) {
+ /* send int report */
+ process_int_report.apply(hdr, fabric_metadata, standard_metadata);
+ }
+ if (fabric_metadata.int_meta.sink == 1) {
+ // int sink
+ process_int_sink.apply(hdr, fabric_metadata, standard_metadata);
+ }
+ }
+ }
+#endif
}
}