diff --git a/pipelines/fabric/src/test/p4/spgw/.gitignore b/pipelines/fabric/src/test/p4/spgw/.gitignore
new file mode 100644
index 0000000..43474cc
--- /dev/null
+++ b/pipelines/fabric/src/test/p4/spgw/.gitignore
@@ -0,0 +1,2 @@
+main.json
+main.p4info
diff --git a/pipelines/fabric/src/test/p4/spgw/Makefile b/pipelines/fabric/src/test/p4/spgw/Makefile
new file mode 100644
index 0000000..6b1e705
--- /dev/null
+++ b/pipelines/fabric/src/test/p4/spgw/Makefile
@@ -0,0 +1,5 @@
+all:
+	p4c-bm2-ss -o main.json \
+        -DWITH_SPGW -I ../../../main/resources/ \
+        --p4runtime-file main.p4info \
+        --p4runtime-format text main.p4
diff --git a/pipelines/fabric/src/test/p4/spgw/downlink-post.pcap b/pipelines/fabric/src/test/p4/spgw/downlink-post.pcap
new file mode 100644
index 0000000..a3b76a7d
--- /dev/null
+++ b/pipelines/fabric/src/test/p4/spgw/downlink-post.pcap
Binary files differ
diff --git a/pipelines/fabric/src/test/p4/spgw/downlink-pre.pcap b/pipelines/fabric/src/test/p4/spgw/downlink-pre.pcap
new file mode 100644
index 0000000..465ab03
--- /dev/null
+++ b/pipelines/fabric/src/test/p4/spgw/downlink-pre.pcap
Binary files differ
diff --git a/pipelines/fabric/src/test/p4/spgw/entries.json b/pipelines/fabric/src/test/p4/spgw/entries.json
new file mode 100644
index 0000000..ea3d201
--- /dev/null
+++ b/pipelines/fabric/src/test/p4/spgw/entries.json
@@ -0,0 +1,37 @@
+{
+  "spgw": {
+    "addr": "localhost:5051",
+    "flows": [
+      {
+        "table_name": "spgw_ingress.ue_filter_table",
+        "match_fields": {
+          "ipv4.dst_addr": ["16.255.255.252", 32]
+        },
+        "action_name": "NoAction",
+        "action_params": {
+        }
+      },
+      {
+        "table_name": "spgw_ingress.s1u_filter_table",
+        "match_fields": {
+          "spgw_meta.s1u_sgw_addr": "192.168.102.13"
+        },
+        "action_name": "NoAction",
+        "action_params": {
+        }
+      },
+      {
+        "table_name": "spgw_ingress.dl_sess_lookup",
+        "match_fields": {
+          "ipv4.dst_addr": "16.255.255.252"
+        },
+        "action_name": "spgw_ingress.set_dl_sess_info",
+        "action_params": {
+          "teid": 1,
+          "s1u_enb_addr": "192.168.102.11",
+          "s1u_sgw_addr": "192.168.102.13"
+        }
+      }
+    ]
+  }
+}
diff --git a/pipelines/fabric/src/test/p4/spgw/main.p4 b/pipelines/fabric/src/test/p4/spgw/main.p4
new file mode 100644
index 0000000..916412c
--- /dev/null
+++ b/pipelines/fabric/src/test/p4/spgw/main.p4
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#define S1U_PORT 1
+#define SGI_PORT 2
+#define AS_MAC_ADDR  0x52540029c9b7
+#define S1U_MAC_ADDR 0xc242592d3a84
+#define SGI_MAC_ADDR 0x3ac1e253e150
+#define ENB_MAC_ADDR 0x525400057b59
+
+#include <core.p4>
+#include <v1model.p4>
+
+#include "include/define.p4"
+#include "include/header.p4"
+#include "include/checksum.p4"
+#include "include/parser.p4"
+#include "include/control/packetio.p4"
+
+#include "include/spgw.p4"
+
+control table0_control(inout parsed_headers_t hdr,
+                       inout fabric_metadata_t fabric_metadata,
+                       inout standard_metadata_t standard_metadata) {
+
+    action send_to_cpu() {
+        standard_metadata.egress_spec = CPU_PORT;
+        exit;
+    }
+
+    table table0 {
+        key = {
+            standard_metadata.ingress_port : ternary;
+            hdr.ethernet.src_addr          : ternary;
+            hdr.ethernet.dst_addr          : ternary;
+            hdr.ethernet.ether_type        : ternary;
+            hdr.ipv4.src_addr              : ternary;
+            hdr.ipv4.dst_addr              : ternary;
+            hdr.ipv4.protocol              : ternary;
+            fabric_metadata.l4_src_port     : ternary;
+            fabric_metadata.l4_dst_port     : ternary;
+        }
+        actions = {
+            send_to_cpu();
+            NoAction();
+        }
+        const default_action = NoAction();
+    }
+
+    apply {
+        table0.apply();
+    }
+}
+
+//------------------------------------------------------------------------------
+// INGRESS PIPELINE
+//------------------------------------------------------------------------------
+
+control ingress_impl(inout parsed_headers_t hdr,
+                     inout fabric_metadata_t fabric_metadata,
+                     inout standard_metadata_t standard_metadata) {
+
+    apply {
+
+        PacketIoIngress.apply(hdr, fabric_metadata, standard_metadata);
+
+        // Drop garbage, so we get a clean pcap.
+        if (standard_metadata.ingress_port == S1U_PORT
+                && hdr.ethernet.src_addr != ENB_MAC_ADDR) {
+            mark_to_drop();
+            exit;
+        } else if (standard_metadata.ingress_port == SGI_PORT
+                && hdr.ethernet.src_addr != AS_MAC_ADDR) {
+            mark_to_drop();
+            exit;
+        }
+
+        table0_control.apply(hdr, fabric_metadata, standard_metadata);
+
+        if (standard_metadata.egress_spec == CPU_PORT) {
+            return;
+        }
+
+        if (standard_metadata.ingress_port == S1U_PORT) {
+            if (hdr.ethernet.dst_addr != S1U_MAC_ADDR) {
+                mark_to_drop();
+                exit;
+            }
+            standard_metadata.egress_spec = SGI_PORT;
+            hdr.ethernet.src_addr = SGI_MAC_ADDR;
+            hdr.ethernet.dst_addr = AS_MAC_ADDR;
+        } else if (standard_metadata.ingress_port == SGI_PORT) {
+            if (hdr.ethernet.dst_addr != SGI_MAC_ADDR) {
+                mark_to_drop();
+                exit;
+            }
+            standard_metadata.egress_spec = S1U_PORT;
+            hdr.ethernet.src_addr = S1U_MAC_ADDR;
+            hdr.ethernet.dst_addr = ENB_MAC_ADDR;
+        }
+
+#ifdef WITH_SPGW_PCC_GATING
+        fabric_metadata.spgw.l4_src_port = fabric_metadata.l4_src_port;
+        fabric_metadata.spgw.l4_dst_port = fabric_metadata.l4_dst_port;
+#endif // WITH_SPGW_PCC_GATING
+        spgw_ingress.apply(hdr.gtpu_ipv4, hdr.gtpu_udp, hdr.gtpu,
+                           hdr.ipv4, hdr.udp, fabric_metadata.spgw);
+    }
+}
+
+//------------------------------------------------------------------------------
+// EGRESS PIPELINE
+//------------------------------------------------------------------------------
+
+control egress_impl(inout parsed_headers_t hdr,
+                    inout fabric_metadata_t fabric_metadata,
+                    inout standard_metadata_t standard_metadata) {
+    apply {
+        PacketIoEgress.apply(hdr, fabric_metadata, standard_metadata);
+        spgw_egress.apply(hdr.gtpu_ipv4, hdr.gtpu_udp, hdr.gtpu,
+                          fabric_metadata.spgw, standard_metadata);
+     }
+}
+
+//------------------------------------------------------------------------------
+// SWITCH INSTANTIATION
+//------------------------------------------------------------------------------
+
+V1Switch(FabricParser(),
+         FabricVerifyChecksum(),
+         ingress_impl(),
+         egress_impl(),
+         FabricComputeChecksum(),
+         FabricDeparser()) main;
diff --git a/pipelines/fabric/src/test/p4/spgw/uplink-post.pcap b/pipelines/fabric/src/test/p4/spgw/uplink-post.pcap
new file mode 100644
index 0000000..c02e7c6
--- /dev/null
+++ b/pipelines/fabric/src/test/p4/spgw/uplink-post.pcap
Binary files differ
diff --git a/pipelines/fabric/src/test/p4/spgw/uplink-pre.pcap b/pipelines/fabric/src/test/p4/spgw/uplink-pre.pcap
new file mode 100644
index 0000000..78064fa
--- /dev/null
+++ b/pipelines/fabric/src/test/p4/spgw/uplink-pre.pcap
Binary files differ
