diff --git a/common_requirements.in b/common_requirements.in
index e1bcad78bfc23217633fb28ef28a2d70d070644a..b277265768c9726f17ab046d8aa932167615f523 100644
--- a/common_requirements.in
+++ b/common_requirements.in
@@ -15,6 +15,7 @@
 coverage==6.3
 grpcio==1.47.*
 grpcio-health-checking==1.47.*
+grpcio-reflection==1.47.*
 grpcio-tools==1.47.*
 grpclib==0.4.4
 prettytable==3.5.0
diff --git a/deploy/nats.sh b/deploy/nats.sh
index cb3dd23183d0f3004e8ffb3c82b3cc91414bf704..b6df8066b2eb78263335a8a7831579e0e036b37a 100755
--- a/deploy/nats.sh
+++ b/deploy/nats.sh
@@ -69,8 +69,7 @@ function nats_deploy_single() {
         echo ">>> NATS is present; skipping step."
     else
         echo ">>> Deploy NATS"
-        helm3 install ${NATS_NAMESPACE} nats/nats --namespace ${NATS_NAMESPACE} --set nats.image=nats:2.9-alpine --set config.cluster.enabled=true --set config.cluster.tls.enabled=true
-
+        helm3 install ${NATS_NAMESPACE} nats/nats --namespace ${NATS_NAMESPACE} --set nats.image=nats:2.9-alpine
 
         echo ">>> Waiting NATS statefulset to be created..."
         while ! kubectl get --namespace ${NATS_NAMESPACE} statefulset/${NATS_NAMESPACE} &> /dev/null; do
diff --git a/deploy/tfs.sh b/deploy/tfs.sh
index f396094080c8ec4a33b016b88bc0137a3a32e65c..a1429e443eaa70252ab2dd1f673ce46826b28744 100755
--- a/deploy/tfs.sh
+++ b/deploy/tfs.sh
@@ -153,7 +153,7 @@ kubectl create secret generic crdb-data --namespace ${TFS_K8S_NAMESPACE} --type=
     --from-literal=CRDB_SSLMODE=require
 printf "\n"
 
-echo ">>> Create Secret with Apache Kakfa..."
+echo ">>> Create Secret with Apache Kafka..."
 KFK_SERVER_PORT=$(kubectl --namespace ${KFK_NAMESPACE} get service kafka-service -o 'jsonpath={.spec.ports[0].port}')
 kubectl create secret generic kfk-kpi-data --namespace ${TFS_K8S_NAMESPACE} --type='Opaque' \
     --from-literal=KFK_NAMESPACE=${KFK_NAMESPACE} \
diff --git a/hackfest5/.gitignore b/hackfest5/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..0ba4756f172b9aa58e2deebb9f62243d0b91e006
--- /dev/null
+++ b/hackfest5/.gitignore
@@ -0,0 +1,4 @@
+clab-*/
+*.clab.yml.bak
+*.tar
+*.tar.gz
diff --git a/hackfest5/README.md b/hackfest5/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1906a500583945142300256c55f70b06ec210a72
--- /dev/null
+++ b/hackfest5/README.md
@@ -0,0 +1,187 @@
+# Hackfest 5 - Control an Emulated DataPlane through TeraFlowSDN
+
+
+## Prepare your VM
+```bash
+cd ~/tfs-ctrl
+git checkout feat/hackfest5
+git pull
+```
+
+
+
+## ContainerLab Commands
+
+### Download and install ContainerLab
+```bash
+sudo bash -c "$(curl -sL https://get.containerlab.dev)" -- -v 0.59.0
+```
+
+### Check available images in Docker
+```bash
+docker images | grep -E "ceos|multitool"
+```
+
+### Download hackfest5 cEOS image and create Docker image [already done]
+- Note: Image to be downloaded for free from [Arista](https://www.arista.com/en/login) website.
+```bash
+docker import ~/tfs-ctrl/hackfest5/images/arista/cEOS64-lab-4.31.5M.tar ceos:4.31.5M
+docker import ~/tfs-ctrl/hackfest5/images/arista/cEOS64-lab-4.32.2F.tar ceos:4.32.2F
+```
+
+### Deploy scenario
+```bash
+~/tfs-ctrl/hackfest5/clab-deploy.sh
+```
+
+### Inspect scenario
+```bash
+~/tfs-ctrl/hackfest5/clab-inspect.sh
+```
+
+### Show scenario's topology
+```bash
+~/tfs-ctrl/hackfest5/clab-graph.sh
+```
+
+### Destroy scenario
+```bash
+~/tfs-ctrl/hackfest5/clab-destroy.sh
+```
+
+### Access cEOS CLI
+```bash
+~/tfs-ctrl/hackfest5/clab-cli-r1.sh
+```
+
+### Access DC CLI
+```bash
+~/tfs-ctrl/hackfest5/clab-cli-dc1.sh
+```
+
+### Start pinging remote DC
+```bash
+~/tfs-ctrl/hackfest5/clab-cli-dc1.sh
+    ping 192.168.2.10
+```
+
+
+
+## TeraFlowSDN Commands
+
+### Check status of MicroK8s
+```bash
+microk8s.status --wait-ready
+```
+
+### Start MicroK8s
+```bash
+microk8s.start
+```
+
+### Periodically report status of MicroK8s every second
+```bash
+watch -n 1 microk8s.status --wait-ready
+```
+
+### Periodically report status of workload in MicroK8s every second
+```bash
+watch -n 1 kubectl get all --all-namespaces
+```
+
+### Re-Deploy TeraFlowSDN
+```bash
+~/tfs-ctrl/hackfest5/redeploy-tfs.sh
+```
+
+### Show TeraFlowSDN Deployment status
+```bash
+source ~/tfs-ctrl/hackfest5/deploy_specs.sh
+./deploy/show.sh
+```
+
+### Show log of a TeraFlowSDN component
+```bash
+source ~/tfs-ctrl/hackfest5/deploy_specs.sh
+~/tfs-ctrl/scripts/show_logs_device.sh
+```
+
+
+
+## L3VPN Commands
+
+### Create a new IETF L3VPN through TeraFlowSDN NBI
+```bash
+cd ~/tfs-ctrl/hackfest5/data
+curl -X POST \
+    --header "Content-Type: application/json" \
+    --data @ietf-l3vpn-service.json \
+    --user "admin:admin" \
+    http://127.0.0.1/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services
+```
+
+### Get UUID of a IETF L3VPN through TeraFlowSDN NBI
+```bash
+curl --user "admin:admin" \
+    http://127.0.0.1/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services/vpn-service=ietf-l3vpn-svc/
+```
+
+### Delete a IETF L3VPN through TeraFlowSDN NBI
+```bash
+curl -X DELETE --user "admin:admin" \
+    http://127.0.0.1/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services/vpn-service=ietf-l3vpn-svc/
+```
+
+### Start pinging remote DC
+```bash
+~/tfs-ctrl/hackfest5/clab-cli-dc1.sh
+    ping 192.168.2.10
+```
+
+
+
+
+## gNMIc Commands
+
+### Install gNMIc
+```bash
+sudo bash -c "$(curl -sL https://get-gnmic.kmrd.dev)"
+```
+
+### gNMI Capabilities request
+```bash
+gnmic --address clab-hackfest5-r1 --port 6030 --username admin --password admin --insecure capabilities
+```
+
+### gNMI Get request
+```bash
+gnmic --address clab-hackfest5-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path / > r1.json
+gnmic --address clab-hackfest5-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path /interfaces/interface > r1-ifaces.json
+```
+
+### gNMI Set request
+```bash
+gnmic --address clab-hackfest5-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set --update-path /system/config/hostname --update-value "my-r1"
+gnmic --address clab-hackfest5-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path /system/config/hostname
+```
+
+### Subscribe request
+```bash
+gnmic --address clab-hackfest5-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf subscribe --path /interfaces/interface[name=Management0]/state/
+
+# In another terminal, you can generate traffic opening SSH connection
+ssh admin@clab-hackfest5-r1
+```
+
+### Check configurations done:
+```bash
+gnmic --address clab-hackfest5-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path '/network-instances' > r1-nis.json
+gnmic --address clab-hackfest5-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path '/interfaces' > r1-ifs.json
+```
+
+### Delete elements:
+```bash
+--address clab-hackfest5-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set --delete '/network-instances/network-instance[name=b19229e8]'
+--address clab-hackfest5-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set --delete '/interfaces/interface[name=ethernet-1/1]/subinterfaces/subinterface[index=0]'
+--address clab-hackfest5-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set --delete '/interfaces/interface[name=ethernet-1/2]/subinterfaces/subinterface[index=0]'
+```
diff --git a/hackfest5/clab-cli-dc1.sh b/hackfest5/clab-cli-dc1.sh
new file mode 100755
index 0000000000000000000000000000000000000000..44631fa227462996b2b924e01d32f5d148610e4b
--- /dev/null
+++ b/hackfest5/clab-cli-dc1.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+docker exec -it clab-hackfest5-dc1 bash
diff --git a/hackfest5/clab-cli-dc2.sh b/hackfest5/clab-cli-dc2.sh
new file mode 100755
index 0000000000000000000000000000000000000000..56e1520142f3749069582bd519e1f425bacd3e4f
--- /dev/null
+++ b/hackfest5/clab-cli-dc2.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+docker exec -it clab-hackfest5-dc2 bash
diff --git a/hackfest5/clab-cli-r1.sh b/hackfest5/clab-cli-r1.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f921809bfea80dffbc66b4a35fcbb7e786a90cdd
--- /dev/null
+++ b/hackfest5/clab-cli-r1.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+docker exec -it clab-hackfest5-r1 Cli
diff --git a/hackfest5/clab-cli-r2.sh b/hackfest5/clab-cli-r2.sh
new file mode 100755
index 0000000000000000000000000000000000000000..154179a636981ecd6d7831f7498873eca8d94274
--- /dev/null
+++ b/hackfest5/clab-cli-r2.sh
@@ -0,0 +1,16 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+docker exec -it clab-hackfest5-r2 Cli
diff --git a/hackfest5/clab-deploy.sh b/hackfest5/clab-deploy.sh
new file mode 100755
index 0000000000000000000000000000000000000000..84b4d2c221f1f11cc46efd13818b37b5d0e492d3
--- /dev/null
+++ b/hackfest5/clab-deploy.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+cd ~/tfs-ctrl/hackfest5
+sudo containerlab deploy --topo hackfest5.clab.yml
diff --git a/hackfest5/clab-destroy.sh b/hackfest5/clab-destroy.sh
new file mode 100755
index 0000000000000000000000000000000000000000..dc65a82e7cfd263fc25760b224403e0a31c68188
--- /dev/null
+++ b/hackfest5/clab-destroy.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+cd ~/tfs-ctrl/hackfest5
+sudo containerlab destroy --topo hackfest5.clab.yml
+sudo rm -rf clab-hackfest5/ .hackfest5.clab.yml.bak
diff --git a/hackfest5/clab-graph.sh b/hackfest5/clab-graph.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f0ad9693296970dbafab9abaa1f41af2c5ee5f4e
--- /dev/null
+++ b/hackfest5/clab-graph.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+cd ~/tfs-ctrl/hackfest5
+sudo containerlab graph --topo hackfest5.clab.yml
diff --git a/hackfest5/clab-inspect.sh b/hackfest5/clab-inspect.sh
new file mode 100755
index 0000000000000000000000000000000000000000..5e1fc7a623796c1c427abaae334352c38d98addb
--- /dev/null
+++ b/hackfest5/clab-inspect.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+cd ~/tfs-ctrl/hackfest5
+sudo containerlab inspect --topo hackfest5.clab.yml
diff --git a/hackfest5/data/ietf-l3vpn-service.json b/hackfest5/data/ietf-l3vpn-service.json
new file mode 100644
index 0000000000000000000000000000000000000000..9eb70db5465af56e9877eecf664da0aa7d1313ba
--- /dev/null
+++ b/hackfest5/data/ietf-l3vpn-service.json
@@ -0,0 +1,83 @@
+{
+    "ietf-l3vpn-svc:l3vpn-svc": {
+        "vpn-services": {"vpn-service": [{"vpn-id": "ietf-l3vpn-svc"}]},
+        "sites": {
+            "site": [
+                {
+                    "site-id": "site_DC1",
+                    "management": {"type": "ietf-l3vpn-svc:provider-managed"},
+                    "locations": {"location": [{"location-id": "DC1"}]},
+                    "devices": {"device": [{"device-id": "dc1", "location": "DC1"}]},
+                    "site-network-accesses": {
+                        "site-network-access": [
+                            {
+                                "site-network-access-id": "eth1",
+                                "site-network-access-type": "ietf-l3vpn-svc:multipoint",
+                                "device-reference": "dc1",
+                                "vpn-attachment": {"vpn-id": "ietf-l3vpn-svc", "site-role": "ietf-l3vpn-svc:spoke-role"},
+                                "ip-connection": {
+                                    "ipv4": {
+                                        "address-allocation-type": "ietf-l3vpn-svc:static-address",
+                                        "addresses": {
+                                            "provider-address": "192.168.1.1",
+                                            "customer-address": "192.168.1.10",
+                                            "prefix-length": 24
+                                        }
+                                    }
+                                },
+                                "service": {
+                                    "svc-mtu": 1500,
+                                    "svc-input-bandwidth": 1000000000,
+                                    "svc-output-bandwidth": 1000000000,
+                                    "qos": {"qos-profile": {"classes": {"class": [{
+                                        "class-id": "qos-realtime",
+                                        "direction": "ietf-l3vpn-svc:both",
+                                        "latency": {"latency-boundary": 10},
+                                        "bandwidth": {"guaranteed-bw-percent": 100}
+                                    }]}}}
+                                }
+                            }
+                        ]
+                    }
+                },
+                {
+                    "site-id": "site_DC2",
+                    "management": {"type": "ietf-l3vpn-svc:provider-managed"},
+                    "locations": {"location": [{"location-id": "DC2"}]},
+                    "devices": {"device": [{"device-id": "dc2", "location": "DC2"}]},
+                    "site-network-accesses": {
+                        "site-network-access": [
+                            {
+                                "site-network-access-id": "eth1",
+                                "site-network-access-type": "ietf-l3vpn-svc:multipoint",
+                                "device-reference": "dc2",
+                                "vpn-attachment": {"vpn-id": "ietf-l3vpn-svc", "site-role": "ietf-l3vpn-svc:hub-role"},
+                                "ip-connection": {
+                                    "ipv4": {
+                                        "address-allocation-type": "ietf-l3vpn-svc:static-address",
+                                        "addresses": {
+                                            "provider-address": "192.168.2.1",
+                                            "customer-address": "192.168.2.10",
+                                            "prefix-length": 24
+                                        }
+                                    }
+                                },
+                                "service": {
+                                    "svc-mtu": 1500,
+                                    "svc-input-bandwidth": 1000000000,
+                                    "svc-output-bandwidth": 1000000000,
+                                    "qos": {"qos-profile": {"classes": {"class": [{
+                                        "class-id": "qos-realtime",
+                                        "direction": "ietf-l3vpn-svc:both",
+                                        "latency": {"latency-boundary": 10},
+                                        "bandwidth": {"guaranteed-bw-percent": 100}
+                                    }]}}}
+                                }
+                            }
+                        ]
+                    }
+                }
+            ]
+        }
+    }
+}
diff --git a/hackfest5/data/tfs-service.json b/hackfest5/data/tfs-service.json
new file mode 100644
index 0000000000000000000000000000000000000000..397fc84789111932da047acd22c7bc787888657f
--- /dev/null
+++ b/hackfest5/data/tfs-service.json
@@ -0,0 +1,26 @@
+{
+    "services": [
+        {
+            "service_id": {
+                "context_id": {"context_uuid": {"uuid": "admin"}}, "service_uuid": {"uuid": "tfs-l3vpn-svc"}
+            },
+            "service_type": "SERVICETYPE_L3NM",
+            "service_status": {"service_status": "SERVICESTATUS_PLANNED"},
+            "service_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "dc1"}}, "endpoint_uuid": {"uuid": "int"}},
+                {"device_id": {"device_uuid": {"uuid": "dc2"}}, "endpoint_uuid": {"uuid": "int"}}
+            ],
+            "service_constraints": [],
+            "service_config": {"config_rules": [
+                {"action": "CONFIGACTION_SET", "custom": {
+                    "resource_key": "/device[dc1]/endpoint[eth1]/settings",
+                    "resource_value": {"address_ip": "192.168.1.10", "address_prefix": 24, "index": 0}
+                }},
+                {"action": "CONFIGACTION_SET", "custom": {
+                    "resource_key": "/device[dc2]/endpoint[eth1]/settings",
+                    "resource_value": {"address_ip": "192.168.2.10", "address_prefix": 24, "index": 0}
+                }}
+            ]}
+        }
+    ]
+}
diff --git a/hackfest5/data/tfs-topology.json b/hackfest5/data/tfs-topology.json
new file mode 100644
index 0000000000000000000000000000000000000000..49df9de4244651d1eb08c24ca3fcbb53d41d2e34
--- /dev/null
+++ b/hackfest5/data/tfs-topology.json
@@ -0,0 +1,100 @@
+{
+    "contexts": [
+        {"context_id": {"context_uuid": {"uuid": "admin"}}}
+    ],
+    "topologies": [
+        {"topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}}}
+    ],
+    "devices": [
+        {
+            "device_id": {"device_uuid": {"uuid": "dc1"}}, "device_type": "emu-datacenter",
+            "device_drivers": ["DEVICEDRIVER_UNDEFINED"],
+            "device_config": {"config_rules": [
+                {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"uuid": "eth1", "type": "copper"}, {"uuid": "int", "type": "copper"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "dc2"}}, "device_type": "emu-datacenter",
+            "device_drivers": ["DEVICEDRIVER_UNDEFINED"],
+            "device_config": {"config_rules": [
+                {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/port", "resource_value": "0"}},
+                {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/settings", "resource_value": {"endpoints": [
+                    {"uuid": "eth1", "type": "copper"}, {"uuid": "int", "type": "copper"}
+                ]}}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "r1"}}, "device_type": "packet-router",
+            "device_drivers": ["DEVICEDRIVER_GNMI_OPENCONFIG"],
+            "device_config": {"config_rules": [
+                {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/address", "resource_value": "172.20.20.101"}},
+                {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/port", "resource_value": "6030"}},
+                {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "admin", "password": "admin", "use_tls": false
+                }}}
+            ]}
+        },
+        {
+            "device_id": {"device_uuid": {"uuid": "r2"}}, "device_type": "packet-router",
+            "device_drivers": ["DEVICEDRIVER_GNMI_OPENCONFIG"],
+            "device_config": {"config_rules": [
+                {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/address", "resource_value": "172.20.20.102"}},
+                {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/port", "resource_value": "6030"}},
+                {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "username": "admin", "password": "admin", "use_tls": false
+                }}}
+            ]}
+        }
+    ],
+    "links": [
+        {
+            "link_id": {"link_uuid": {"uuid": "r1/Ethernet2==r2/Ethernet1"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "r1"}}, "endpoint_uuid": {"uuid": "Ethernet2"}},
+                {"device_id": {"device_uuid": {"uuid": "r2"}}, "endpoint_uuid": {"uuid": "Ethernet1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "r2/Ethernet1==r1/Ethernet2"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "r2"}}, "endpoint_uuid": {"uuid": "Ethernet1"}},
+                {"device_id": {"device_uuid": {"uuid": "r1"}}, "endpoint_uuid": {"uuid": "Ethernet2"}}
+            ]
+        },
+
+        {
+            "link_id": {"link_uuid": {"uuid": "r1/Ethernet10==dc1/eth1"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "r1"}}, "endpoint_uuid": {"uuid": "Ethernet10"}},
+                {"device_id": {"device_uuid": {"uuid": "dc1"}}, "endpoint_uuid": {"uuid": "eth1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "dc1/eth1==r1/Ethernet10"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "dc1"}}, "endpoint_uuid": {"uuid": "eth1"}},
+                {"device_id": {"device_uuid": {"uuid": "r1"}}, "endpoint_uuid": {"uuid": "Ethernet10"}}
+            ]
+        },
+
+        {
+            "link_id": {"link_uuid": {"uuid": "r2/Ethernet10==dc2/eth1"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "r2"}}, "endpoint_uuid": {"uuid": "Ethernet10"}},
+                {"device_id": {"device_uuid": {"uuid": "dc2"}}, "endpoint_uuid": {"uuid": "eth1"}}
+            ]
+        },
+        {
+            "link_id": {"link_uuid": {"uuid": "dc2/eth1==r2/Ethernet10"}},
+            "link_endpoint_ids": [
+                {"device_id": {"device_uuid": {"uuid": "dc2"}}, "endpoint_uuid": {"uuid": "eth1"}},
+                {"device_id": {"device_uuid": {"uuid": "r2"}}, "endpoint_uuid": {"uuid": "Ethernet10"}}
+            ]
+        }
+    ]
+}
diff --git a/hackfest5/deploy_specs.sh b/hackfest5/deploy_specs.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e9565218a725fbd416ac9fd2e7a9ca432ef20a96
--- /dev/null
+++ b/hackfest5/deploy_specs.sh
@@ -0,0 +1,208 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+
+# ----- TeraFlowSDN ------------------------------------------------------------
+
+# Set the URL of the internal MicroK8s Docker registry where the images will be uploaded to.
+export TFS_REGISTRY_IMAGES="http://localhost:32000/tfs/"
+
+# Set the list of components, separated by spaces, you want to build images for, and deploy.
+#export TFS_COMPONENTS="context device pathcomp service slice nbi webui load_generator"
+export TFS_COMPONENTS="context device pathcomp service nbi webui"
+
+# Uncomment to activate Monitoring (old)
+export TFS_COMPONENTS="${TFS_COMPONENTS} monitoring"
+
+# Uncomment to activate Monitoring Framework (new)
+#export TFS_COMPONENTS="${TFS_COMPONENTS} kpi_manager kpi_value_writer kpi_value_api telemetry analytics automation"
+
+# Uncomment to activate QoS Profiles
+#export TFS_COMPONENTS="${TFS_COMPONENTS} qos_profile"
+
+# Uncomment to activate BGP-LS Speaker
+#export TFS_COMPONENTS="${TFS_COMPONENTS} bgpls_speaker"
+
+# Uncomment to activate Optical Controller
+#   To manage optical connections, "service" requires "opticalcontroller" to be deployed
+#   before "service", thus we "hack" the TFS_COMPONENTS environment variable prepending the
+#   "opticalcontroller" only if "service" is already in TFS_COMPONENTS, and re-export it.
+#if [[ "$TFS_COMPONENTS" == *"service"* ]]; then
+#    BEFORE="${TFS_COMPONENTS% service*}"
+#    AFTER="${TFS_COMPONENTS#* service}"
+#    export TFS_COMPONENTS="${BEFORE} opticalcontroller service ${AFTER}"
+#fi
+
+# Uncomment to activate ZTP
+#export TFS_COMPONENTS="${TFS_COMPONENTS} ztp"
+
+# Uncomment to activate Policy Manager
+#export TFS_COMPONENTS="${TFS_COMPONENTS} policy"
+
+# Uncomment to activate Optical CyberSecurity
+#export TFS_COMPONENTS="${TFS_COMPONENTS} dbscanserving opticalattackmitigator opticalattackdetector opticalattackmanager"
+
+# Uncomment to activate L3 CyberSecurity
+#export TFS_COMPONENTS="${TFS_COMPONENTS} l3_attackmitigator l3_centralizedattackdetector"
+
+# Uncomment to activate TE
+#export TFS_COMPONENTS="${TFS_COMPONENTS} te"
+
+# Uncomment to activate Forecaster
+#export TFS_COMPONENTS="${TFS_COMPONENTS} forecaster"
+
+# Uncomment to activate E2E Orchestrator
+#export TFS_COMPONENTS="${TFS_COMPONENTS} e2e_orchestrator"
+
+# Uncomment to activate DLT and Interdomain
+#export TFS_COMPONENTS="${TFS_COMPONENTS} interdomain dlt"
+#if [[ "$TFS_COMPONENTS" == *"dlt"* ]]; then
+#    export KEY_DIRECTORY_PATH="src/dlt/gateway/keys/priv_sk"
+#    export CERT_DIRECTORY_PATH="src/dlt/gateway/keys/cert.pem"
+#    export TLS_CERT_PATH="src/dlt/gateway/keys/ca.crt"
+#fi
+
+# Uncomment to activate QKD App
+#   To manage QKD Apps, "service" requires "qkd_app" to be deployed
+#   before "service", thus we "hack" the TFS_COMPONENTS environment variable prepending the
+#   "qkd_app" only if "service" is already in TFS_COMPONENTS, and re-export it.
+#if [[ "$TFS_COMPONENTS" == *"service"* ]]; then
+#    BEFORE="${TFS_COMPONENTS% service*}"
+#    AFTER="${TFS_COMPONENTS#* service}"
+#    export TFS_COMPONENTS="${BEFORE} qkd_app service ${AFTER}"
+#fi
+
+
+# Set the tag you want to use for your images.
+export TFS_IMAGE_TAG="dev"
+
+# Set the name of the Kubernetes namespace to deploy TFS to.
+export TFS_K8S_NAMESPACE="tfs"
+
+# Set additional manifest files to be applied after the deployment
+export TFS_EXTRA_MANIFESTS="manifests/nginx_ingress_http.yaml"
+
+# Uncomment to monitor performance of components
+#export TFS_EXTRA_MANIFESTS="${TFS_EXTRA_MANIFESTS} manifests/servicemonitors.yaml"
+
+# Uncomment when deploying Optical CyberSecurity
+#export TFS_EXTRA_MANIFESTS="${TFS_EXTRA_MANIFESTS} manifests/cachingservice.yaml"
+
+# Set the new Grafana admin password
+export TFS_GRAFANA_PASSWORD="admin123+"
+
+# Disable skip-build flag to rebuild the Docker images.
+export TFS_SKIP_BUILD=""
+
+
+# ----- CockroachDB ------------------------------------------------------------
+
+# Set the namespace where CockroackDB will be deployed.
+export CRDB_NAMESPACE="crdb"
+
+# Set the external port CockroackDB Postgre SQL interface will be exposed to.
+export CRDB_EXT_PORT_SQL="26257"
+
+# Set the external port CockroackDB HTTP Mgmt GUI interface will be exposed to.
+export CRDB_EXT_PORT_HTTP="8081"
+
+# Set the database username to be used by Context.
+export CRDB_USERNAME="tfs"
+
+# Set the database user's password to be used by Context.
+export CRDB_PASSWORD="tfs123"
+
+# Set CockroachDB installation mode to 'single'. This option is convenient for development and testing.
+# See ./deploy/all.sh or ./deploy/crdb.sh for additional details
+export CRDB_DEPLOY_MODE="single"
+
+# Disable flag for dropping database, if it exists.
+export CRDB_DROP_DATABASE_IF_EXISTS="YES"
+
+# Disable flag for re-deploying CockroachDB from scratch.
+export CRDB_REDEPLOY=""
+
+
+# ----- NATS -------------------------------------------------------------------
+
+# Set the namespace where NATS will be deployed.
+export NATS_NAMESPACE="nats"
+
+# Set the external port NATS Client interface will be exposed to.
+export NATS_EXT_PORT_CLIENT="4222"
+
+# Set the external port NATS HTTP Mgmt GUI interface will be exposed to.
+export NATS_EXT_PORT_HTTP="8222"
+
+# Set NATS installation mode to 'single'. This option is convenient for development and testing.
+# See ./deploy/all.sh or ./deploy/nats.sh for additional details
+export NATS_DEPLOY_MODE="single"
+
+# Disable flag for re-deploying NATS from scratch.
+export NATS_REDEPLOY=""
+
+
+# ----- QuestDB ----------------------------------------------------------------
+
+# Set the namespace where QuestDB will be deployed.
+export QDB_NAMESPACE="qdb"
+
+# Set the external port QuestDB Postgre SQL interface will be exposed to.
+export QDB_EXT_PORT_SQL="8812"
+
+# Set the external port QuestDB Influx Line Protocol interface will be exposed to.
+export QDB_EXT_PORT_ILP="9009"
+
+# Set the external port QuestDB HTTP Mgmt GUI interface will be exposed to.
+export QDB_EXT_PORT_HTTP="9000"
+
+# Set the database username to be used for QuestDB.
+export QDB_USERNAME="admin"
+
+# Set the database user's password to be used for QuestDB.
+export QDB_PASSWORD="quest"
+
+# Set the table name to be used by Monitoring for KPIs.
+export QDB_TABLE_MONITORING_KPIS="tfs_monitoring_kpis"
+
+# Set the table name to be used by Slice for plotting groups.
+export QDB_TABLE_SLICE_GROUPS="tfs_slice_groups"
+
+# Disable flag for dropping tables if they exist.
+export QDB_DROP_TABLES_IF_EXIST="YES"
+
+# Disable flag for re-deploying QuestDB from scratch.
+export QDB_REDEPLOY=""
+
+
+# ----- K8s Observability ------------------------------------------------------
+
+# Set the external port Prometheus Mgmt HTTP GUI interface will be exposed to.
+export PROM_EXT_PORT_HTTP="9090"
+
+# Set the external port Grafana HTTP Dashboards will be exposed to.
+export GRAF_EXT_PORT_HTTP="3000"
+
+
+# ----- Apache Kafka -----------------------------------------------------------
+
+# Set the namespace where Apache Kafka will be deployed.
+#export KFK_NAMESPACE="kafka"
+
+# Set the port Apache Kafka server will be exposed to.
+#export KFK_SERVER_PORT="9092"
+
+# Set the flag to YES for redeploying of Apache Kafka
+#export KFK_REDEPLOY=""
diff --git a/hackfest5/hackfest5.clab.yml b/hackfest5/hackfest5.clab.yml
new file mode 100644
index 0000000000000000000000000000000000000000..acc58e9d01c245108e85ca786427eeac5442203f
--- /dev/null
+++ b/hackfest5/hackfest5.clab.yml
@@ -0,0 +1,67 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+# TFS - Arista devices + Linux clients
+
+name: hackfest5
+
+mgmt:
+  network: mgmt-net
+  ipv4-subnet: 172.20.20.0/24
+
+topology:
+  kinds:
+    arista_ceos:
+      kind: arista_ceos
+      #image: ceos:4.30.4M
+      #image: ceos:4.31.2F
+      image: ceos:4.31.5M
+      #image: ceos:4.32.0F
+      #image: ceos:4.32.2F
+      #image: ceos:4.32.2.1F
+    linux:
+      kind: linux
+      image: ghcr.io/hellt/network-multitool:latest
+
+  nodes:
+    r1:
+      kind: arista_ceos
+      mgmt-ipv4: 172.20.20.101
+      startup-config: r1-startup.cfg
+
+    r2:
+      kind: arista_ceos
+      mgmt-ipv4: 172.20.20.102
+      startup-config: r2-startup.cfg
+
+    dc1:
+      kind: linux
+      mgmt-ipv4: 172.20.20.201
+      exec:
+        - ip link set address 00:c1:ab:00:01:01 dev eth1
+        - ip address add 192.168.1.10/24 dev eth1
+        - ip route add 192.168.2.0/24 via 192.168.1.1
+
+    dc2:
+      kind: linux
+      mgmt-ipv4: 172.20.20.202
+      exec:
+        - ip link set address 00:c1:ab:00:02:01 dev eth1
+        - ip address add 192.168.2.10/24 dev eth1
+        - ip route add 192.168.1.0/24 via 192.168.2.1
+
+  links:
+    - endpoints: ["r1:eth2", "r2:eth1"]
+    - endpoints: ["r1:eth10", "dc1:eth1"]
+    - endpoints: ["r2:eth10", "dc2:eth1"]
diff --git a/hackfest5/images/arista/.gitignore b/hackfest5/images/arista/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..284b64ce5902e2c74c656fb0c7256bc11a59575d
--- /dev/null
+++ b/hackfest5/images/arista/.gitignore
@@ -0,0 +1,3 @@
+!.gitkeep
+*.tar
+*.tar.gz
diff --git a/hackfest5/images/arista/.gitkeep b/hackfest5/images/arista/.gitkeep
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/hackfest5/r1-startup.cfg b/hackfest5/r1-startup.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..2d1964f5f6505411674890acafeb05e574f49aa5
--- /dev/null
+++ b/hackfest5/r1-startup.cfg
@@ -0,0 +1,39 @@
+! device: r1 (cEOSLab, EOS-4.31.2F-35442176.4312F (engineering build))
+!
+no aaa root
+!
+username admin privilege 15 role network-admin secret sha512 $6$tUMBMqI5iPca5XcJ$5QU/R83S.zjpHQyeB3H63BGWOgxewjqZ1NsxdaWPo3gLwRXVTrgYvMmwwZlzjYoqrD7yp7e9YD073/.FKLYEY1
+!
+transceiver qsfp default-mode 4x10G
+!
+service routing protocols model multi-agent
+!
+hostname r1
+!
+spanning-tree mode mstp
+!
+system l1
+   unsupported speed action error
+   unsupported error-correction action error
+!
+management api http-commands
+   no shutdown
+!
+management api gnmi
+   transport grpc default
+!
+management api netconf
+   transport ssh default
+!
+interface Ethernet2
+!
+interface Ethernet10
+!
+interface Management0
+   ip address 172.20.20.101/24
+!
+ip routing
+!
+ip route 0.0.0.0/0 172.20.20.1
+!
+end
diff --git a/hackfest5/r2-startup.cfg b/hackfest5/r2-startup.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..7acd56bf64ebc45a437b438f1b13c4aa4182b794
--- /dev/null
+++ b/hackfest5/r2-startup.cfg
@@ -0,0 +1,39 @@
+! device: r2 (cEOSLab, EOS-4.31.2F-35442176.4312F (engineering build))
+!
+no aaa root
+!
+username admin privilege 15 role network-admin secret sha512 $6$Z/om4jI3S5BmwxfB$igaSOaJnh3m36TbSMHKCusA77m07CU8JJxalupXIUFuy7HaGt6k.C1kfSJsPqjn1AhLaL.LvLkt/hcqTFgpjG.
+!
+transceiver qsfp default-mode 4x10G
+!
+service routing protocols model multi-agent
+!
+hostname r2
+!
+spanning-tree mode mstp
+!
+system l1
+   unsupported speed action error
+   unsupported error-correction action error
+!
+management api http-commands
+   no shutdown
+!
+management api gnmi
+   transport grpc default
+!
+management api netconf
+   transport ssh default
+!
+interface Ethernet1
+!
+interface Ethernet10
+!
+interface Management0
+   ip address 172.20.20.102/24
+!
+ip routing
+!
+ip route 0.0.0.0/0 172.20.20.1
+!
+end
diff --git a/hackfest5/redeploy-tfs.sh b/hackfest5/redeploy-tfs.sh
new file mode 100755
index 0000000000000000000000000000000000000000..ff55bed3f55e355293e842b2f92c5547715cb247
--- /dev/null
+++ b/hackfest5/redeploy-tfs.sh
@@ -0,0 +1,52 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+source ~/tfs-ctrl/hackfest5/deploy_specs.sh
+
+echo "Cleaning-up old NATS and Kafka deployments..."
+helm3 uninstall --namespace ${NATS_NAMESPACE} ${NATS_NAMESPACE}
+kubectl delete namespace ${NATS_NAMESPACE} --ignore-not-found
+kubectl delete namespace kafka --ignore-not-found
+printf "\n"
+
+echo "Deployting TeraFlowSDN..."
+
+# Deploy CockroachDB
+./deploy/crdb.sh
+
+# Deploy NATS
+./deploy/nats.sh
+
+# Deploy QuestDB
+./deploy/qdb.sh
+
+# Expose Dashboard
+./deploy/expose_dashboard.sh
+
+# Deploy TeraFlowSDN
+./deploy/tfs.sh
+
+# Show deploy summary
+./deploy/show.sh
+
+printf "\n"
+
+echo "Waiting for Context to be subscribed to NATS..."
+while ! kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server 2>&1 | grep -q 'Subscriber is Ready? True'; do
+    printf "%c" "."
+    sleep 1
+done
+kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server
+printf "\n"
diff --git a/manifests/servicemonitors.yaml b/manifests/servicemonitors.yaml
index d486ca971e63cf9ccc20a435d49c39e530fb438f..fa6aed0f927efa21d55ff65b18b401070e411bf4 100644
--- a/manifests/servicemonitors.yaml
+++ b/manifests/servicemonitors.yaml
@@ -575,9 +575,9 @@ apiVersion: monitoring.coreos.com/v1
 kind: ServiceMonitor
 metadata:
   namespace: monitoring # namespace where prometheus is running
-  name: tfs-kpi_value_apiservice-metric
+  name: tfs-kpi-value-apiservice-metric
   labels:
-    app: kpi_value_apiservice
+    app: kpi-value-apiservice
     #release: prometheus
     #release: prom  # name of the release
     # ( VERY IMPORTANT: You need to know the correct release name by viewing
@@ -588,7 +588,7 @@ spec:
     matchLabels:
       # Target app service
       #namespace: tfs
-      app: kpi_value_apiservice # same as above
+      app: kpi-value-apiservice # same as above
       #release: prometheus # same as above
   endpoints:
     - port: metrics # named port in target app
@@ -604,9 +604,9 @@ apiVersion: monitoring.coreos.com/v1
 kind: ServiceMonitor
 metadata:
   namespace: monitoring # namespace where prometheus is running
-  name: tfs-kpi_value_writerservice-metric
+  name: tfs-kpi-value-writerservice-metric
   labels:
-    app: kpi_value_writerservice
+    app: kpi-value-writerservice
     #release: prometheus
     #release: prom  # name of the release
     # ( VERY IMPORTANT: You need to know the correct release name by viewing
@@ -617,7 +617,7 @@ spec:
     matchLabels:
       # Target app service
       #namespace: tfs
-      app: kpi_value_writerservice # same as above
+      app: kpi-value-writerservice # same as above
       #release: prometheus # same as above
   endpoints:
     - port: metrics # named port in target app
diff --git a/manifests/webuiservice.yaml b/manifests/webuiservice.yaml
index 4d3b7780c4cfd82a87f89baee57633503d30b92d..5a321c33e33e83b5eb67b9bacf8b9ce8f1edf304 100644
--- a/manifests/webuiservice.yaml
+++ b/manifests/webuiservice.yaml
@@ -12,6 +12,17 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+apiVersion: v1
+kind: PersistentVolumeClaim
+metadata:
+  name: grafana-pvc
+spec:
+  accessModes:
+    - ReadWriteOnce
+  resources:
+    requests:
+      storage: 1Gi
+---
 apiVersion: apps/v1
 kind: Deployment
 metadata:
@@ -99,6 +110,13 @@ spec:
             limits:
               cpu: 500m
               memory: 1024Mi
+          volumeMounts:
+            - mountPath: /var/lib/grafana
+              name: grafana-pv
+      volumes:
+        - name: grafana-pv
+          persistentVolumeClaim:
+            claimName: grafana-pvc
 ---
 apiVersion: v1
 kind: Service
diff --git a/proto/context.proto b/proto/context.proto
index 9f06d32ee04b5102ce2af511f45f8de34f984599..4d61572df1db6c95b64e9ce1cbfdd9e0db111078 100644
--- a/proto/context.proto
+++ b/proto/context.proto
@@ -258,6 +258,14 @@ message LinkId {
   Uuid link_uuid = 1;
 }
 
+enum LinkTypeEnum {
+  LINKTYPE_UNKNOWN = 0;
+  LINKTYPE_COPPER  = 1;
+  LINKTYPE_FIBER   = 2;
+  LINKTYPE_RADIO   = 3;
+  LINKTYPE_VIRTUAL = 4;
+}
+
 message LinkAttributes {
   float total_capacity_gbps = 1;
   float used_capacity_gbps  = 2;
@@ -266,9 +274,9 @@ message LinkAttributes {
 message Link {
   LinkId link_id = 1;
   string name = 2;
-  repeated EndPointId link_endpoint_ids = 3;
-  LinkAttributes attributes = 4;
-  LinkTypeEnum link_type = 5;
+  LinkTypeEnum link_type = 3;
+  repeated EndPointId link_endpoint_ids = 4;
+  LinkAttributes attributes = 5;
 }
 
 message LinkIdList {
@@ -284,14 +292,6 @@ message LinkEvent {
   LinkId link_id = 2;
 }
 
-enum LinkTypeEnum {
-  LINKTYPE_UNKNOWN = 0;
-  LINKTYPE_COPPER = 1;
-  LINKTYPE_VIRTUAL_COPPER = 2;
-  LINKTYPE_OPTICAL = 3;
-  LINKTYPE_VIRTUAL_OPTICAL = 4;
-}
-
 // ----- Service -------------------------------------------------------------------------------------------------------
 message ServiceId {
   ContextId context_id = 1;
diff --git a/proto/kpi_sample_types.proto b/proto/kpi_sample_types.proto
index 0a9800d9e5839205e1e45f84e4c8bdafbe93f32f..d4efc084e5f1ea2376e71ef6a15bc9b972c5ac1d 100644
--- a/proto/kpi_sample_types.proto
+++ b/proto/kpi_sample_types.proto
@@ -39,4 +39,14 @@ enum KpiSampleType {
     KPISAMPLETYPE_L3_SECURITY_STATUS_CRYPTO     = 605;
 
     KPISAMPLETYPE_SERVICE_LATENCY_MS            = 701;
+
+// output KPIs
+    KPISAMPLETYPE_PACKETS_TRANSMITTED_AGG_OUTPUT           = 1101;
+    KPISAMPLETYPE_PACKETS_RECEIVED_AGG_OUTPUT              = 1102;
+    KPISAMPLETYPE_PACKETS_DROPPED_AGG_OUTPUT               = 1103;
+    KPISAMPLETYPE_BYTES_TRANSMITTED_AGG_OUTPUT             = 1201;
+    KPISAMPLETYPE_BYTES_RECEIVED_AGG_OUTPUT                = 1202;
+    KPISAMPLETYPE_BYTES_DROPPED_AGG_OUTPUT                 = 1203;
+
+    KPISAMPLETYPE_SERVICE_LATENCY_MS_AGG_OUTPUT            = 1701;
 }
diff --git a/scripts/grpcurl_inspect_context.sh b/scripts/grpcurl_inspect_context.sh
new file mode 100755
index 0000000000000000000000000000000000000000..dda920a7a1899a9d8cdc3e1d1c7c576463c66fed
--- /dev/null
+++ b/scripts/grpcurl_inspect_context.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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 your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+# Ref: https://github.com/fullstorydev/grpcurl
+
+source tfs_runtime_env_vars.sh
+
+GRPC_ENDPOINT="$CONTEXTSERVICE_SERVICE_HOST:$CONTEXTSERVICE_SERVICE_PORT_GRPC"
+GRP_CURL_CMD="docker run fullstorydev/grpcurl --plaintext $GRPC_ENDPOINT"
+
+GRPC_SERVICES=`$GRP_CURL_CMD list`
+echo "gRPC Services found in $GRPC_ENDPOINT:"
+printf "\n"
+
+for GRPC_SERVICE in $GRPC_SERVICES; do
+    echo "gRPC Service: $GRPC_SERVICE"
+    $GRP_CURL_CMD describe $GRPC_SERVICE
+    printf "\n"
+done
+
+echo "Done!"
diff --git a/scripts/grpcurl_inspect_device.sh b/scripts/grpcurl_inspect_device.sh
new file mode 100755
index 0000000000000000000000000000000000000000..0e1202fb6ed3b0306f3dfe03cd60eeb55c7abe83
--- /dev/null
+++ b/scripts/grpcurl_inspect_device.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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 your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+# Ref: https://github.com/fullstorydev/grpcurl
+
+source tfs_runtime_env_vars.sh
+
+GRPC_ENDPOINT="$DEVICESERVICE_SERVICE_HOST:$DEVICESERVICE_SERVICE_PORT_GRPC"
+GRP_CURL_CMD="docker run fullstorydev/grpcurl --plaintext $GRPC_ENDPOINT"
+
+GRPC_SERVICES=`$GRP_CURL_CMD list`
+echo "gRPC Services found in $GRPC_ENDPOINT:"
+printf "\n"
+
+for GRPC_SERVICE in $GRPC_SERVICES; do
+    echo "gRPC Service: $GRPC_SERVICE"
+    $GRP_CURL_CMD describe $GRPC_SERVICE
+    printf "\n"
+done
+
+echo "Done!"
diff --git a/scripts/grpcurl_inspect_pathcomp_frontend.sh b/scripts/grpcurl_inspect_pathcomp_frontend.sh
new file mode 100755
index 0000000000000000000000000000000000000000..686f7ae1e46aed2c60a33cd7fc7265ff1b5a3762
--- /dev/null
+++ b/scripts/grpcurl_inspect_pathcomp_frontend.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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 your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+# Ref: https://github.com/fullstorydev/grpcurl
+
+source tfs_runtime_env_vars.sh
+
+GRPC_ENDPOINT="$PATHCOMPSERVICE_SERVICE_HOST:$PATHCOMPSERVICE_SERVICE_PORT_GRPC"
+GRP_CURL_CMD="docker run fullstorydev/grpcurl --plaintext $GRPC_ENDPOINT"
+
+GRPC_SERVICES=`$GRP_CURL_CMD list`
+echo "gRPC Services found in $GRPC_ENDPOINT:"
+printf "\n"
+
+for GRPC_SERVICE in $GRPC_SERVICES; do
+    echo "gRPC Service: $GRPC_SERVICE"
+    $GRP_CURL_CMD describe $GRPC_SERVICE
+    printf "\n"
+done
+
+echo "Done!"
diff --git a/scripts/grpcurl_inspect_service.sh b/scripts/grpcurl_inspect_service.sh
new file mode 100755
index 0000000000000000000000000000000000000000..f1b674ee5aa8d7f0a1878840cc1f674d61b51ea5
--- /dev/null
+++ b/scripts/grpcurl_inspect_service.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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 your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+# Ref: https://github.com/fullstorydev/grpcurl
+
+source tfs_runtime_env_vars.sh
+
+GRPC_ENDPOINT="$SERVICESERVICE_SERVICE_HOST:$SERVICESERVICE_SERVICE_PORT_GRPC"
+GRP_CURL_CMD="docker run fullstorydev/grpcurl --plaintext $GRPC_ENDPOINT"
+
+GRPC_SERVICES=`$GRP_CURL_CMD list`
+echo "gRPC Services found in $GRPC_ENDPOINT:"
+printf "\n"
+
+for GRPC_SERVICE in $GRPC_SERVICES; do
+    echo "gRPC Service: $GRPC_SERVICE"
+    $GRP_CURL_CMD describe $GRPC_SERVICE
+    printf "\n"
+done
+
+echo "Done!"
diff --git a/scripts/grpcurl_inspect_slice.sh b/scripts/grpcurl_inspect_slice.sh
new file mode 100755
index 0000000000000000000000000000000000000000..170be7bf567c5f7adb0d84db62416ecc0d512f21
--- /dev/null
+++ b/scripts/grpcurl_inspect_slice.sh
@@ -0,0 +1,44 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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 your deployment settings here
+########################################################################################################################
+
+# If not already set, set the name of the Kubernetes namespace to deploy to.
+export TFS_K8S_NAMESPACE=${TFS_K8S_NAMESPACE:-"tfs"}
+
+########################################################################################################################
+# Automated steps start here
+########################################################################################################################
+
+# Ref: https://github.com/fullstorydev/grpcurl
+
+source tfs_runtime_env_vars.sh
+
+GRPC_ENDPOINT="$SLICESERVICE_SERVICE_HOST:$SLICESERVICE_SERVICE_PORT_GRPC"
+GRP_CURL_CMD="docker run fullstorydev/grpcurl --plaintext $GRPC_ENDPOINT"
+
+GRPC_SERVICES=`$GRP_CURL_CMD list`
+echo "gRPC Services found in $GRPC_ENDPOINT:"
+printf "\n"
+
+for GRPC_SERVICE in $GRPC_SERVICES; do
+    echo "gRPC Service: $GRPC_SERVICE"
+    $GRP_CURL_CMD describe $GRPC_SERVICE
+    printf "\n"
+done
+
+echo "Done!"
diff --git a/scripts/run_tests_locally-analytics-backend.sh b/scripts/run_tests_locally-analytics-backend.sh
index 1c3386c62084bb42d6ffa2e1349b6f4286820a52..700155a42714bd05069c7c62db9ada09b4125355 100755
--- a/scripts/run_tests_locally-analytics-backend.sh
+++ b/scripts/run_tests_locally-analytics-backend.sh
@@ -18,8 +18,11 @@ PROJECTDIR=`pwd`
 
 cd $PROJECTDIR/src
 RCFILE=$PROJECTDIR/coverage/.coveragerc
+
 export KFK_SERVER_ADDRESS='127.0.0.1:9092'
+
 CRDB_SQL_ADDRESS=$(kubectl get service cockroachdb-public --namespace crdb -o jsonpath='{.spec.clusterIP}')
 export CRDB_URI="cockroachdb://tfs:tfs123@${CRDB_SQL_ADDRESS}:26257/tfs_analytics?sslmode=require"
-python3 -m pytest --log-level=DEBUG --log-cli-level=DEBUG --verbose \
+
+python3 -m pytest --log-level=DEBUG --log-cli-level=INFO --verbose \
     analytics/backend/tests/test_backend.py
diff --git a/scripts/run_tests_locally-analytics-frontend.sh b/scripts/run_tests_locally-analytics-frontend.sh
index 6e945406f0ff7b2670a35d5315d0ef428f701988..0cb4dc98da051ba27347be3534f070b80f51fd65 100755
--- a/scripts/run_tests_locally-analytics-frontend.sh
+++ b/scripts/run_tests_locally-analytics-frontend.sh
@@ -21,5 +21,5 @@ RCFILE=$PROJECTDIR/coverage/.coveragerc
 export KFK_SERVER_ADDRESS='127.0.0.1:9092'
 CRDB_SQL_ADDRESS=$(kubectl get service cockroachdb-public --namespace crdb -o jsonpath='{.spec.clusterIP}')
 export CRDB_URI="cockroachdb://tfs:tfs123@${CRDB_SQL_ADDRESS}:26257/tfs_analytics?sslmode=require"
-python3 -m pytest --log-level=DEBUG --log-cli-level=DEBUG --verbose \
+python3 -m pytest --log-level=DEBUG --log-cli-level=INFO --verbose \
     analytics/frontend/tests/test_frontend.py
diff --git a/scripts/run_tests_locally-telemetry-backend.sh b/scripts/run_tests_locally-telemetry-backend.sh
index 3ad4a2d0e05dbb11573eb146b4f0a4959894ace0..f648a62520f2f7b23f30edb19bf54735f5d13e12 100755
--- a/scripts/run_tests_locally-telemetry-backend.sh
+++ b/scripts/run_tests_locally-telemetry-backend.sh
@@ -18,15 +18,12 @@ PROJECTDIR=`pwd`
 
 cd $PROJECTDIR/src
 # RCFILE=$PROJECTDIR/coverage/.coveragerc
-# coverage run --rcfile=$RCFILE --append -m pytest --log-level=INFO --verbose \
-#     kpi_manager/tests/test_unitary.py
 
-# python3 kpi_manager/tests/test_unitary.py
 export KFK_SERVER_ADDRESS='127.0.0.1:9092'
 CRDB_SQL_ADDRESS=$(kubectl get service cockroachdb-public --namespace crdb -o jsonpath='{.spec.clusterIP}')
 export CRDB_URI="cockroachdb://tfs:tfs123@${CRDB_SQL_ADDRESS}:26257/tfs_telemetry?sslmode=require"
 RCFILE=$PROJECTDIR/coverage/.coveragerc
 
 
-python3 -m pytest --log-level=INFO --log-cli-level=debug --verbose \
-    telemetry/backend/tests/test_TelemetryBackend.py
+python3 -m pytest --log-level=debug --log-cli-level=debug --verbose \
+    telemetry/backend/tests/test_backend.py
diff --git a/scripts/run_tests_locally-telemetry-emulated.sh b/scripts/run_tests_locally-telemetry-emulated.sh
new file mode 100755
index 0000000000000000000000000000000000000000..879b878c7281a17dcc89a36ff146939151540ec4
--- /dev/null
+++ b/scripts/run_tests_locally-telemetry-emulated.sh
@@ -0,0 +1,29 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+
+PROJECTDIR=`pwd`
+
+cd $PROJECTDIR/src
+# RCFILE=$PROJECTDIR/coverage/.coveragerc
+
+# export KFK_SERVER_ADDRESS='127.0.0.1:9092'
+# CRDB_SQL_ADDRESS=$(kubectl get service cockroachdb-public --namespace crdb -o jsonpath='{.spec.clusterIP}')
+# export CRDB_URI="cockroachdb://tfs:tfs123@${CRDB_SQL_ADDRESS}:26257/tfs_telemetry?sslmode=require"
+RCFILE=$PROJECTDIR/coverage/.coveragerc
+
+
+python3 -m pytest --log-level=debug --log-cli-level=info --verbose \
+    telemetry/backend/tests/test_emulated.py
diff --git a/src/analytics/backend/service/AnalyticsBackendService.py b/src/analytics/backend/service/AnalyticsBackendService.py
index f3a58feaab8667b266052803dddd1641b8a690f3..92332df6fb5a5c5d3c96d7210deaf1a98a0203b1 100755
--- a/src/analytics/backend/service/AnalyticsBackendService.py
+++ b/src/analytics/backend/service/AnalyticsBackendService.py
@@ -16,32 +16,46 @@ import time
 import json
 import logging
 import threading
+
 from common.tools.service.GenericGrpcService import GenericGrpcService
 from common.tools.kafka.Variables import KafkaConfig, KafkaTopic
-from confluent_kafka import Consumer as KafkaConsumer
+from confluent_kafka import Consumer
 from confluent_kafka import KafkaError
 from common.Constants import ServiceNameEnum
 from common.Settings import get_service_port_grpc
-from threading import Thread, Event
-from .DaskStreaming import DaskStreamer
+from analytics.backend.service.Streamer import DaskStreamer
+from analytics.backend.service.AnalyzerHelper import AnalyzerHelper
+
 
 LOGGER = logging.getLogger(__name__)
 
 class AnalyticsBackendService(GenericGrpcService):
     """
-    Class listens for ...
+    AnalyticsBackendService class is responsible for handling the requests from the AnalyticsFrontendService.
+    It listens to the Kafka topic for the requests and starts/stops the DaskStreamer accordingly.
+    It also initializes the Kafka producer and Dask cluster for the streamer.
     """
-    def __init__(self, cls_name : str = __name__) -> None:
+    def __init__(self, cls_name : str = __name__, n_workers=1, threads_per_worker=1
+                 ) -> None:
         LOGGER.info('Init AnalyticsBackendService')
         port = get_service_port_grpc(ServiceNameEnum.ANALYTICSBACKEND)
         super().__init__(port, cls_name=cls_name)
-        self.running_threads = {}       # To keep track of all running analyzers 
-        self.kafka_consumer = KafkaConsumer({'bootstrap.servers' : KafkaConfig.get_kafka_address(),
-                                            'group.id'           : 'analytics-frontend',
-                                            'auto.offset.reset'  : 'latest'})
+        self.active_streamers = {}
+        self.central_producer = AnalyzerHelper.initialize_kafka_producer()  # Multi-threaded producer
+        self.cluster          = AnalyzerHelper.initialize_dask_cluster(
+                                        n_workers, threads_per_worker) # Local cluster
+        self.request_consumer = Consumer({
+            'bootstrap.servers' : KafkaConfig.get_kafka_address(),
+            'group.id'          : 'analytics-backend',
+            'auto.offset.reset' : 'latest',
+            })
+
 
     def install_servicers(self):
-        threading.Thread(target=self.RequestListener, args=()).start()
+        threading.Thread(
+            target=self.RequestListener,
+            args=()
+        ).start()
 
     def RequestListener(self):
         """
@@ -49,7 +63,7 @@ class AnalyticsBackendService(GenericGrpcService):
         """
         LOGGER.info("Request Listener is initiated ...")
         # print      ("Request Listener is initiated ...")
-        consumer = self.kafka_consumer
+        consumer = self.request_consumer
         consumer.subscribe([KafkaTopic.ANALYTICS_REQUEST.value])
         while True:
             receive_msg = consumer.poll(2.0)
@@ -60,65 +74,96 @@ class AnalyticsBackendService(GenericGrpcService):
                     continue
                 else:
                     LOGGER.error("Consumer error: {:}".format(receive_msg.error()))
-                    # print       ("Consumer error: {:}".format(receive_msg.error()))
                     break
             try:
                 analyzer      = json.loads(receive_msg.value().decode('utf-8'))
                 analyzer_uuid = receive_msg.key().decode('utf-8')
-                LOGGER.debug('Recevied Analyzer: {:} - {:}'.format(analyzer_uuid, analyzer))
-                # print       ('Recevied Analyzer: {:} - {:}'.format(analyzer_uuid, analyzer))
+                LOGGER.info('Recevied Analyzer: {:} - {:}'.format(analyzer_uuid, analyzer))
 
                 if analyzer["algo_name"] is None and analyzer["oper_mode"] is None:
-                    self.StopDaskListener(analyzer_uuid)
+                    if self.StopStreamer(analyzer_uuid):
+                        LOGGER.info("Dask Streamer stopped.")
+                    else:
+                        LOGGER.error("Failed to stop Dask Streamer.")
                 else:
-                    self.StartDaskListener(analyzer_uuid, analyzer)
+                    if self.StartStreamer(analyzer_uuid, analyzer):
+                        LOGGER.info("Dask Streamer started.")
+                    else:
+                        LOGGER.error("Failed to start Dask Streamer.")
             except Exception as e:
                 LOGGER.warning("Unable to consume message from topic: {:}. ERROR: {:}".format(KafkaTopic.ANALYTICS_REQUEST.value, e))
-                # print         ("Unable to consume message from topic: {:}. ERROR: {:}".format(KafkaTopic.ANALYTICS_REQUEST.value, e))
-
-    def StartDaskListener(self, analyzer_uuid, analyzer):
-        kpi_list      = analyzer[ 'input_kpis'   ] 
-        thresholds    = analyzer[ 'thresholds'   ]
-        window_size   = analyzer[ 'window_size'  ]
-        window_slider = analyzer[ 'window_slider']
-
-        LOGGER.debug ("Received parameters: {:} - {:} - {:} - {:}".format(
-            kpi_list, thresholds, window_size, window_slider))
-        # print        ("Received parameters: {:} - {:} - {:} - {:}".format(
-        #     kpi_list, thresholds, window_size, window_slider))
+
+
+    def StartStreamer(self, analyzer_uuid : str, analyzer : dict):
+        """
+        Start the DaskStreamer with the given parameters.
+        """
+        if analyzer_uuid in self.active_streamers:
+            LOGGER.warning("Dask Streamer already running with the given analyzer_uuid: {:}".format(analyzer_uuid))
+            return False
         try:
-            stop_event = Event()
-            thread     = Thread(
-                target=DaskStreamer,
-                # args=(analyzer_uuid, kpi_list, oper_list, thresholds, stop_event),
-                args=(analyzer['output_kpis'][0] , kpi_list, thresholds, stop_event),
-                kwargs={
-                    "window_size"       : window_size,
-                }
+            streamer = DaskStreamer(
+                key               = analyzer_uuid,
+                input_kpis        = analyzer['input_kpis' ],
+                output_kpis       = analyzer['output_kpis'],
+                thresholds        = analyzer['thresholds' ],
+                batch_size        = analyzer['batch_size' ],
+                window_size       = analyzer['window_size'],
+                cluster_instance  = self.cluster,
+                producer_instance = self.central_producer,
             )
-            thread.start()
-            self.running_threads[analyzer_uuid] = (thread, stop_event)
-            # print      ("Initiated Analyzer backend: {:}".format(analyzer_uuid))
-            LOGGER.info("Initiated Analyzer backend: {:}".format(analyzer_uuid))
+            streamer.start()
+            LOGGER.info(f"Streamer started with analyzer Id: {analyzer_uuid}")
+
+            # Stop the streamer after the given duration
+            if analyzer['duration'] > 0:
+                def stop_after_duration():
+                    time.sleep(analyzer['duration'])
+                    LOGGER.warning(f"Execution duration completed of Analyzer: {analyzer_uuid}")
+                    if not self.StopStreamer(analyzer_uuid):
+                        LOGGER.warning("Failed to stop Dask Streamer. Streamer may be already terminated.")
+
+                duration_thread = threading.Thread(target=stop_after_duration, daemon=True)
+                duration_thread.start()
+
+            self.active_streamers[analyzer_uuid] = streamer
+            return True
+        except Exception as e:
+            LOGGER.error("Failed to start Dask Streamer. ERROR: {:}".format(e))
+            return False
+
+    def StopStreamer(self, analyzer_uuid : str):
+        """
+        Stop the DaskStreamer with the given analyzer_uuid.
+        """
+        try:
+            if analyzer_uuid not in self.active_streamers:
+                LOGGER.warning("Dask Streamer not found with the given analyzer_uuid: {:}".format(analyzer_uuid))
+                return False
+            LOGGER.info(f"Terminating streamer with Analyzer Id: {analyzer_uuid}")
+            streamer = self.active_streamers[analyzer_uuid]
+            streamer.stop()
+            streamer.join()
+            del self.active_streamers[analyzer_uuid]
+            LOGGER.info(f"Streamer with analyzer_uuid '{analyzer_uuid}' has been trerminated sucessfully.")
             return True
         except Exception as e:
-            # print       ("Failed to initiate Analyzer backend: {:}".format(e))
-            LOGGER.error("Failed to initiate Analyzer backend: {:}".format(e))
+            LOGGER.error("Failed to stop Dask Streamer. ERROR: {:}".format(e))
             return False
 
-    def StopDaskListener(self, analyzer_uuid):
-        if analyzer_uuid in self.running_threads:
+    def close(self):        # TODO: Is this function needed?
+        """
+        Close the producer and cluster cleanly.
+        """
+        if self.central_producer:
             try:
-                thread, stop_event = self.running_threads[analyzer_uuid]
-                stop_event.set()
-                thread.join()
-                del self.running_threads[analyzer_uuid]
-                # print      ("Terminating backend (by TerminateBackend): Analyzer Id: {:}".format(analyzer_uuid))
-                LOGGER.info("Terminating backend (by TerminateBackend): Analyzer Id: {:}".format(analyzer_uuid))
-                return True
+                self.central_producer.flush()
+                LOGGER.info("Kafka producer flushed and closed.")
             except Exception as e:
-                LOGGER.error("Failed to terminate. Analyzer Id: {:} - ERROR: {:}".format(analyzer_uuid, e))
-                return False
-        else:
-            # print         ("Analyzer not found in active collectors. Analyzer Id: {:}".format(analyzer_uuid))
-            LOGGER.warning("Analyzer not found in active collectors: Analyzer Id: {:}".format(analyzer_uuid))
+                LOGGER.error(f"Error closing Kafka producer: {e}")
+        if self.cluster:
+            try:
+                self.cluster.close()
+                LOGGER.info("Dask cluster closed.")
+            except Exception as e:
+                LOGGER.error(f"Error closing Dask cluster: {e}")
diff --git a/src/analytics/backend/service/AnalyzerHandlers.py b/src/analytics/backend/service/AnalyzerHandlers.py
new file mode 100644
index 0000000000000000000000000000000000000000..a05b1a0b772d1d6910e7487c8260fba894aba7e0
--- /dev/null
+++ b/src/analytics/backend/service/AnalyzerHandlers.py
@@ -0,0 +1,131 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import logging
+from enum import Enum
+import pandas as pd
+
+logger = logging.getLogger(__name__)
+
+
+class Handlers(Enum):
+    AGGREGATION_HANDLER = "AggregationHandler"
+    UNSUPPORTED_HANDLER = "UnsupportedHandler"
+
+    @classmethod
+    def is_valid_handler(cls, handler_name):
+        return handler_name in cls._value2member_map_
+
+# This method is top-level and should not be part of the class due to serialization issues.
+def threshold_handler(key, aggregated_df, thresholds):
+    """
+    Apply thresholds (TH-Fall and TH-Raise) based on the thresholds dictionary
+    on the aggregated DataFrame.
+
+    Args:
+        key (str): Key for the aggregated DataFrame.
+        aggregated_df (pd.DataFrame): DataFrame with aggregated metrics.
+        thresholds (dict): Thresholds dictionary with keys in the format '<metricName>' and values as (fail_th, raise_th).
+
+    Returns:
+        pd.DataFrame: DataFrame with additional threshold columns.
+    """
+    for metric_name, threshold_values in thresholds.items():
+        # Ensure the metric column exists in the DataFrame
+        if metric_name not in aggregated_df.columns:
+            logger.warning(f"Metric '{metric_name}' does not exist in the DataFrame for key: {key}. Skipping threshold application.")
+            continue
+        
+        # Ensure the threshold values are valid (check for tuple specifically)
+        if isinstance(threshold_values, list) and len(threshold_values) == 2:
+            fail_th, raise_th = threshold_values
+            
+            # Add threshold columns with updated naming
+            aggregated_df[f"{metric_name}_TH_RAISE"] = aggregated_df[metric_name] > raise_th
+            aggregated_df[f"{metric_name}_TH_FALL"]  = aggregated_df[metric_name] < fail_th
+        else:
+            logger.warning(f"Threshold values for '{metric_name}' ({threshold_values}) are not a list of length 2. Skipping threshold application.")
+    return aggregated_df
+
+def aggregation_handler(
+        batch_type_name, key, batch, input_kpi_list, output_kpi_list, thresholds
+    ):
+    """
+      Process a batch of data and calculate aggregated values for each input KPI
+      and maps them to the output KPIs. """
+
+    logger.info(f"({batch_type_name}) Processing batch for key: {key}")
+    if not batch:
+        logger.info("Empty batch received. Skipping processing.")
+        return []
+    else:
+        logger.info(f" >>>>> Processing {len(batch)} records for key: {key}")
+        
+        # Convert data into a DataFrame
+        df = pd.DataFrame(batch)
+
+        # Filter the DataFrame to retain rows where kpi_id is in the input list (subscribed endpoints only)
+        df = df[df['kpi_id'].isin(input_kpi_list)].copy()
+
+        if df.empty:
+            logger.warning(f"No data available for KPIs: {input_kpi_list}. Skipping processing.")
+            return []
+
+        # Define all possible aggregation methods
+        aggregation_methods = {
+            "min"     : ('kpi_value', 'min'),
+            "max"     : ('kpi_value', 'max'),
+            "avg"     : ('kpi_value', 'mean'),
+            "first"   : ('kpi_value', lambda x: x.iloc[0]),
+            "last"    : ('kpi_value', lambda x: x.iloc[-1]),
+            "variance": ('kpi_value', 'var'),
+            "count"   : ('kpi_value', 'count'),
+            "range"   : ('kpi_value', lambda x: x.max() - x.min()),
+            "sum"     : ('kpi_value', 'sum'),
+        }
+
+        # Process each KPI-specific task parameter
+        for kpi_index, kpi_id in enumerate(input_kpi_list):
+
+            # logger.info(f"1.Processing KPI: {kpi_id}")
+            kpi_task_parameters = thresholds["task_parameter"][kpi_index]
+            
+            # Get valid task parameters for this KPI
+            valid_task_parameters = [
+                method for method in kpi_task_parameters.keys() 
+                if method in aggregation_methods
+            ]
+
+            # Select the aggregation methods based on valid task parameters
+            selected_methods = {method: aggregation_methods[method] for method in valid_task_parameters}
+
+            # logger.info(f"2. Processing KPI: {kpi_id} with task parameters: {kpi_task_parameters}")
+            kpi_df = df[df['kpi_id'] == kpi_id]
+
+            # Check if kpi_df is not empty before applying the aggregation methods
+            if not kpi_df.empty:
+                agg_df = kpi_df.groupby('kpi_id').agg(**selected_methods).reset_index()
+
+                # logger.info(f"3. Aggregated DataFrame for KPI: {kpi_id}: {agg_df}")
+
+                agg_df['kpi_id'] = output_kpi_list[kpi_index]
+
+                # logger.info(f"4. Applying thresholds for df: {agg_df['kpi_id']}")
+                result = threshold_handler(key, agg_df, kpi_task_parameters)
+
+                return result.to_dict(orient='records')
+            else:
+                logger.warning(f"No data available for KPIs: {kpi_id}. Skipping aggregation.")
+                continue
+        return []
diff --git a/src/analytics/backend/service/AnalyzerHelper.py b/src/analytics/backend/service/AnalyzerHelper.py
new file mode 100644
index 0000000000000000000000000000000000000000..15a45aee68341c599905983efd79737a9d4929ab
--- /dev/null
+++ b/src/analytics/backend/service/AnalyzerHelper.py
@@ -0,0 +1,67 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+
+from dask.distributed import Client, LocalCluster
+from common.tools.kafka.Variables import KafkaConfig, KafkaTopic
+from confluent_kafka import Consumer, Producer
+
+import logging
+logger = logging.getLogger(__name__)
+
+
+class AnalyzerHelper:
+    def __init__(self):
+        pass
+
+    @staticmethod
+    def initialize_dask_client(cluster_instance):
+        """Initialize a local Dask client."""
+        if cluster_instance is None:
+            logger.error("Dask Cluster is not initialized. Exiting.")
+            return None
+        client = Client(cluster_instance)
+        logger.info(f"Dask Client Initialized: {client}")
+        return client
+
+    @staticmethod
+    def initialize_dask_cluster(n_workers=1, threads_per_worker=2):
+        """Initialize a local Dask cluster"""
+        cluster = LocalCluster(n_workers=n_workers, threads_per_worker=threads_per_worker)
+        logger.info(f"Dask Cluster Initialized: {cluster}")
+        return cluster
+
+    @staticmethod
+    def initialize_kafka_consumer():    # TODO: update to receive topic and group_id as parameters
+        """Initialize the Kafka consumer."""
+        consumer_conf = {
+            'bootstrap.servers': KafkaConfig.get_kafka_address(),
+            'group.id': 'analytics-backend',
+            'auto.offset.reset': 'latest'
+        }
+        consumer = Consumer(consumer_conf)
+        consumer.subscribe([KafkaTopic.VALUE.value])
+        return consumer
+
+    @staticmethod
+    def initialize_kafka_producer():
+        """Initialize the Kafka producer."""
+        return Producer({'bootstrap.servers': KafkaConfig.get_kafka_address()})
+
+    @staticmethod
+    def delivery_report(err, msg):
+        if err is not None:
+            logger.error(f"Message delivery failed: {err}")
+        else:
+            logger.debug(f"Message delivered to {msg.topic()} [{msg.partition()}] at offset {msg.offset()}")
diff --git a/src/analytics/backend/service/DaskStreaming.py b/src/analytics/backend/service/DaskStreaming.py
deleted file mode 100644
index 79dee7ef972a8b5546e3b38289c4fdb5b4bcc0d1..0000000000000000000000000000000000000000
--- a/src/analytics/backend/service/DaskStreaming.py
+++ /dev/null
@@ -1,268 +0,0 @@
-# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
-#
-# 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.
-
-import logging
-import time
-import json
-from confluent_kafka import Consumer, Producer, KafkaException, KafkaError
-import pandas as pd
-from dask.distributed import Client, LocalCluster
-from common.tools.kafka.Variables import KafkaConfig, KafkaTopic
-
-logging.basicConfig(level=logging.INFO)
-LOGGER = logging.getLogger(__name__)
-
-def SettingKafkaConsumerParams():
-    return {'bootstrap.servers'  : KafkaConfig.get_kafka_address(),
-            'group.id'           : 'analytics-backend',
-            'auto.offset.reset'  : 'latest'}
-
-def GetAggregationMappings(thresholds):
-    agg_dict = {}
-    for threshold_key in thresholds.keys():
-        parts = threshold_key.split('_', 1)
-        if len(parts) != 2:
-            LOGGER.warning(f"Threshold key '{threshold_key}' does not follow the '<aggregation>_<metricName>' format. Skipping.")
-            continue
-        aggregation, metric_name = parts
-        # Ensure that the aggregation function is valid in pandas
-        if aggregation not in ['mean', 'min', 'max', 'first', 'last', 'std']:
-            LOGGER.warning(f"Unsupported aggregation '{aggregation}' in threshold key '{threshold_key}'. Skipping.")
-            continue
-        agg_dict[threshold_key] = ('kpi_value', aggregation)
-    return agg_dict
-
-
-def ApplyThresholds(aggregated_df, thresholds):
-    """
-    Apply thresholds (TH-Fall and TH-Raise) based on the thresholds dictionary
-    on the aggregated DataFrame.
-    Args:       aggregated_df (pd.DataFrame): DataFrame with aggregated metrics.
-                thresholds (dict): Thresholds dictionary with keys in the format '<aggregation>_<metricName>'.
-    Returns:    pd.DataFrame: DataFrame with additional threshold columns.
-    """
-    for threshold_key, threshold_values in thresholds.items():
-        if threshold_key not in aggregated_df.columns:
-
-            LOGGER.warning(f"Threshold key '{threshold_key}' does not correspond to any aggregation result. Skipping threshold application.")
-            continue
-        if isinstance(threshold_values, (list, tuple)) and len(threshold_values) == 2:
-            fail_th, raise_th = threshold_values
-            aggregated_df["THRESHOLD_FALL"] = aggregated_df[threshold_key] < fail_th
-            aggregated_df["THRESHOLD_RAISE"] = aggregated_df[threshold_key] > raise_th
-            aggregated_df["value"] = aggregated_df[threshold_key]
-        else:
-            LOGGER.warning(f"Threshold values for '{threshold_key}' are not a list or tuple of length 2. Skipping threshold application.")
-    return aggregated_df
-
-def initialize_dask_client():
-    """
-    Initialize a local Dask cluster and client.
-    """
-    cluster = LocalCluster(n_workers=2, threads_per_worker=2)
-    client = Client(cluster)
-    LOGGER.info(f"Dask Client Initialized: {client}")
-    return client, cluster
-
-def initialize_kafka_producer():
-    return Producer({'bootstrap.servers': KafkaConfig.get_kafka_address()})
-
-def delivery_report(err, msg):
-    if err is not None:
-        LOGGER.error(f"Message delivery failed: {err}")
-    else:
-        LOGGER.info(f"Message delivered to {msg.topic()} [{msg.partition()}] at offset {msg.offset()}")
-
-def process_batch(batch, agg_mappings, thresholds, key):
-    """
-    Process a batch of data and apply thresholds.
-    Args:       batch (list of dict): List of messages from Kafka.
-                agg_mappings (dict): Mapping from threshold key to aggregation function.
-                thresholds (dict): Thresholds dictionary.
-    Returns:    list of dict: Processed records ready to be sent to Kafka.
-    """
-    if not batch:
-        LOGGER.info("Empty batch received. Skipping processing.")
-        return []
-
-
-    df = pd.DataFrame(batch)
-    LOGGER.info(f"df {df} ")
-    df['time_stamp'] = pd.to_datetime(df['time_stamp'], errors='coerce')
-    df.dropna(subset=['time_stamp'], inplace=True)
-    LOGGER.info(f"df {df} ")
-    required_columns = {'time_stamp', 'kpi_id', 'kpi_value'}
-    if not required_columns.issubset(df.columns):
-        LOGGER.warning(f"Batch contains missing required columns. Required columns: {required_columns}. Skipping batch.")
-        return []
-    if df.empty:
-        LOGGER.info("No data after filtering by KPI IDs. Skipping processing.")
-        return []
-
-    # Perform aggregations using named aggregation
-    try:
-        agg_dict = {key: value for key, value in agg_mappings.items()}
-
-        df_agg_ = df.groupby(['window_start']).agg(**agg_dict).reset_index()
-
-        #example: agg_dict = {'min_latency_E2E': ('kpi_value', 'min')
-
-        #given that threshold has 1 value
-        second_value_tuple = next(iter(agg_dict.values()))[1]
-        #in case we have multiple thresholds!
-        #second_values_tuples = [value[1] for value in agg_dict.values()]
-        if second_value_tuple=="min":
-            df_agg = df_agg_.min(numeric_only=True).to_frame().T
-        elif second_value_tuple == "max":
-            df_agg = df_agg_.max(numeric_only=True).to_frame().T
-        elif second_value_tuple == "std":
-            df_agg = df_agg_.sted(numeric_only=True).to_frame().T
-        else:
-            df_agg = df_agg_.mean(numeric_only=True).to_frame().T
-
-        # Assign the first value of window_start from the original aggregated data
-        df_agg['window_start'] = df_agg_['window_start'].iloc[0]
-
-        # Reorder columns to place 'window_start' first if needed
-        cols = ['window_start'] + [col for col in df_agg.columns if col != 'window_start']
-        df_agg = df_agg[cols]
-
-    except Exception as e:
-        LOGGER.error(f"Aggregation error: {e}")
-        return []
-
-    # Apply thresholds
-
-
-    df_thresholded = ApplyThresholds(df_agg, thresholds)
-    df_thresholded['kpi_id'] = key
-    df_thresholded['window_start'] = df_thresholded['window_start'].dt.strftime('%Y-%m-%dT%H:%M:%SZ')
-    # Convert aggregated DataFrame to list of dicts
-    result = df_thresholded.to_dict(orient='records')
-    LOGGER.info(f"Processed batch with {len(result)} records after aggregation and thresholding.")
-    return result
-
-def produce_result(result, producer, destination_topic):
-    for record in result:
-        try:
-            producer.produce(
-                destination_topic,
-                key=str(record.get('kpi_id', '')),
-                value=json.dumps(record),
-                callback=delivery_report
-            )
-        except KafkaException as e:
-            LOGGER.error(f"Failed to produce message: {e}")
-    producer.flush()
-    LOGGER.info(f"Produced {len(result)} aggregated records to '{destination_topic}'.")
-
-def DaskStreamer(key, kpi_list, thresholds, stop_event,
-                window_size="30s", time_stamp_col="time_stamp"):
-    client, cluster = initialize_dask_client()
-    consumer_conf   = SettingKafkaConsumerParams()
-    consumer        = Consumer(consumer_conf)
-    consumer.subscribe([KafkaTopic.VALUE.value])
-    producer        = initialize_kafka_producer()
-
-    # Parse window_size to seconds
-    try:
-        window_size_td = pd.to_timedelta(window_size)
-        window_size_seconds = window_size_td.total_seconds()
-    except Exception as e:
-        LOGGER.error(f"Invalid window_size format: {window_size}. Error: {e}")
-        window_size_seconds = 30 
-    LOGGER.info(f"Batch processing interval set to {window_size_seconds} seconds.")
-
-    # Extract aggregation mappings from thresholds
-    agg_mappings = GetAggregationMappings(thresholds)
-    if not agg_mappings:
-        LOGGER.error("No valid aggregation mappings extracted from thresholds. Exiting streamer.")
-        consumer.close()
-        producer.flush()
-        client.close()
-        cluster.close()
-        return
-    try:
-        batch = []
-        last_batch_time = time.time()
-        LOGGER.info("Starting to consume messages...")
-
-        while not stop_event.is_set():
-            msg = consumer.poll(1.0)
-
-            if msg is None:
-                current_time = time.time()
-                if (current_time - last_batch_time) >= window_size_seconds and batch:
-                    LOGGER.info("Time-based batch threshold reached. Processing batch.")
-                    future = client.submit(process_batch, batch, agg_mappings, thresholds)
-                    future.add_done_callback(lambda fut: produce_result(fut.result(), producer, KafkaTopic.ALARMS.value))
-                    batch = []
-                    last_batch_time = current_time
-                continue
-
-            if msg.error():
-                if msg.error().code() == KafkaError._PARTITION_EOF:
-                    LOGGER.warning(f"End of partition reached {msg.topic()} [{msg.partition()}] at offset {msg.offset()}")
-                else:
-                    LOGGER.error(f"Kafka error: {msg.error()}")
-                continue
-
-            try:
-                message_value = json.loads(msg.value().decode('utf-8'))
-            except json.JSONDecodeError as e:
-                LOGGER.error(f"JSON decode error: {e}")
-                continue
-
-            try:
-                message_timestamp = pd.to_datetime(message_value[time_stamp_col], errors='coerce')
-                LOGGER.warning(f"message_timestamp: {message_timestamp}. Skipping message.")
-
-                if pd.isna(message_timestamp):
-                    LOGGER.warning(f"Invalid timestamp in message: {message_value}. Skipping message.")
-                    continue
-                window_start = message_timestamp.floor(window_size)
-                LOGGER.warning(f"window_start: {window_start}. Skipping message.")
-                message_value['window_start'] = window_start
-            except Exception as e:
-                LOGGER.error(f"Error processing timestamp: {e}. Skipping message.")
-                continue
-
-            if message_value['kpi_id'] not in kpi_list:
-                LOGGER.debug(f"KPI ID '{message_value['kpi_id']}' not in kpi_list. Skipping message.")
-                continue
-
-            batch.append(message_value)
-
-            current_time = time.time()
-            if (current_time - last_batch_time) >= window_size_seconds and batch:
-                LOGGER.info("Time-based batch threshold reached. Processing batch.")
-                future = client.submit(process_batch, batch, agg_mappings, thresholds, key)
-                future.add_done_callback(lambda fut: produce_result(fut.result(), producer, KafkaTopic.ALARMS.value))
-                batch = []
-                last_batch_time = current_time
-
-    except Exception as e:
-        LOGGER.exception(f"Error in Dask streaming process: {e}")
-    finally:
-        # Process any remaining messages in the batch
-        if batch:
-            LOGGER.info("Processing remaining messages in the batch.")
-            future = client.submit(process_batch, batch, agg_mappings, thresholds)
-            future.add_done_callback(lambda fut: produce_result(fut.result(), producer, KafkaTopic.ALARMS.value))
-        consumer.close()
-        producer.flush()
-        LOGGER.info("Kafka consumer and producer closed.")
-        client.close()
-        cluster.close()
-        LOGGER.info("Dask client and cluster closed.")
diff --git a/src/analytics/backend/service/Streamer.py b/src/analytics/backend/service/Streamer.py
new file mode 100644
index 0000000000000000000000000000000000000000..c72359db2e5de7f9165442deb9d52bfde415b289
--- /dev/null
+++ b/src/analytics/backend/service/Streamer.py
@@ -0,0 +1,162 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import time
+import json
+import threading
+import logging
+
+from confluent_kafka                            import KafkaException, KafkaError
+from common.tools.kafka.Variables               import KafkaTopic
+from analytics.backend.service.AnalyzerHandlers import Handlers, aggregation_handler
+from analytics.backend.service.AnalyzerHelper   import AnalyzerHelper
+
+
+logger = logging.getLogger(__name__)
+
+
+class DaskStreamer(threading.Thread):
+    def __init__(self, key, input_kpis, output_kpis, thresholds, 
+                 batch_size        = 5, 
+                 window_size       = None,
+                 cluster_instance  = None,
+                 producer_instance = AnalyzerHelper.initialize_kafka_producer()
+                 ):
+        super().__init__()
+        self.key         = key
+        self.input_kpis  = input_kpis
+        self.output_kpis = output_kpis
+        self.thresholds  = thresholds
+        self.window_size = window_size
+        self.batch_size  = batch_size
+        self.running     = True
+        self.batch       = []
+
+        # Initialize Kafka and Dask components
+        self.client   = AnalyzerHelper.initialize_dask_client(cluster_instance)
+        self.consumer = AnalyzerHelper.initialize_kafka_consumer()      # Single-threaded consumer
+        self.producer = producer_instance
+
+        logger.info("Dask Streamer initialized.")
+
+    def run(self):
+        """Main method to start the DaskStreamer."""
+        try:
+            logger.info("Starting Dask Streamer")
+            last_batch_time = time.time()
+            while True:
+                if not self.consumer:
+                    logger.warning("Kafka consumer is not initialized or stopped. Exiting loop.")
+                    break
+                if not self.running:
+                    logger.warning("Dask Streamer instance has been terminated. Exiting loop.")
+                    break
+                if not self.client:
+                    logger.warning("Dask client is not running. Exiting loop.")
+                    break
+                message = self.consumer.poll(timeout=2.0)
+                if message is None:
+                    # logger.info("No new messages received.")
+                    continue
+                if message.error():
+                    if message.error().code() == KafkaError._PARTITION_EOF:
+                        logger.warning(f"Consumer reached end of topic {message.topic()}/{message.partition()}")
+                    elif message.error():
+                        raise KafkaException(message.error())
+                else:
+                    try:
+                        value = json.loads(message.value())
+                    except json.JSONDecodeError:
+                        logger.error(f"Failed to decode message: {message.value()}")
+                        continue
+                    self.batch.append(value)
+
+                # Window size has a precedence over batch size
+                if self.window_size is None:
+                    if len(self.batch) >= self.batch_size:  # If batch size is not provided, process continue with the default batch size
+                        logger.info(f"Processing based on batch size {self.batch_size}.")
+                        self.task_handler_selector()
+                        self.batch = []
+                else:
+                    # Process based on window size
+                    current_time = time.time()
+                    if (current_time - last_batch_time) >= self.window_size and self.batch:
+                        logger.info(f"Processing based on window size {self.window_size}.")
+                        self.task_handler_selector()
+                        self.batch = []
+                        last_batch_time = current_time
+
+        except Exception as e:
+            logger.exception(f"Error in Dask streaming process: {e}")
+        finally:
+            self.stop()
+            logger.info(">>> Exiting Dask Streamer...")
+
+    def task_handler_selector(self):
+        """Select the task handler based on the task type."""
+        logger.info(f"Batch to be processed: {self.batch}")
+        if Handlers.is_valid_handler(self.thresholds["task_type"]):
+            if self.client is not None and self.client.status == 'running':
+                try:
+                    future = self.client.submit(aggregation_handler, "batch size", self.key,
+                                                    self.batch, self.input_kpis, self.output_kpis, self.thresholds)
+                    future.add_done_callback(lambda fut: self.produce_result(fut.result(), KafkaTopic.ALARMS.value))
+                except Exception as e:
+                    logger.error(f"Failed to submit task to Dask client or unable to process future. See error for detail: {e}")
+            else:
+                logger.warning("Dask client is not running. Skipping processing.")
+        else:
+            logger.warning(f"Unknown task type: {self.thresholds['task_type']}. Skipping processing.")
+
+    def produce_result(self, result, destination_topic):
+        """Produce results to the Kafka topic."""
+        if not result:
+            logger.warning("Nothing to produce. Skipping.")
+            return
+        for record in result:
+            try:
+                self.producer.produce(
+                    destination_topic,
+                    key=str(record.get('kpi_id', '')),
+                    value=json.dumps(record),
+                    callback=AnalyzerHelper.delivery_report
+                )
+            except KafkaException as e:
+                logger.error(f"Failed to produce message: {e}")
+        self.producer.flush()
+        logger.info(f"Produced {len(result)} aggregated records to '{destination_topic}'.")
+
+    def stop(self):
+        """Clean up Kafka and Dask thread resources."""
+        if not self.running:
+            logger.info("Dask Streamer is already stopped.")
+            return
+        self.running = False
+        logger.info("Streamer running status is set to False. Waiting 5 seconds before stopping...")
+        time.sleep(5)       # Waiting time for running tasks to complete
+        if self.consumer:
+            try:
+                self.consumer.close()
+                logger.info("Kafka consumer closed.")
+            except Exception as e:
+                logger.error(f"Error closing Kafka consumer: {e}")
+
+        if self.client is not None and hasattr(self.client, 'status') and self.client.status == 'running':
+            try:
+                self.client.close()
+                logger.info("Dask client closed.")
+            except Exception as e:
+                logger.error(f"Error closing Dask client: {e}")
+
+# TODO: May be Single streamer for all analyzers ... ?
diff --git a/src/analytics/backend/tests/messages.py b/src/analytics/backend/tests/messages.py
index 55d966dfbbae2318a5f774049b02f5b340070113..2ff1e93536e94863ba9eaaf76d35f7453ba95727 100644
--- a/src/analytics/backend/tests/messages.py
+++ b/src/analytics/backend/tests/messages.py
@@ -53,8 +53,8 @@ def create_analyzer():
     _create_analyzer.algorithm_name               = "Test_Aggergate_and_Threshold"
     _create_analyzer.operation_mode               = AnalyzerOperationMode.ANALYZEROPERATIONMODE_STREAMING
     
-    _kpi_id = KpiId()
     # input IDs to analyze
+    _kpi_id = KpiId()
     _kpi_id.kpi_id.uuid              = str(uuid.uuid4())
     _kpi_id.kpi_id.uuid              = "5716c369-932b-4a02-b4c7-6a2e808b92d7"
     _create_analyzer.input_kpi_ids.append(_kpi_id)
@@ -63,11 +63,14 @@ def create_analyzer():
     _create_analyzer.input_kpi_ids.append(_kpi_id)
     _kpi_id.kpi_id.uuid              = str(uuid.uuid4())
     _create_analyzer.input_kpi_ids.append(_kpi_id)
+
     # output IDs after analysis
+    _kpi_id = KpiId()
     _kpi_id.kpi_id.uuid              = str(uuid.uuid4())
     _create_analyzer.output_kpi_ids.append(_kpi_id)
     _kpi_id.kpi_id.uuid              = str(uuid.uuid4())
     _create_analyzer.output_kpi_ids.append(_kpi_id)
+    
     # parameter
     _threshold_dict = {
         # 'avg_value'   :(20, 30), 'min_value'   :(00, 10), 'max_value'   :(45, 50),
diff --git a/src/analytics/backend/tests/messages_analyzer.py b/src/analytics/backend/tests/messages_analyzer.py
new file mode 100644
index 0000000000000000000000000000000000000000..4a119d948864d74fc650983e96406fedd3b73e6a
--- /dev/null
+++ b/src/analytics/backend/tests/messages_analyzer.py
@@ -0,0 +1,64 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import pandas as pd
+from analytics.backend.service.AnalyzerHandlers import Handlers
+
+def get_input_kpi_list():
+    return ["1e22f180-ba28-4641-b190-2287bf446666", "6e22f180-ba28-4641-b190-2287bf448888", 'kpi_3']
+
+def get_output_kpi_list():
+    return ["1e22f180-ba28-4641-b190-2287bf441616", "6e22f180-ba28-4641-b190-2287bf181818", 'kpi_4']
+
+def get_thresholds():
+    return {
+        "task_type": Handlers.AGGREGATION_HANDLER.value,
+        "task_parameter": [
+            {"last":  [40, 80], "variance": [300, 500]},
+            {"count": [2,  4],  "max":      [70,  100]},
+            {"min":   [10, 20], "avg":      [50,  70]},
+        ],
+    }
+
+def get_duration():
+    return 40
+
+def get_windows_size():
+    return None
+
+def get_batch_size():
+    return 10
+
+def get_interval():
+    return 5
+
+def get_batch():
+    return [
+        {"time_stamp": "2025-01-13T08:44:10Z", "kpi_id": "6e22f180-ba28-4641-b190-2287bf448888", "kpi_value": 46.72},
+        {"time_stamp": "2025-01-13T08:44:12Z", "kpi_id": "6e22f180-ba28-4641-b190-2287bf448888", "kpi_value": 65.22},
+        {"time_stamp": "2025-01-13T08:44:14Z", "kpi_id": "1e22f180-ba28-4641-b190-2287bf446666", "kpi_value": 54.24},
+        {"time_stamp": "2025-01-13T08:44:16Z", "kpi_id": "1e22f180-ba28-4641-b190-2287bf446666", "kpi_value": 57.67},
+        {"time_stamp": "2025-01-13T08:44:18Z", "kpi_id": "1e22f180-ba28-4641-b190-2287bf446666", "kpi_value": 38.6},
+        {"time_stamp": "2025-01-13T08:44:20Z", "kpi_id": "6e22f180-ba28-4641-b190-2287bf448888", "kpi_value": 38.9},
+        {"time_stamp": "2025-01-13T08:44:22Z", "kpi_id": "6e22f180-ba28-4641-b190-2287bf448888", "kpi_value": 52.44},
+        {"time_stamp": "2025-01-13T08:44:24Z", "kpi_id": "6e22f180-ba28-4641-b190-2287bf448888", "kpi_value": 47.76},
+        {"time_stamp": "2025-01-13T08:44:26Z", "kpi_id": "efef4d95-1cf1-43c4-9742-95c283ddd7a6", "kpi_value": 33.71},
+        {"time_stamp": "2025-01-13T08:44:28Z", "kpi_id": "efef4d95-1cf1-43c4-9742-95c283ddd7a6", "kpi_value": 64.44},
+    ]
+
+def get_agg_df():
+    data = [ 
+        {"kpi_id": "1e22f180-ba28-4641-b190-2287bf441616", "last": 47.76, "variance": 970.41},
+    ]
+    return pd.DataFrame(data)
diff --git a/src/analytics/backend/tests/test_backend.py b/src/analytics/backend/tests/test_backend.py
index 4aa9df5fae9849ee429361603a35b2fb8eaa4d23..91d53000d408981896607a0b4af974100a916d15 100644
--- a/src/analytics/backend/tests/test_backend.py
+++ b/src/analytics/backend/tests/test_backend.py
@@ -12,148 +12,290 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import time, json
-from typing import Dict
+import time
+import json
+import pytest
 import logging
-from threading import Event, Thread
-from common.tools.kafka.Variables import KafkaTopic
+import pandas as pd
+
+from unittest.mock      import MagicMock, patch
+from .messages_analyzer import get_batch, get_input_kpi_list, get_output_kpi_list, get_thresholds, \
+                               get_windows_size, get_batch_size, get_agg_df, get_duration
+
+from common.tools.kafka.Variables                      import KafkaTopic
+from analytics.backend.service.Streamer                import DaskStreamer
+from analytics.backend.service.AnalyzerHandlers        import aggregation_handler, threshold_handler
 from analytics.backend.service.AnalyticsBackendService import AnalyticsBackendService
-from analytics.backend.tests.messages import get_kpi_id_list, get_operation_list, get_threshold_dict
-from .messages import create_analyzer, create_analyzer_dask
-from threading import Thread, Event
-from ..service.DaskStreaming import DaskStreamer
 
-LOGGER = logging.getLogger(__name__)
 
+logger = logging.getLogger(__name__)
+logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(funcName)s -  %(levelname)s - %(message)s')
+
+
+# ----
+# Test fixtures and helper functions
+# ----
+
+@pytest.fixture(autouse=True)
+def log_all_methods(request):
+    '''
+    This fixture logs messages before and after each test function runs, indicating the start and end of the test.
+    The autouse=True parameter ensures that this logging happens automatically for all tests in the module.
+    '''
+    logger.info(f" >>>>> Starting test: {request.node.name} ")
+    yield
+    logger.info(f" <<<<< Finished test: {request.node.name} ")
+
+@pytest.fixture
+def mock_kafka_producer():
+    mock_producer         = MagicMock()
+    mock_producer.produce = MagicMock()
+    mock_producer.flush   = MagicMock()
+    return mock_producer
+
+@pytest.fixture
+def mock_dask_cluster():
+    mock_cluster       = MagicMock()
+    mock_cluster.close = MagicMock()
+    return mock_cluster
+
+@pytest.fixture
+def mock_dask_client():
+    mock_client        = MagicMock()
+    mock_client.status = 'running'
+    mock_client.submit = MagicMock()
+    return mock_client
+
+@pytest.fixture()
+def mock_kafka_consumer():
+    mock_consumer           = MagicMock()
+    mock_consumer.subscribe = MagicMock()
+    return mock_consumer
+
+@pytest.fixture()
+def mock_streamer_start():
+    mock_streamer = MagicMock()
+    mock_streamer.start = MagicMock()
+    return mock_streamer
 
 ###########################
-# Tests Implementation of Telemetry Backend
+# funtionality pytest cases with specific fixtures for AnalyticsBackendService class sub-methods
 ###########################
 
-# --- "test_validate_kafka_topics" should be run before the functionality tests ---
-def test_validate_kafka_topics():
-    LOGGER.debug(" >>> test_validate_kafka_topics: START <<< ")
-    response = KafkaTopic.create_all_topics()
-    assert isinstance(response, bool)
-
-
-# --- To test Dask Streamer functionality ---
-# def test_StartDaskStreamer():   # Directly from the Streamer class
-#     LOGGER.debug(" >>> test_StartSparkStreamer: START <<< ")
-#     stop_event = Event()
-#     kpi_list = ["1e22f180-ba28-4641-b190-2287bf446666", "6e22f180-ba28-4641-b190-2287bf448888", 'kpi_3']
-#     oper_list = ['avg', 'min', 'max',]
-#     thresholds = {
-#         'avg_value': (10.0, 90.0),
-#         'min_value': (5.0, 95.0),
-#         'max_value': (15.0, 85.0),
-#         'latency'  : (2.0, 10.0)
-#     }
-
-#     # Start the DaskStreamer in a separate thread
-#     streamer_thread = Thread(
-#         target=DaskStreamer,
-#         args=("analytics_stream", kpi_list, oper_list, thresholds, stop_event),
-#         kwargs={
-#             "window_size": "60s",
-#             "win_slide_duration": "30s",
-#             "time_stamp_col": "time_stamp"
-#         }
-#     )
-#     streamer_thread.start()
-#     try:
-#         while True:
-#             time.sleep(10)
-#     except KeyboardInterrupt:
-#         LOGGER.info("KeyboardInterrupt received. Stopping streamer...")
-#         stop_event.set()
-#         streamer_thread.join()
-#         LOGGER.info("Streamer stopped gracefully.")
-
-# --- To test Start Streamer functionality ---
-# def test_StartDaskStreamer():
-#     LOGGER.debug(" >>> test_StartBaskStreamer: START <<< ")
-#     analyzer_obj = create_analyzer_dask()
-#     # LOGGER.info("Created Analyzer Object: {:}".format(analyzer_obj))
-#     analyzer_uuid = analyzer_obj.analyzer_id.analyzer_id.uuid
-#     analyzer_to_generate : Dict = {
-#         "algo_name"       : analyzer_obj.algorithm_name,
-#         "input_kpis"      : [k.kpi_id.uuid for k in analyzer_obj.input_kpi_ids],
-#         "output_kpis"     : [k.kpi_id.uuid for k in analyzer_obj.output_kpi_ids],
-#         "oper_mode"       : analyzer_obj.operation_mode,
-#         "thresholds"      : json.loads(analyzer_obj.parameters["thresholds"]),
-#         "oper_list"       : json.loads(analyzer_obj.parameters["oper_list"]),
-#         # "oper_list"       : analyzer_obj.parameters["oper_list"],
-#         "window_size"     : analyzer_obj.parameters["window_size"],
-#         "window_slider"   : analyzer_obj.parameters["window_slider"],
-#         # "store_aggregate" : analyzer_obj.parameters["store_aggregate"] 
-#     }
-#     AnalyticsBackendServiceObj = AnalyticsBackendService()
-#     LOGGER.info("Analyzer to be generated: {:}".format((analyzer_to_generate)))
-#     response = AnalyticsBackendServiceObj.StartDaskListener(analyzer_uuid, analyzer_to_generate)
-#     assert isinstance(response, bool)
-#     time.sleep(100)
-#     LOGGER.info('Initiating StopRequestListener...')
-#     # AnalyticsBackendServiceObj = AnalyticsBackendService()
-#     response = AnalyticsBackendServiceObj.StopDaskListener(analyzer_uuid)
-#     LOGGER.debug(str(response)) 
-#     assert isinstance(response, bool)
+@pytest.fixture
+def analytics_service(mock_kafka_producer, mock_dask_cluster, mock_dask_client, mock_kafka_consumer, mock_streamer_start):
+    with patch('analytics.backend.service.AnalyzerHelper.AnalyzerHelper.initialize_kafka_producer', return_value = mock_kafka_producer), \
+         patch('analytics.backend.service.AnalyzerHelper.AnalyzerHelper.initialize_dask_cluster',   return_value = mock_dask_cluster  ), \
+         patch('analytics.backend.service.AnalyzerHelper.AnalyzerHelper.initialize_dask_client',    return_value = mock_dask_client   ), \
+         patch('analytics.backend.service.AnalyzerHelper.AnalyzerHelper.initialize_kafka_consumer', return_value = mock_kafka_consumer), \
+         patch('analytics.backend.service.Streamer.DaskStreamer.run',                               return_value = mock_streamer_start):
+         
+        service = AnalyticsBackendService()
+        yield service
+        service.close()
 
-# --- To test Start Streamer functionality ---
-# def test_StartSparkStreamer():
-#     LOGGER.debug(" >>> test_StartSparkStreamer: START <<< ")
-#     analyzer_obj = create_analyzer()
-#     analyzer_uuid = analyzer_obj.analyzer_id.analyzer_id.uuid
-#     analyzer_to_generate : Dict = {
-#         "algo_name"       : analyzer_obj.algorithm_name,
-#         "input_kpis"      : [k.kpi_id.uuid for k in analyzer_obj.input_kpi_ids],
-#         "output_kpis"     : [k.kpi_id.uuid for k in analyzer_obj.output_kpi_ids],
-#         "oper_mode"       : analyzer_obj.operation_mode,
-#         "thresholds"      : json.loads(analyzer_obj.parameters["thresholds"]),
-#         "window_size"     : analyzer_obj.parameters["window_size"],
-#         "window_slider"   : analyzer_obj.parameters["window_slider"],
-#         # "store_aggregate" : analyzer_obj.parameters["store_aggregate"] 
-#     }
-#     AnalyticsBackendServiceObj = AnalyticsBackendService()
-#     response = AnalyticsBackendServiceObj.StartSparkStreamer(analyzer_uuid, analyzer_to_generate)
-#     assert isinstance(response, bool)
+@pytest.fixture
+def analyzer_data():
+    return {
+        'algo_name'  : 'test_algorithm',
+        'oper_mode'  : 'test_mode',
+        'input_kpis' : get_input_kpi_list(),
+        'output_kpis': get_output_kpi_list(),
+        'thresholds' : get_thresholds(),
+        'batch_size' : get_batch_size(),
+        'window_size': get_windows_size(),
+        'duration'   : get_duration(),
+    }
 
-# --- To TEST StartRequestListenerFunctionality
-# def test_StartRequestListener():
-#     LOGGER.info('test_RunRequestListener')
-#     AnalyticsBackendServiceObj = AnalyticsBackendService()
-#     AnalyticsBackendServiceObj.stop_event = Event()
-#     listener_thread = Thread(target=AnalyticsBackendServiceObj.RequestListener, args=())
-#     listener_thread.start()
-
-#     time.sleep(100)
-
-    # AnalyticsBackendServiceObj.stop_event.set()
-    # LOGGER.info('Backend termination initiated. waiting for termination... 10 seconds')
-    # listener_thread.join(timeout=10)
-    # assert not listener_thread.is_alive(), "RequestListener thread did not terminate as expected."
-    # LOGGER.info('Completed test_RunRequestListener')
-
-# To test START and STOP communication together
-# def test_StopRequestListener():
-#     LOGGER.info('test_RunRequestListener')
-#     LOGGER.info('Initiating StartRequestListener...')
-#     AnalyticsBackendServiceObj = AnalyticsBackendService()
-#     response_thread = AnalyticsBackendServiceObj.StartRequestListener() # response is Tuple (thread, stop_event)
-#     # LOGGER.debug(str(response_thread))
-#     time.sleep(10)
-#     LOGGER.info('Initiating StopRequestListener...')
-#     AnalyticsBackendServiceObj = AnalyticsBackendService()
-#     response = AnalyticsBackendServiceObj.StopRequestListener(response_thread)
-#     LOGGER.debug(str(response)) 
-#     assert isinstance(response, bool)
+def test_start_streamer(analytics_service, analyzer_data):
+    analyzer_uuid = "test-analyzer-uuid"
+    # Start streamer
+    result = analytics_service.StartStreamer(analyzer_uuid, analyzer_data)
+    assert result is True
+    assert analyzer_uuid in analytics_service.active_streamers
+
+def test_stop_streamer(analytics_service, analyzer_data):
+    analyzer_uuid = "test-analyzer-uuid"
+
+    # Start streamer for stopping it later
+    analytics_service.StartStreamer(analyzer_uuid, analyzer_data)
+    assert analyzer_uuid in analytics_service.active_streamers
+
+    # Stop streamer
+    result = analytics_service.StopStreamer(analyzer_uuid)
+    assert result is True
+    assert analyzer_uuid not in analytics_service.active_streamers
+
+    # Verify that the streamer was stopped
+    assert analyzer_uuid not in analytics_service.active_streamers
+
+def test_close(analytics_service, mock_kafka_producer, mock_dask_cluster):
+    analytics_service.close()
+
+    mock_kafka_producer.flush.assert_called_once()
+    mock_dask_cluster.close.assert_called_once()
+
+###########################
+# funtionality pytest with specific fixtures for streamer class sub methods
+###########################
+
+@pytest.fixture
+def dask_streamer(mock_kafka_producer, mock_dask_cluster, mock_dask_client, mock_kafka_consumer):
+    with patch('analytics.backend.service.AnalyzerHelper.AnalyzerHelper.initialize_kafka_producer', return_value = mock_kafka_producer), \
+         patch('analytics.backend.service.AnalyzerHelper.AnalyzerHelper.initialize_dask_cluster',   return_value = mock_dask_cluster  ), \
+         patch('analytics.backend.service.AnalyzerHelper.AnalyzerHelper.initialize_dask_client',    return_value = mock_dask_client   ), \
+         patch('analytics.backend.service.AnalyzerHelper.AnalyzerHelper.initialize_kafka_consumer', return_value = mock_kafka_consumer):
+        
+        return DaskStreamer(
+            key               = "test_key",
+            input_kpis        = get_input_kpi_list(),
+            output_kpis       = get_output_kpi_list(),
+            thresholds        = get_thresholds(),
+            batch_size        = get_batch_size(),
+            window_size       = get_windows_size(),
+            cluster_instance  = mock_dask_cluster(),
+            producer_instance = mock_kafka_producer(),
+        )
 
-# To independently tests the SparkListener functionality
-# def test_SparkListener():
-#     LOGGER.info('test_RunRequestListener')
-#     AnalyticsBackendServiceObj = AnalyticsBackendService()
-#     response = AnalyticsBackendServiceObj.RunSparkStreamer(
-#         get_kpi_id_list(), get_operation_list(), get_threshold_dict()
-#         )
-#     LOGGER.debug(str(response))
+def test_dask_streamer_initialization(dask_streamer):
+    """Test if the DaskStreamer initializes correctly."""
+    assert dask_streamer.key         == "test_key"
+    assert dask_streamer.batch_size  == get_batch_size()
+    assert dask_streamer.window_size is None
+    assert dask_streamer.consumer    is not None
+    assert dask_streamer.producer    is not None
+    assert dask_streamer.client      is not None
+
+def test_run_stops_on_no_consumer(dask_streamer):
+    """Test if the run method exits when the consumer is not initialized."""
+    dask_streamer.consumer = None
+    with patch('time.sleep', return_value=None):
+        dask_streamer.run()
+
+    assert not dask_streamer.running
+
+def test_task_handler_selector_valid_handler(dask_streamer, mock_dask_client):
+    """Test task handler selection with a valid handler."""
+    with patch('analytics.backend.service.AnalyzerHelper.AnalyzerHelper.initialize_dask_client', return_value = mock_dask_client):
+
+        dask_streamer.task_handler_selector()
+        assert dask_streamer.client.status == 'running'
+
+def test_task_handler_selector_invalid_handler(dask_streamer):
+    """Test task handler selection with an invalid handler."""
+    with patch('analytics.backend.service.AnalyzerHandlers.Handlers.is_valid_handler', return_value=False):
+        dask_streamer.task_handler_selector()
+        assert dask_streamer.batch == []
+
+def test_produce_result(dask_streamer):
+    """Test if produce_result sends records to Kafka."""
+    result = [{"kpi_id": "kpi1", "value": 100}]
+    with patch('analytics.backend.service.AnalyzerHelper.AnalyzerHelper.delivery_report', return_value=None) as mock_delivery_report, \
+         patch.object(dask_streamer.producer, 'produce') as mock_produce:
+        dask_streamer.produce_result(result, "test_topic")
+        mock_produce.assert_called_once_with(
+            "test_topic",
+            key="kpi1",
+            value=json.dumps({"kpi_id": "kpi1", "value": 100}),
+            callback=mock_delivery_report
+        )
+
+def test_stop(dask_streamer):
+    """Test the cleanup method."""
+    with patch.object(dask_streamer.consumer, 'close') as mock_consumer_close, \
+         patch.object(dask_streamer.client,   'close') as mock_client_close, \
+         patch('time.sleep', return_value=0):
+        
+        # Mock the conditions required for the close calls
+        dask_streamer.client.status = 'running'
+        
+        dask_streamer.stop()
+
+        mock_consumer_close.assert_called_once()
+        mock_client_close.assert_called_once()
+
+def test_run_with_valid_consumer(dask_streamer):
+    """Test the run method with a valid Kafka consumer."""
+    with patch.object(dask_streamer.consumer, 'poll')         as mock_poll, \
+         patch.object(dask_streamer, 'task_handler_selector') as mock_task_handler_selector:
+        
+        # Simulate valid messages without errors
+        mock_message_1 = MagicMock()
+        mock_message_1.value.return_value = b'{"kpi_id": "kpi1", "value": 100}'
+        mock_message_1.error.return_value = None  # No error
+
+        mock_message_2 = MagicMock()
+        mock_message_2.value.return_value = b'{"kpi_id": "kpi2", "value": 200}'
+        mock_message_2.error.return_value = None  # No error
+
+        # Mock `poll` to return valid messages
+        mock_poll.side_effect = [mock_message_1, mock_message_2]
+        
+        # Run the `run` method in a limited loop
+        with patch('time.sleep', return_value=None):  # Mock `sleep` to avoid delays
+            dask_streamer.running = True            
+            dask_streamer.batch_size = 2            
+            
+            # Limit the loop by breaking it after one full processing cycle
+            def stop_running_after_task_handler():
+                logger.info("Stopping the streamer after processing the first batch.")
+                dask_streamer.running = False
+            
+            mock_task_handler_selector.side_effect = stop_running_after_task_handler
+            dask_streamer.run()
+        
+        assert len(dask_streamer.batch) == 0  # Batch should be cleared after processing
+        mock_task_handler_selector.assert_called_once()  # Task handler should be called once
+        mock_poll.assert_any_call(timeout=2.0)  # Poll should have been called at least once
+
+# # add a test to check the working of aggregation_handler function and threshold_handler from AnalyzerHandlers.py
+def test_aggregation_handler():
+
+    # Create a sample batch
+    batch           = get_batch()
+    input_kpi_list  = get_input_kpi_list()
+    output_kpi_list = get_output_kpi_list()
+    thresholds      = get_thresholds() 
+
+    # Test aggregation_handler
+    aggregated_df = aggregation_handler(
+        "test_batch", "test_key", batch, input_kpi_list, output_kpi_list, thresholds
+    )
+    assert isinstance(aggregated_df, list)
+    assert all(isinstance(item, dict) for item in aggregated_df)
+
+# # Test threshold_handler
+def test_threshold_handler():
+    # Create a sample aggregated DataFrame
+    agg_df     = get_agg_df()
+    thresholds = get_thresholds()
+
+    # Test threshold_handler
+    result = threshold_handler("test_key", agg_df, thresholds["task_parameter"][0])
+
+    assert isinstance(result, pd.DataFrame)
+    assert result.shape == (1, 7)
+
+
+###########################
+# integration test of Streamer with backend service (Shouldn't be run in the CI/CD pipeline)
+###########################
+# This is a local machine test to check the integration of the backend service with the Streamer
+
+# --- "test_validate_kafka_topics" should be run before the functionality tests ---
+# def test_validate_kafka_topics():
+#     logger.debug(" >>> test_validate_kafka_topics: START <<< ")
+#     response = KafkaTopic.create_all_topics()
 #     assert isinstance(response, bool)
+
+# def test_backend_integration_with_analyzer():
+#     backendServiceObject = AnalyticsBackendService()
+#     backendServiceObject.install_servicers()
+#     logger.info(" waiting for 2 minutes for the backend service before termination  ... ")
+#     time.sleep(150)
+#     logger.info(" Initiating stop collector ... ")
+#     status = backendServiceObject.StopStreamer("efef4d95-1cf1-43c4-9742-95c283ddd666")
+#     backendServiceObject.close()
+#     assert isinstance(status, bool)
+#     assert status == True
+#     logger.info(" Backend service terminated successfully ... ")
diff --git a/src/common/tools/client/RetryDecorator.py b/src/common/tools/client/RetryDecorator.py
index fc45d95c8dccbbca32ace5fbba5fb4aefc7a4d79..4750ff73ae4342ce2eb2a31941ff48b46e5be281 100644
--- a/src/common/tools/client/RetryDecorator.py
+++ b/src/common/tools/client/RetryDecorator.py
@@ -51,24 +51,32 @@ LOGGER = logging.getLogger(__name__)
 def delay_linear(initial=0, increment=0, maximum=None):
     def compute(num_try):
         delay = initial + (num_try - 1) * increment
-        if maximum is not None: delay = max(delay, maximum)
+        if maximum is not None:
+            delay = max(delay, maximum)
         return delay
     return compute
 
 def delay_exponential(initial=1, increment=1, maximum=None):
     def compute(num_try):
         delay = initial * pow(increment, (num_try - 1))
-        if maximum is not None: delay = max(delay, maximum)
+        if maximum is not None:
+            delay = max(delay, maximum)
         return delay
     return compute
 
-def retry(max_retries=0, delay_function=delay_linear(initial=0, increment=0),
-          prepare_method_name=None, prepare_method_args=[], prepare_method_kwargs={}):
+# pylint: disable=dangerous-default-value
+def retry(
+    max_retries=0, delay_function=delay_linear(initial=0, increment=0),
+    prepare_method_name=None, prepare_method_args=list(), prepare_method_kwargs=dict()
+):
     def _reconnect(func):
         def wrapper(self, *args, **kwargs):
             if prepare_method_name is not None:
                 prepare_method = getattr(self, prepare_method_name, None)
-                if prepare_method is None: raise Exception('Prepare Method ({}) not found'.format(prepare_method_name))
+                if prepare_method is None:
+                    MSG = 'Prepare Method ({:s}) not found'
+                    # pylint: disable=broad-exception-raised
+                    raise Exception(MSG.format(prepare_method_name))
             num_try, given_up = 0, False
             while not given_up:
                 try:
@@ -78,14 +86,29 @@ def retry(max_retries=0, delay_function=delay_linear(initial=0, increment=0),
 
                     num_try += 1
                     given_up = num_try > max_retries
-                    if given_up: raise Exception('Giving up... {:d} tries failed'.format(max_retries)) from e
+                    if given_up:
+                        MSG = '[{:s}:{:s}] Giving up... {:d} tries failed'
+                        msg = MSG.format(func.__module__, func.__name__, max_retries)
+                        # pylint: disable=broad-exception-raised
+                        raise Exception(msg) from e
                     if delay_function is not None:
                         delay = delay_function(num_try)
                         time.sleep(delay)
-                        LOGGER.info('Retry {:d}/{:d} after {:f} seconds...'.format(num_try, max_retries, delay))
+                        MSG = '[{:s}:{:s}] Retry {:d}/{:d} after {:f} seconds...'
+                        LOGGER.info(MSG.format(
+                            func.__module__, func.__name__, num_try, max_retries, delay
+                        ))
                     else:
-                        LOGGER.info('Retry {:d}/{:d} immediate...'.format(num_try, max_retries))
+                        MSG = '[{:s}:{:s}] Retry {:d}/{:d} immediate...'
+                        LOGGER.info(MSG.format(
+                            func.__module__, func.__name__, num_try, max_retries
+                        ))
 
-                    if prepare_method_name is not None: prepare_method(*prepare_method_args, **prepare_method_kwargs)
+                    if prepare_method_name is not None:
+                        MSG = '[{:s}:{:s}] Running prepare method...'
+                        LOGGER.debug(MSG.format(
+                            prepare_method.__module__, prepare_method.__name__
+                        ))
+                        prepare_method(*prepare_method_args, **prepare_method_kwargs)
         return wrapper
     return _reconnect
diff --git a/src/common/tools/kafka/Variables.py b/src/common/tools/kafka/Variables.py
index 21e66af137302553663d6e0a6701368bda638017..5c7501b6c07e6aaa26569e2817fca374e6b0c12e 100644
--- a/src/common/tools/kafka/Variables.py
+++ b/src/common/tools/kafka/Variables.py
@@ -41,14 +41,14 @@ class KafkaConfig(Enum):
 
 class KafkaTopic(Enum):
     # TODO: Later to be populated from ENV variable.
-    REQUEST            = 'topic_request' 
-    RESPONSE           = 'topic_response'
+    TELEMETRY_REQUEST  = 'topic_telemetry_request' 
+    TELEMETRY_RESPONSE = 'topic_telemetry_response'
     RAW                = 'topic_raw' 
     LABELED            = 'topic_labeled'
     VALUE              = 'topic_value'
     ALARMS             = 'topic_alarms'
-    ANALYTICS_REQUEST  = 'topic_request_analytics'
-    ANALYTICS_RESPONSE = 'topic_response_analytics'
+    ANALYTICS_REQUEST  = 'topic_analytics_request'
+    ANALYTICS_RESPONSE = 'topic_analytics_response'
 
     @staticmethod
     def create_all_topics() -> bool:
diff --git a/src/common/tools/service/GenericGrpcService.py b/src/common/tools/service/GenericGrpcService.py
index f29582fff87f4ca89ee44c78adbec33f321a9a39..453309127ccf49272d004740c1e3be52cba26779 100644
--- a/src/common/tools/service/GenericGrpcService.py
+++ b/src/common/tools/service/GenericGrpcService.py
@@ -12,18 +12,21 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from typing import Optional, Union
 import grpc, logging
 from concurrent import futures
+from typing import Any, List, Optional, Union
 from grpc_health.v1.health import HealthServicer, OVERALL_HEALTH
 from grpc_health.v1.health_pb2 import HealthCheckResponse
 from grpc_health.v1.health_pb2_grpc import add_HealthServicer_to_server
+from grpc_reflection.v1alpha import reflection
 from common.Settings import get_grpc_bind_address, get_grpc_grace_period, get_grpc_max_workers
 
 class GenericGrpcService:
     def __init__(
-        self, bind_port : Union[str, int], bind_address : Optional[str] = None, max_workers : Optional[int] = None,
-        grace_period : Optional[int] = None, enable_health_servicer : bool = True, cls_name : str = __name__
+        self, bind_port : Union[str, int], bind_address : Optional[str] = None,
+        max_workers : Optional[int] = None, grace_period : Optional[int] = None,
+        enable_health_servicer : bool = True, enable_reflection : bool = True,
+        cls_name : str = __name__
     ) -> None:
         self.logger = logging.getLogger(cls_name)
         self.bind_port = bind_port
@@ -31,6 +34,8 @@ class GenericGrpcService:
         self.max_workers = get_grpc_max_workers() if max_workers is None else max_workers
         self.grace_period = get_grpc_grace_period() if grace_period is None else grace_period
         self.enable_health_servicer = enable_health_servicer
+        self.enable_reflection = enable_reflection
+        self.reflection_service_names : List[str] = [reflection.SERVICE_NAME]
         self.endpoint = None
         self.health_servicer = None
         self.pool = None
@@ -39,6 +44,11 @@ class GenericGrpcService:
     def install_servicers(self):
         pass
 
+    def add_reflection_service_name(self, service_descriptor : Any, service_name : str):
+        self.reflection_service_names.append(
+            service_descriptor.services_by_name[service_name].full_name
+        )
+
     def start(self):
         self.endpoint = '{:s}:{:s}'.format(str(self.bind_address), str(self.bind_port))
         self.logger.info('Starting Service (tentative endpoint: {:s}, max_workers: {:s})...'.format(
@@ -54,6 +64,9 @@ class GenericGrpcService:
                 experimental_non_blocking=True, experimental_thread_pool=futures.ThreadPoolExecutor(max_workers=1))
             add_HealthServicer_to_server(self.health_servicer, self.server)
 
+        if self.enable_reflection:
+            reflection.enable_server_reflection(self.reflection_service_names, self.server)
+
         self.bind_port = self.server.add_insecure_port(self.endpoint)
         self.endpoint = '{:s}:{:s}'.format(str(self.bind_address), str(self.bind_port))
         self.logger.info('Listening on {:s}...'.format(str(self.endpoint)))
diff --git a/src/common/tools/service/GenericGrpcServiceAsync.py b/src/common/tools/service/GenericGrpcServiceAsync.py
index 1d652deb79e1389e2403d1d13debcba7dbc43ecc..551a3d568612f59c2bc26f692ab8d1d27dc4f4b3 100644
--- a/src/common/tools/service/GenericGrpcServiceAsync.py
+++ b/src/common/tools/service/GenericGrpcServiceAsync.py
@@ -12,19 +12,21 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from typing import Optional, Union
-import grpc
-import logging
+import grpc, logging
 from concurrent import futures
+from typing import Any, List, Optional, Union
 from grpc_health.v1.health import HealthServicer, OVERALL_HEALTH
 from grpc_health.v1.health_pb2 import HealthCheckResponse
 from grpc_health.v1.health_pb2_grpc import add_HealthServicer_to_server
+from grpc_reflection.v1alpha import reflection
 from common.Settings import get_grpc_bind_address, get_grpc_grace_period, get_grpc_max_workers
 
 class GenericGrpcServiceAsync:
     def __init__(
-        self, bind_port: Union[str, int], bind_address: Optional[str] = None, max_workers: Optional[int] = None,
-        grace_period: Optional[int] = None, enable_health_servicer: bool = True, cls_name: str = __name__
+        self, bind_port : Union[str, int], bind_address : Optional[str] = None,
+        max_workers : Optional[int] = None, grace_period : Optional[int] = None,
+        enable_health_servicer : bool = True, enable_reflection : bool = True,
+        cls_name : str = __name__
     ) -> None:
         self.logger = logging.getLogger(cls_name)
         self.bind_port = bind_port
@@ -32,6 +34,8 @@ class GenericGrpcServiceAsync:
         self.max_workers = get_grpc_max_workers() if max_workers is None else max_workers
         self.grace_period = get_grpc_grace_period() if grace_period is None else grace_period
         self.enable_health_servicer = enable_health_servicer
+        self.enable_reflection = enable_reflection
+        self.reflection_service_names : List[str] = [reflection.SERVICE_NAME]
         self.endpoint = None
         self.health_servicer = None
         self.pool = None
@@ -40,7 +44,12 @@ class GenericGrpcServiceAsync:
     async def install_servicers(self):
         pass
 
-    async def start(self):
+    def add_reflection_service_name(self, service_descriptor : Any, service_name : str):
+        self.reflection_service_names.append(
+            service_descriptor.services_by_name[service_name].full_name
+        )
+
+    def start(self):
         self.endpoint = '{:s}:{:s}'.format(str(self.bind_address), str(self.bind_port))
         self.logger.info('Starting Service (tentative endpoint: {:s}, max_workers: {:s})...'.format(
             str(self.endpoint), str(self.max_workers)))
@@ -55,6 +64,9 @@ class GenericGrpcServiceAsync:
                 experimental_non_blocking=True, experimental_thread_pool=futures.ThreadPoolExecutor(max_workers=1))
             add_HealthServicer_to_server(self.health_servicer, self.server)
 
+        if self.enable_reflection:
+            reflection.enable_server_reflection(self.reflection_service_names, self.server)
+
         self.bind_port = self.server.add_insecure_port(self.endpoint)
         self.endpoint = '{:s}:{:s}'.format(str(self.bind_address), str(self.bind_port))
         self.logger.info('Listening on {:s}...'.format(str(self.endpoint)))
diff --git a/src/context/service/ContextService.py b/src/context/service/ContextService.py
index a385f4481ec022b475649b749f5206512fe216b2..d633dea15a1e00316c9e8eac9d31ca69829f180f 100644
--- a/src/context/service/ContextService.py
+++ b/src/context/service/ContextService.py
@@ -16,7 +16,9 @@ import logging, sqlalchemy
 from common.Constants import ServiceNameEnum
 from common.Settings import get_service_port_grpc
 from common.message_broker.MessageBroker import MessageBroker
+from common.proto.context_pb2 import DESCRIPTOR as CONTEXT_DESCRIPTOR
 from common.proto.context_pb2_grpc import add_ContextServiceServicer_to_server
+from common.proto.context_policy_pb2 import DESCRIPTOR as CONTEXT_POLICY_DESCRIPTOR
 from common.proto.context_policy_pb2_grpc import add_ContextPolicyServiceServicer_to_server
 from common.tools.service.GenericGrpcService import GenericGrpcService
 from .ContextServiceServicerImpl import ContextServiceServicerImpl
@@ -36,3 +38,6 @@ class ContextService(GenericGrpcService):
     def install_servicers(self):
         add_ContextServiceServicer_to_server(self.context_servicer, self.server)
         add_ContextPolicyServiceServicer_to_server(self.context_servicer, self.server)
+
+        self.add_reflection_service_name(CONTEXT_DESCRIPTOR, 'ContextService')
+        self.add_reflection_service_name(CONTEXT_POLICY_DESCRIPTOR, 'ContextPolicyService')
diff --git a/src/context/service/database/Connection.py b/src/context/service/database/Connection.py
index de45151a5ca95e974e940503aaade83a47faf46c..529c02d6e29b6434b3da0ec03593634b3ab87f08 100644
--- a/src/context/service/database/Connection.py
+++ b/src/context/service/database/Connection.py
@@ -74,7 +74,7 @@ def connection_set(db_engine : Engine, messagebroker : MessageBroker, request :
     _,service_uuid = service_get_uuid(request.service_id, allow_random=False)
     settings = grpc_message_to_json_string(request.settings),
 
-    now = datetime.datetime.utcnow()
+    now = datetime.datetime.now(datetime.timezone.utc)
 
     connection_data = [{
         'connection_uuid': connection_uuid,
diff --git a/src/context/service/database/Context.py b/src/context/service/database/Context.py
index f0cd36f83fb3588976a3fcf515e2e97bd9613f4c..f3ef214c3715ac8c6110e3d5a18c2fb744d2d6db 100644
--- a/src/context/service/database/Context.py
+++ b/src/context/service/database/Context.py
@@ -82,7 +82,8 @@ def context_set(db_engine : Engine, messagebroker : MessageBroker, request : Con
     if len(request.slice_ids) > 0:      # pragma: no cover
         LOGGER.warning('Items in field "slice_ids" ignored. This field is used for retrieval purposes only.')
 
-    now = datetime.datetime.utcnow()
+    now = datetime.datetime.now(datetime.timezone.utc)
+
     context_data = [{
         'context_uuid': context_uuid,
         'context_name': context_name,
diff --git a/src/context/service/database/Device.py b/src/context/service/database/Device.py
index 930b5299f9c77243e5d26c453d051e3ecb455e27..7515f8d68227bd26f5d5384756186394492e5e53 100644
--- a/src/context/service/database/Device.py
+++ b/src/context/service/database/Device.py
@@ -92,7 +92,7 @@ def device_set(db_engine : Engine, messagebroker : MessageBroker, request : Devi
     oper_status = grpc_to_enum__device_operational_status(request.device_operational_status)
     device_drivers = [grpc_to_enum__device_driver(d) for d in request.device_drivers]
 
-    now = datetime.datetime.utcnow()
+    now = datetime.datetime.now(datetime.timezone.utc)
 
     topology_uuids : Set[str] = set()
     related_topologies : List[Dict] = list()
diff --git a/src/context/service/database/Link.py b/src/context/service/database/Link.py
index deef3769cb64e34ae6c300f562c31983a8807286..6244a8517f66280893acb10944a235666beb80d4 100644
--- a/src/context/service/database/Link.py
+++ b/src/context/service/database/Link.py
@@ -22,11 +22,12 @@ from common.proto.context_pb2 import Empty, EventTypeEnum, Link, LinkId, LinkIdL
 from common.message_broker.MessageBroker import MessageBroker
 from common.method_wrappers.ServiceExceptions import NotFoundException
 from common.tools.object_factory.Link import json_link_id
-from context.service.database.uuids.Topology import topology_get_uuid
+from .models.enums.LinkType import grpc_to_enum__link_type_enum
 from .models.LinkModel import LinkModel, LinkEndPointModel
 from .models.TopologyModel import TopologyLinkModel, TopologyModel
 from .uuids.EndPoint import endpoint_get_uuid
 from .uuids.Link import link_get_uuid
+from .uuids.Topology import topology_get_uuid
 from .Events import notify_event_context, notify_event_link, notify_event_topology
 
 LOGGER = logging.getLogger(__name__)
@@ -68,7 +69,9 @@ def link_set(db_engine : Engine, messagebroker : MessageBroker, request : Link)
     link_name = raw_link_uuid if len(raw_link_name) == 0 else raw_link_name
     link_uuid = link_get_uuid(request.link_id, link_name=link_name, allow_random=True)
 
-    now = datetime.datetime.utcnow()
+    link_type = grpc_to_enum__link_type_enum(request.link_type)
+
+    now = datetime.datetime.now(datetime.timezone.utc)
 
     topology_uuids : Set[str] = set()
     related_topologies : List[Dict] = list()
@@ -117,6 +120,7 @@ def link_set(db_engine : Engine, messagebroker : MessageBroker, request : Link)
     link_data = [{
         'link_uuid'           : link_uuid,
         'link_name'           : link_name,
+        'link_type'           : link_type,
         'total_capacity_gbps' : total_capacity_gbps,
         'used_capacity_gbps'  : used_capacity_gbps,
         'created_at'          : now,
@@ -129,6 +133,7 @@ def link_set(db_engine : Engine, messagebroker : MessageBroker, request : Link)
             index_elements=[LinkModel.link_uuid],
             set_=dict(
                 link_name           = stmt.excluded.link_name,
+                link_type           = stmt.excluded.link_type,
                 total_capacity_gbps = stmt.excluded.total_capacity_gbps,
                 used_capacity_gbps  = stmt.excluded.used_capacity_gbps,
                 updated_at          = stmt.excluded.updated_at,
diff --git a/src/context/service/database/OpticalLink.py b/src/context/service/database/OpticalLink.py
index 53fd7bdb5a5964376c6ffb94c6b130b6744f7215..1f45daf43bb805e750b1742e6e4ea7e18039cc43 100644
--- a/src/context/service/database/OpticalLink.py
+++ b/src/context/service/database/OpticalLink.py
@@ -64,7 +64,7 @@ def optical_link_set(db_engine : Engine, messagebroker : MessageBroker, request
     link_name = raw_link_uuid if len(raw_link_name) == 0 else raw_link_name
     link_uuid = link_get_uuid(request.link_id, link_name=link_name, allow_random=True)
 
-    now = datetime.datetime.utcnow()
+    now = datetime.datetime.now(datetime.timezone.utc)
 
     # By default, always add link to default Context/Topology
     topology_uuids : Set[str] = set()
diff --git a/src/context/service/database/PolicyRule.py b/src/context/service/database/PolicyRule.py
index 3d59c59b3ade828450924404d081e237b7a37c1f..ad38838fc127aaee1927f9e44ac0791cef105300 100644
--- a/src/context/service/database/PolicyRule.py
+++ b/src/context/service/database/PolicyRule.py
@@ -84,7 +84,7 @@ def policyrule_set(db_engine : Engine, messagebroker : MessageBroker, request :
         'actionList': json_policyrule_basic.get('actionList', []),
     }, sort_keys=True)
 
-    now = datetime.datetime.utcnow()
+    now = datetime.datetime.now(datetime.timezone.utc)
 
     policyrule_data = [{
         'policyrule_uuid'     : policyrule_uuid,
diff --git a/src/context/service/database/Service.py b/src/context/service/database/Service.py
index c789b291bd15bda1a49d8dd68e78d1875adccfb7..62f07e4fbe4f90af7834358cc79d4c8cb82934f4 100644
--- a/src/context/service/database/Service.py
+++ b/src/context/service/database/Service.py
@@ -91,7 +91,7 @@ def service_set(db_engine : Engine, messagebroker : MessageBroker, request : Ser
 
     service_status = grpc_to_enum__service_status(request.service_status.service_status)
 
-    now = datetime.datetime.utcnow()
+    now = datetime.datetime.now(datetime.timezone.utc)
 
     service_endpoints_data : List[Dict] = list()
     for i,endpoint_id in enumerate(request.service_endpoint_ids):
@@ -180,7 +180,8 @@ def service_unset(db_engine : Engine, messagebroker : MessageBroker, request : S
                 ['should be == request.service_id.context_id.context_uuid.uuid({:s})'.format(raw_context_uuid)])
         service_endpoint_uuids.add(endpoint_get_uuid(endpoint_id, allow_random=False)[2])
 
-    now = datetime.datetime.utcnow()
+    now = datetime.datetime.now(datetime.timezone.utc)
+
     constraints = compose_constraints_data(request.service_constraints, now, service_uuid=service_uuid)
     config_rules = compose_config_rules_data(request.service_config.config_rules, now, service_uuid=service_uuid)
 
diff --git a/src/context/service/database/Slice.py b/src/context/service/database/Slice.py
index 18620e6fc76bbbbf6f445767d92a108f84c20a06..84e210e025e750613387a18c4c7eef4618cdfcdb 100644
--- a/src/context/service/database/Slice.py
+++ b/src/context/service/database/Slice.py
@@ -89,7 +89,7 @@ def slice_set(db_engine : Engine, messagebroker : MessageBroker, request : Slice
 
     slice_status = grpc_to_enum__slice_status(request.slice_status.slice_status)
 
-    now = datetime.datetime.utcnow()
+    now = datetime.datetime.now(datetime.timezone.utc)
 
     slice_endpoints_data : List[Dict] = list()
     for i,endpoint_id in enumerate(request.slice_endpoint_ids):
@@ -222,7 +222,8 @@ def slice_unset(db_engine : Engine, messagebroker : MessageBroker, request : Sli
         for subslice_id in request.slice_subslice_ids
     }
 
-    now = datetime.datetime.utcnow()
+    now = datetime.datetime.now(datetime.timezone.utc)
+
     constraints = compose_constraints_data(request.slice_constraints, now, slice_uuid=slice_uuid)
     config_rules = compose_config_rules_data(request.slice_config.config_rules, now, slice_uuid=slice_uuid)
 
diff --git a/src/context/service/database/Topology.py b/src/context/service/database/Topology.py
index ba2649c69abb025988e576f4978479bc05a5d657..1ee5d16422e94d2b9a2ed4dede461a14e97434ec 100644
--- a/src/context/service/database/Topology.py
+++ b/src/context/service/database/Topology.py
@@ -134,7 +134,8 @@ def topology_set(db_engine : Engine, messagebroker : MessageBroker, request : To
             MSG += 'Items in field "link_ids" ignored. This field is used for retrieval purposes only.'
             LOGGER.warning(MSG)
 
-    now = datetime.datetime.utcnow()
+    now = datetime.datetime.now(datetime.timezone.utc)
+
     topology_data = [{
         'context_uuid' : context_uuid,
         'topology_uuid': topology_uuid,
diff --git a/src/context/service/database/models/LinkModel.py b/src/context/service/database/models/LinkModel.py
index 423e39832201cc19d98a106b136fb545f4e24b7d..1bfa532d843bce4e078ef087fa4659b6fec75ceb 100644
--- a/src/context/service/database/models/LinkModel.py
+++ b/src/context/service/database/models/LinkModel.py
@@ -13,17 +13,22 @@
 # limitations under the License.
 
 import operator
-from sqlalchemy import CheckConstraint, Column, DateTime, Float, ForeignKey, Integer, String
+from sqlalchemy import (
+    CheckConstraint, Column, DateTime, Enum, Float, ForeignKey, Integer, String
+)
 from sqlalchemy.dialects.postgresql import UUID
 from sqlalchemy.orm import relationship
 from typing import Dict
+from common.proto.context_pb2 import LinkTypeEnum
 from ._Base import _Base
+from .enums.LinkType import ORM_LinkTypeEnum
 
 class LinkModel(_Base):
     __tablename__ = 'link'
 
     link_uuid           = Column(UUID(as_uuid=False), primary_key=True)
     link_name           = Column(String, nullable=False)
+    link_type           = Column(Enum(ORM_LinkTypeEnum), nullable=False)
     total_capacity_gbps = Column(Float, nullable=True)
     used_capacity_gbps  = Column(Float, nullable=True)
     created_at          = Column(DateTime, nullable=False)
@@ -44,11 +49,14 @@ class LinkModel(_Base):
         result = {
             'link_id'          : self.dump_id(),
             'name'             : self.link_name,
+            'link_type'        : self.link_type.value,
             'link_endpoint_ids': [
                 link_endpoint.endpoint.dump_id()
                 for link_endpoint in sorted(self.link_endpoints, key=operator.attrgetter('position'))
             ],
         }
+        if self.link_type is None:
+            self.link_type = LinkTypeEnum.LINKTYPE_UNKNOWN
         if self.total_capacity_gbps is not None:
             attributes : Dict = result.setdefault('attributes', dict())
             attributes.setdefault('total_capacity_gbps', self.total_capacity_gbps)
diff --git a/src/context/service/database/models/enums/LinkType.py b/src/context/service/database/models/enums/LinkType.py
new file mode 100644
index 0000000000000000000000000000000000000000..68624af845ea813aa5ca886de97861852a294516
--- /dev/null
+++ b/src/context/service/database/models/enums/LinkType.py
@@ -0,0 +1,33 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import enum, functools
+from common.proto.context_pb2 import LinkTypeEnum
+from ._GrpcToEnum import grpc_to_enum
+
+# IMPORTANT: Entries of enum class ORM_LinkTypeEnum should be named as in
+#            the proto files removing the prefixes. For example, proto item
+#            LinkTypeEnum.DEVICEDRIVER_COPPER should be included as COPPER.
+#            If item name does not match, automatic mapping of proto enums
+#            to database enums will fail.
+class ORM_LinkTypeEnum(enum.Enum):
+    UNKNOWN = LinkTypeEnum.LINKTYPE_UNKNOWN
+    COPPER  = LinkTypeEnum.LINKTYPE_COPPER
+    FIBER   = LinkTypeEnum.LINKTYPE_FIBER
+    RADIO   = LinkTypeEnum.LINKTYPE_RADIO
+    VIRTUAL = LinkTypeEnum.LINKTYPE_VIRTUAL
+
+grpc_to_enum__link_type_enum = functools.partial(
+    grpc_to_enum, LinkTypeEnum, ORM_LinkTypeEnum
+)
diff --git a/src/device/requirements.in b/src/device/requirements.in
index c89303df34d5562fdc2a7e83be76973578660ba5..ca2cdea47bb1ec1045a8bb8c35d64999b8f77f85 100644
--- a/src/device/requirements.in
+++ b/src/device/requirements.in
@@ -24,13 +24,13 @@ Flask-HTTPAuth==4.5.0
 Flask-RESTful==0.3.9
 ipaddress
 Jinja2==3.0.3
-libyang==2.8.0
+libyang==2.8.4
 macaddress
 ncclient==0.6.15
 numpy<2.0.0
 p4runtime==1.3.0
 pandas==1.5.*
-paramiko==2.9.2
+paramiko==2.11.*
 pyang==2.6.*
 git+https://github.com/robshakir/pyangbind.git
 python-json-logger==2.0.2
diff --git a/src/device/service/DeviceService.py b/src/device/service/DeviceService.py
index a94259471e76e40ddc5c6a1f2c109e8ada5075ae..a5a48e1bf80bce67fccd32316fa92935428d5b65 100644
--- a/src/device/service/DeviceService.py
+++ b/src/device/service/DeviceService.py
@@ -12,10 +12,11 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import os
 from common.Constants import ServiceNameEnum
 from common.Settings import get_service_port_grpc
+from common.proto.device_pb2 import DESCRIPTOR as DEVICE_DESCRIPTOR
 from common.proto.device_pb2_grpc import add_DeviceServiceServicer_to_server
+from common.proto.optical_device_pb2 import DESCRIPTOR as OPTICAL_DEVICE_DESCRIPTOR
 from common.proto.optical_device_pb2_grpc import add_OpenConfigServiceServicer_to_server
 from common.tools.service.GenericGrpcService import GenericGrpcService
 from device.Config import LOAD_ALL_DEVICE_DRIVERS
@@ -41,8 +42,11 @@ class DeviceService(GenericGrpcService):
     def install_servicers(self):
         self.monitoring_loops.start()
         add_DeviceServiceServicer_to_server(self.device_servicer, self.server)
+        self.add_reflection_service_name(DEVICE_DESCRIPTOR, 'DeviceService')
+
         if LOAD_ALL_DEVICE_DRIVERS:
             add_OpenConfigServiceServicer_to_server(self.openconfig_device_servicer,self.server)
+            self.add_reflection_service_name(OPTICAL_DEVICE_DESCRIPTOR, 'OpenConfigService')
 
     def stop(self):
         super().stop()
diff --git a/src/device/service/driver_api/_Driver.py b/src/device/service/driver_api/_Driver.py
index 2580c3e785450f7be1972679872c3d16db39c714..e838e5b3d3cfca353fd4994fd60ad387b5f6766d 100644
--- a/src/device/service/driver_api/_Driver.py
+++ b/src/device/service/driver_api/_Driver.py
@@ -25,12 +25,15 @@ RESOURCE_ROUTING_POLICIES = '__routing_policies__'
 RESOURCE_SERVICES = '__services__'
 RESOURCE_ACL = '__acl__'
 RESOURCE_INVENTORY = '__inventory__'
+RESOURCE_RULES = "__rules__"
 
 
 class _Driver:
     def __init__(self, name : str, address: str, port: int, **settings) -> None:
         """ Initialize Driver.
             Parameters:
+                name : str
+                    Device driver name
                 address : str
                     The address of the device
                 port : int
diff --git a/src/device/service/drivers/gnmi_openconfig/GnmiSessionHandler.py b/src/device/service/drivers/gnmi_openconfig/GnmiSessionHandler.py
index 00409dfbdf0f1932da4cedef9c02dccbb5be5ad0..03a55f472d2d4d4cd6726795fe6000c4fb68f95b 100644
--- a/src/device/service/drivers/gnmi_openconfig/GnmiSessionHandler.py
+++ b/src/device/service/drivers/gnmi_openconfig/GnmiSessionHandler.py
@@ -40,7 +40,6 @@ class GnmiSessionHandler:
         self._use_tls   = settings.get('use_tls', False)
         self._channel : Optional[grpc.Channel] = None
         self._stub : Optional[gNMIStub] = None
-        self._yang_handler = None
         self._monit_thread = None
         self._yang_handler = YangHandler()
         self._subscriptions = Subscriptions()
diff --git a/src/device/service/drivers/gnmi_openconfig/examples/libyang_examples.py b/src/device/service/drivers/gnmi_openconfig/examples/libyang_examples.py
new file mode 100644
index 0000000000000000000000000000000000000000..f16be652b753ca24fb7c16b361d43781328d97d4
--- /dev/null
+++ b/src/device/service/drivers/gnmi_openconfig/examples/libyang_examples.py
@@ -0,0 +1,162 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import json, libyang, logging, os
+from typing import Dict
+
+logging.basicConfig(level=logging.DEBUG)
+LOGGER = logging.getLogger(__name__)
+
+YANG_BASE_PATH = '/home/tfs/tfs-ctrl/src/device/service/drivers/gnmi_openconfig/git/openconfig/public'
+YANG_SEARCH_PATHS = ':'.join([
+    os.path.join(YANG_BASE_PATH, 'release'),
+    os.path.join(YANG_BASE_PATH, 'third_party'),
+])
+
+YANG_MODULES = [
+    'iana-if-type',
+    'openconfig-bgp-types',
+    'openconfig-vlan-types',
+
+    'openconfig-interfaces',
+    'openconfig-if-8021x',
+    'openconfig-if-aggregate',
+    'openconfig-if-ethernet-ext',
+    'openconfig-if-ethernet',
+    'openconfig-if-ip-ext',
+    'openconfig-if-ip',
+    'openconfig-if-poe',
+    'openconfig-if-sdn-ext',
+    'openconfig-if-tunnel',
+
+    'openconfig-vlan',
+
+    'openconfig-types',
+    'openconfig-policy-types',
+    'openconfig-mpls-types',
+    'openconfig-network-instance-types',
+    'openconfig-network-instance',
+
+    'openconfig-platform',
+    'openconfig-platform-controller-card',
+    'openconfig-platform-cpu',
+    'openconfig-platform-ext',
+    'openconfig-platform-fabric',
+    'openconfig-platform-fan',
+    'openconfig-platform-integrated-circuit',
+    'openconfig-platform-linecard',
+    'openconfig-platform-pipeline-counters',
+    'openconfig-platform-port',
+    'openconfig-platform-psu',
+    'openconfig-platform-software',
+    'openconfig-platform-transceiver',
+    'openconfig-platform-types',
+]
+
+class YangHandler:
+    def __init__(self) -> None:
+        self._yang_context = libyang.Context(YANG_SEARCH_PATHS)
+        self._loaded_modules = set()
+        for yang_module_name in YANG_MODULES:
+            LOGGER.info('Loading module: {:s}'.format(str(yang_module_name)))
+            self._yang_context.load_module(yang_module_name).feature_enable_all()
+            self._loaded_modules.add(yang_module_name)
+        self._data_path_instances = dict()
+
+    def get_data_paths(self) -> Dict[str, libyang.DNode]:
+        return self._data_path_instances
+
+    def get_data_path(self, path : str) -> libyang.DNode:
+        data_path_instance = self._data_path_instances.get(path)
+        if data_path_instance is None:
+            data_path_instance = self._yang_context.create_data_path(path)
+            self._data_path_instances[path] = data_path_instance
+        return data_path_instance
+
+    def destroy(self) -> None:
+        self._yang_context.destroy()
+
+def main():
+    yang_handler = YangHandler()
+
+    LOGGER.info('YangHandler Data (before):')
+    for path, dnode in yang_handler.get_data_paths().items():
+        LOGGER.info('|-> {:s}: {:s}'.format(str(path), json.dumps(dnode.print_dict())))
+
+    if_name        = 'eth1'
+    sif_index      = 0
+    enabled        = True
+    address_ip     = '172.16.0.1'
+    address_ip2    = '192.168.0.1'
+    address_prefix = 24
+    mtu            = 1500
+
+    yang_ifs : libyang.DContainer = yang_handler.get_data_path('/openconfig-interfaces:interfaces')
+    yang_if_path = 'interface[name="{:s}"]'.format(if_name)
+    yang_if : libyang.DContainer = yang_ifs.create_path(yang_if_path)
+    yang_if.create_path('config/name',    if_name)
+    yang_if.create_path('config/enabled', enabled)
+    yang_if.create_path('config/mtu',     mtu    )
+
+    yang_sifs : libyang.DContainer = yang_if.create_path('subinterfaces')
+    yang_sif_path = 'subinterface[index="{:d}"]'.format(sif_index)
+    yang_sif : libyang.DContainer = yang_sifs.create_path(yang_sif_path)
+    yang_sif.create_path('config/index',   sif_index)
+    yang_sif.create_path('config/enabled', enabled  )
+
+    yang_ipv4 : libyang.DContainer = yang_sif.create_path('openconfig-if-ip:ipv4')
+    yang_ipv4.create_path('config/enabled', enabled)
+
+    yang_ipv4_addrs : libyang.DContainer = yang_ipv4.create_path('addresses')
+    yang_ipv4_addr_path = 'address[ip="{:s}"]'.format(address_ip)
+    yang_ipv4_addr : libyang.DContainer = yang_ipv4_addrs.create_path(yang_ipv4_addr_path)
+    yang_ipv4_addr.create_path('config/ip',            address_ip    )
+    yang_ipv4_addr.create_path('config/prefix-length', address_prefix)
+
+    yang_ipv4_addr_path2 = 'address[ip="{:s}"]'.format(address_ip2)
+    yang_ipv4_addr2 : libyang.DContainer = yang_ipv4_addrs.create_path(yang_ipv4_addr_path2)
+    yang_ipv4_addr2.create_path('config/ip',            address_ip2   )
+    yang_ipv4_addr2.create_path('config/prefix-length', address_prefix)
+
+    str_data = yang_if.print_mem('json')
+    json_data = json.loads(str_data)
+    json_data = json_data['openconfig-interfaces:interface'][0]
+    str_data = json.dumps(json_data, indent=4)
+    LOGGER.info('Resulting Request (before unlink): {:s}'.format(str_data))
+
+    yang_ipv4_addr2.unlink()
+
+    root_node : libyang.DContainer = yang_handler.get_data_path('/openconfig-interfaces:interfaces')
+    LOGGER.info('root_node={:s}'.format(str(root_node.print_mem('json'))))
+
+    for s in root_node.siblings():
+        LOGGER.info('sibling: {:s}'.format(str(s)))
+
+    PATH_TMPL = '/openconfig-interfaces:interfaces/interface[name="{:s}"]/subinterfaces/subinterface[index="{:d}"]'
+    yang_sif = root_node.find_path(PATH_TMPL.format(if_name, sif_index))
+    if yang_sif is not None:
+        LOGGER.info('yang_sif={:s}'.format(str(yang_sif.print_mem('json'))))
+        yang_sif.unlink()
+        yang_sif.free()
+
+    str_data = yang_if.print_mem('json')
+    json_data = json.loads(str_data)
+    json_data = json_data['openconfig-interfaces:interface'][0]
+    str_data = json.dumps(json_data, indent=4)
+    LOGGER.info('Resulting Request (after unlink): {:s}'.format(str_data))
+
+    yang_handler.destroy()
+
+if __name__ == '__main__':
+    main()
diff --git a/src/device/service/drivers/gnmi_openconfig/handlers/Interface.py b/src/device/service/drivers/gnmi_openconfig/handlers/Interface.py
index fda3ab71be3b2c82020e93f92cf159da38e5eef4..ed833b647d9c856cd7e54c5258b14924d187eb9f 100644
--- a/src/device/service/drivers/gnmi_openconfig/handlers/Interface.py
+++ b/src/device/service/drivers/gnmi_openconfig/handlers/Interface.py
@@ -34,6 +34,21 @@ class InterfaceHandler(_Handler):
             PATH_TMPL = '/interfaces/interface[name={:s}]/subinterfaces/subinterface[index={:d}]'
             str_path = PATH_TMPL.format(if_name, sif_index)
             str_data = json.dumps({})
+
+            root_node : libyang.DContainer = yang_handler.get_data_path(
+                '/openconfig-interfaces:interfaces'
+            )
+            yang_sif = root_node.find_path('/'.join([
+                '', # add slash at the beginning
+                'openconfig-interfaces:interfaces',
+                'interface[name="{:s}"]'.format(if_name),
+                'subinterfaces',
+                'subinterface[index="{:d}"]'.format(sif_index),
+            ]))
+            if yang_sif is not None:
+                yang_sif.unlink()
+                yang_sif.free()
+
             return str_path, str_data
 
         enabled        = get_bool(resource_value, 'enabled',  True) # True/False
@@ -69,7 +84,6 @@ class InterfaceHandler(_Handler):
             yang_ipv4_addr : libyang.DContainer = yang_ipv4_addrs.create_path(yang_ipv4_addr_path)
             yang_ipv4_addr.create_path('config/ip',            address_ip)
             yang_ipv4_addr.create_path('config/prefix-length', address_prefix)
-            if mtu is not None: yang_ipv4_addr.create_path('config/mtu', mtu)
 
         str_path = '/interfaces/interface[name={:s}]'.format(if_name)
         str_data = yang_if.print_mem('json')
diff --git a/src/device/service/drivers/gnmi_openconfig/handlers/NetworkInstanceInterface.py b/src/device/service/drivers/gnmi_openconfig/handlers/NetworkInstanceInterface.py
index 2a4c19baa7ccdcc177e2724609a87636d1398a8a..f6f61a32403f154578da0247d0e1db24a727b017 100644
--- a/src/device/service/drivers/gnmi_openconfig/handlers/NetworkInstanceInterface.py
+++ b/src/device/service/drivers/gnmi_openconfig/handlers/NetworkInstanceInterface.py
@@ -36,15 +36,13 @@ class NetworkInstanceInterfaceHandler(_Handler):
 
         if IS_CEOS: ni_if_id = if_name
 
+        PATH_TMPL = '/network-instances/network-instance[name={:s}]/interfaces/interface[id={:s}]'
+        str_path = PATH_TMPL.format(ni_name, ni_if_id)
+
         if delete:
-            PATH_TMPL = '/network-instances/network-instance[name={:s}]/interfaces/interface[id={:s}]'
-            str_path = PATH_TMPL.format(ni_name, ni_if_id)
             str_data = json.dumps({})
             return str_path, str_data
 
-        str_path = '/network-instances/network-instance[name={:s}]/interfaces/interface[id={:s}]'.format(
-            ni_name, ni_if_id
-        )
         #str_data = json.dumps({
         #    'id': if_id,
         #    'config': {'id': if_id, 'interface': if_name, 'subinterface': sif_index},
diff --git a/src/device/service/drivers/p4/p4_common.py b/src/device/service/drivers/p4/p4_common.py
index ec851493777243829737136722198173580fbadd..b55296a65922de93370a66301254cacf9ca7220a 100644
--- a/src/device/service/drivers/p4/p4_common.py
+++ b/src/device/service/drivers/p4/p4_common.py
@@ -27,10 +27,12 @@ import math
 import re
 import socket
 import ipaddress
+from typing import Any, Dict, List, Optional, Tuple
 from ctypes import c_uint16, sizeof
 import macaddress
 
-from common.type_checkers.Checkers import chk_type
+from common.type_checkers.Checkers import \
+    chk_attribute, chk_string, chk_type, chk_issubclass
 try:
     from .p4_exception import UserBadValueError
 except ImportError:
@@ -38,6 +40,7 @@ except ImportError:
 
 P4_ATTR_DEV_ID = "id"
 P4_ATTR_DEV_NAME = "name"
+P4_ATTR_DEV_ENDPOINTS = "endpoints"
 P4_ATTR_DEV_VENDOR = "vendor"
 P4_ATTR_DEV_HW_VER = "hw_ver"
 P4_ATTR_DEV_SW_VER = "sw_ver"
@@ -50,6 +53,7 @@ P4_VAL_DEF_HW_VER = "BMv2 simple_switch"
 P4_VAL_DEF_SW_VER = "Stratum"
 P4_VAL_DEF_TIMEOUT = 60
 
+RESOURCE_ENDPOINTS_ROOT_PATH = "/endpoints"
 
 # Logger instance
 LOGGER = logging.getLogger(__name__)
@@ -422,6 +426,28 @@ def parse_action_parameters_from_json(resource):
     return action_params
 
 
+def parse_replicas_from_json(resource):
+    """
+    Parse the session replicas within a JSON-based object.
+
+    :param resource: JSON-based object
+    :return: map of replicas
+    """
+    if not resource or ("replicas" not in resource):
+        LOGGER.warning(
+            "JSON entry misses 'replicas' list of attributes")
+        return None
+    chk_type("replicas", resource["replicas"], list)
+
+    replicas = {}
+    for rep in resource["replicas"]:
+        chk_type("egress-port", rep["egress-port"], int)
+        chk_type("instance", rep["instance"], int)
+        replicas[rep["egress-port"]] = rep["instance"]
+
+    return replicas
+
+
 def parse_integer_list_from_json(resource, resource_list, resource_item):
     """
     Parse the list of integers within a JSON-based object.
@@ -443,3 +469,77 @@ def parse_integer_list_from_json(resource, resource_list, resource_item):
         integers_list.append(item[resource_item])
 
     return integers_list
+
+def process_optional_string_field(
+    #TODO: Consider adding this in common methdos as it is taken by the Emulated driver
+    endpoint_data : Dict[str, Any], field_name : str, endpoint_resource_value : Dict[str, Any]
+) -> None:
+    field_value = chk_attribute(field_name, endpoint_data, 'endpoint_data', default=None)
+    if field_value is None: return
+    chk_string('endpoint_data.{:s}'.format(field_name), field_value)
+    if len(field_value) > 0: endpoint_resource_value[field_name] = field_value
+
+def compose_resource_endpoints(endpoints_list : List[Tuple[str, Any]]):
+    #TODO: Consider adding this in common methods; currently taken by the Emulated driver
+    endpoint_resources = []
+    for i, endpoint in enumerate(endpoints_list):
+        LOGGER.debug("P4 endpoint {}: {}".format(i, endpoint))
+        endpoint_resource = compose_resource_endpoint(endpoint)
+        if endpoint_resource is None: continue
+        endpoint_resources.append(endpoint_resource)
+    return endpoint_resources
+
+def compose_resource_endpoint(endpoint_data : Dict[str, Any]) -> Optional[Tuple[str, Dict]]:
+    #TODO: Consider adding this in common methods; currently taken by the Emulated driver
+    try:
+        endpoint_uuid = chk_attribute('uuid', endpoint_data, 'endpoint_data')
+        chk_string('endpoint_data.uuid', endpoint_uuid, min_length=1)
+        endpoint_resource_path = RESOURCE_ENDPOINTS_ROOT_PATH
+        endpoint_resource_key = '{:s}/endpoint[{:s}]'.format(endpoint_resource_path, endpoint_uuid)
+        endpoint_resource_value = {'uuid': endpoint_uuid}
+
+        # Check endpoint's optional string fields
+        process_optional_string_field(endpoint_data, 'name', endpoint_resource_value)
+        process_optional_string_field(endpoint_data, 'type', endpoint_resource_value)
+        process_optional_string_field(endpoint_data, 'context_uuid', endpoint_resource_value)
+        process_optional_string_field(endpoint_data, 'topology_uuid', endpoint_resource_value)
+
+        return endpoint_resource_key, endpoint_resource_value
+    except: # pylint: disable=bare-except
+        LOGGER.error('Problem composing endpoint({:s})'.format(str(endpoint_data)))
+        return None
+
+def compose_resource_rules(rules_list : List[Tuple[str, Any]]):
+    rule_resources = []
+    for i, rule in enumerate(rules_list):
+        rule_resource = compose_resource_rule(rule_data=rule, rule_cnt=i)
+        if rule_resource is None: continue
+        rule_resources.append(rule_resource)
+    return rule_resources
+
+def compose_resource_rule(rule_data : Dict[str, Any], rule_cnt : int) -> Optional[Tuple[str, Dict]]:
+    try:
+        LOGGER.info("Rule: {}".format(rule_data))
+
+        rule_resource_key = chk_attribute('resource_key', rule_data, 'rule_data')
+        chk_string('rule_data.resource_key', rule_resource_key, min_length=1)
+
+        rule_resource_value = chk_attribute('resource_value', rule_data, 'rule_data')
+        chk_issubclass('rule_data.resource_value', rule_resource_value, dict)
+
+        rule_key_unique = ""
+
+        if "table" == rule_resource_key:
+            table_name = parse_resource_string_from_json(rule_resource_value, "table-name")
+            assert table_name, "Invalid table name in rule"
+            rule_key_unique = '/{0}s/{0}/{1}[{2}]'.format(rule_resource_key, table_name, rule_cnt)
+        else:
+            msg = f"Parsed an invalid key {rule_resource_key}"
+            LOGGER.error(msg)
+            raise Exception(msg)
+
+        assert rule_key_unique, "Invalid unique resource key"
+        return rule_key_unique, rule_resource_value
+    except: # pylint: disable=bare-except
+        LOGGER.error('Problem composing rule({:s})'.format(str(rule_data)))
+        return None
diff --git a/src/device/service/drivers/p4/p4_context.py b/src/device/service/drivers/p4/p4_context.py
index ca8f0c19ef6cecdc361664323bbe2cd8beed64e3..ce8e308e8b2f55aa37c7cf06b6a56fdf7dc3bd7f 100644
--- a/src/device/service/drivers/p4/p4_context.py
+++ b/src/device/service/drivers/p4/p4_context.py
@@ -34,6 +34,7 @@ class P4Type(enum.Enum):
     meter = 6
     direct_meter = 7
     controller_packet_metadata = 8
+    digest = 9
 
 
 P4Type.table.p4info_name = "tables"
@@ -44,6 +45,7 @@ P4Type.direct_counter.p4info_name = "direct_counters"
 P4Type.meter.p4info_name = "meters"
 P4Type.direct_meter.p4info_name = "direct_meters"
 P4Type.controller_packet_metadata.p4info_name = "controller_packet_metadata"
+P4Type.digest.p4info_name = "digests"
 
 for object_type in P4Type:
     object_type.pretty_name = object_type.name.replace('_', ' ')
@@ -58,11 +60,12 @@ class P4RuntimeEntity(enum.Enum):
     table_entry = 1
     action_profile_member = 2
     action_profile_group = 3
-    meter_entry = 4
-    direct_meter_entry = 5
-    counter_entry = 6
-    direct_counter_entry = 7
+    counter_entry = 4
+    direct_counter_entry = 5
+    meter_entry = 6
+    direct_meter_entry = 7
     packet_replication_engine_entry = 8
+    digest_entry = 9
 
 
 class Context:
diff --git a/src/device/service/drivers/p4/p4_driver.py b/src/device/service/drivers/p4/p4_driver.py
index d31fa46738fad9f9404c8ba21dfbc49b08fde074..c89a42baddaf45737ebfcf26a665f0a6beb8544f 100644
--- a/src/device/service/drivers/p4/p4_driver.py
+++ b/src/device/service/drivers/p4/p4_driver.py
@@ -23,15 +23,19 @@ import threading
 from typing import Any, Iterator, List, Optional, Tuple, Union
 from common.method_wrappers.Decorator import MetricsPool, metered_subclass_method
 from common.type_checkers.Checkers import chk_type, chk_length, chk_string
+from device.service.driver_api._Driver import RESOURCE_ENDPOINTS, RESOURCE_RULES
 from .p4_common import matches_ipv4, matches_ipv6, valid_port,\
-    P4_ATTR_DEV_ID, P4_ATTR_DEV_NAME, P4_ATTR_DEV_VENDOR,\
-    P4_ATTR_DEV_HW_VER, P4_ATTR_DEV_SW_VER,\
+    compose_resource_endpoints, parse_resource_string_from_json,\
+    P4_ATTR_DEV_ID, P4_ATTR_DEV_NAME, P4_ATTR_DEV_ENDPOINTS,\
+    P4_ATTR_DEV_VENDOR, P4_ATTR_DEV_HW_VER, P4_ATTR_DEV_SW_VER,\
     P4_ATTR_DEV_P4BIN, P4_ATTR_DEV_P4INFO, P4_ATTR_DEV_TIMEOUT,\
     P4_VAL_DEF_VENDOR, P4_VAL_DEF_HW_VER, P4_VAL_DEF_SW_VER,\
     P4_VAL_DEF_TIMEOUT
-from .p4_manager import P4Manager, KEY_TABLE, KEY_ACTION, \
-    KEY_ACTION_PROFILE, KEY_COUNTER, KEY_DIR_COUNTER, KEY_METER, KEY_DIR_METER,\
-    KEY_CTL_PKT_METADATA
+from .p4_manager import P4Manager, \
+    KEY_TABLE, KEY_ACTION, KEY_ACTION_PROFILE, \
+    KEY_COUNTER, KEY_DIR_COUNTER, KEY_METER, KEY_DIR_METER,\
+    KEY_CTL_PKT_METADATA, KEY_DIGEST, KEY_CLONE_SESSION,\
+    KEY_ENDPOINT
 from .p4_client import WriteOperation
 
 try:
@@ -59,6 +63,8 @@ class P4Driver(_Driver):
             P4 device datapath ID (Mandatory)
         name : str
             P4 device name (Optional)
+        endpoints : list
+            List of P4 device endpoints, i.e., ports (Optional)
         vendor : str
             P4 device vendor (Optional)
         hw_ver : str
@@ -70,17 +76,22 @@ class P4Driver(_Driver):
         p4info : str
             Path to P4 info file (Optional, but must be combined with p4bin)
         timeout : int
-            Device timeout in seconds (Optional)
+            P4 device timeout in seconds (Optional)
+        rules : list
+            List of rules to configure the P4 device's pipeline
     """
 
     def __init__(self, address: str, port: int, **settings) -> None:
-        super().__init__(settings.pop('name', DRIVER_NAME), address, port, **settings)
+        super().__init__(name=DRIVER_NAME, address=address, port=port, setting=settings)
         self.__manager = None
         self.__address = address
         self.__port = int(port)
-        self.__endpoint = None
+        self.__grpc_endpoint = None
         self.__settings = settings
         self.__id = None
+        self.__name = None
+        self.__endpoints = []
+        self.__rules = {}
         self.__vendor = P4_VAL_DEF_VENDOR
         self.__hw_version = P4_VAL_DEF_HW_VER
         self.__sw_version = P4_VAL_DEF_SW_VER
@@ -97,7 +108,7 @@ class P4Driver(_Driver):
                     self.__address, self.__port)
 
         for key, value in settings.items():
-            LOGGER.info("\t%8s = %s", key, value)
+            LOGGER.info("\t%9s = %s", key, value)
 
     def Connect(self) -> bool:
         """
@@ -105,14 +116,14 @@ class P4Driver(_Driver):
 
         :return: boolean connection status.
         """
-        LOGGER.info("Connecting to P4 device %s ...", self.__endpoint)
+        LOGGER.info("Connecting to P4 device %s ...", self.__grpc_endpoint)
 
         with self.__lock:
             # Skip if already connected
             if self.__started.is_set():
                 return True
 
-            # Dynamically devise an election ID
+            # TODO: Dynamically devise an election ID
             election_id = (1, 0)
 
             # Spawn a P4 manager for this device
@@ -140,7 +151,7 @@ class P4Driver(_Driver):
 
         :return: boolean disconnection status.
         """
-        LOGGER.info("Disconnecting from P4 device %s ...", self.__endpoint)
+        LOGGER.info("Disconnecting from P4 device %s ...", self.__grpc_endpoint)
 
         # If not started, assume it is already disconnected
         if not self.__started.is_set():
@@ -167,13 +178,15 @@ class P4Driver(_Driver):
 
         :return: list of initial configuration items.
         """
-        initial_conf = []
+
+        resource_keys = [RESOURCE_ENDPOINTS] if self.__endpoints else []
 
         with self.__lock:
-            if not initial_conf:
-                LOGGER.warning("No initial configuration for P4 device %s ...",
-                               self.__endpoint)
-            return []
+            if not resource_keys:
+                LOGGER.warning("No initial configuration for P4 device {} ...".format(self.__grpc_endpoint))
+                return []
+            LOGGER.info("Initial configuration for P4 device {}:".format(self.__grpc_endpoint))
+            return self.GetConfig(resource_keys)
 
     @metered_subclass_method(METRICS_POOL)
     def GetConfig(self, resource_keys: List[str] = [])\
@@ -186,7 +199,7 @@ class P4Driver(_Driver):
         None/Exception.
         """
         LOGGER.info(
-            "Getting configuration from P4 device %s ...", self.__endpoint)
+            "Getting configuration from P4 device %s ...", self.__grpc_endpoint)
 
         # No resource keys means fetch all configuration
         if len(resource_keys) == 0:
@@ -195,7 +208,7 @@ class P4Driver(_Driver):
                 "implies getting all resource keys!")
             resource_keys = [
                 obj_name for obj_name, _ in self.__manager.p4_objects.items()
-            ]
+            ] + [RESOURCE_ENDPOINTS] + [RESOURCE_RULES]
 
         # Verify the input type
         chk_type("resources", resource_keys, list)
@@ -214,7 +227,7 @@ class P4Driver(_Driver):
         changes requested.
         """
         LOGGER.info(
-            "Setting configuration to P4 device %s ...", self.__endpoint)
+            "Setting configuration to P4 device %s ...", self.__grpc_endpoint)
 
         if not resources or len(resources) == 0:
             LOGGER.warning(
@@ -238,7 +251,7 @@ class P4Driver(_Driver):
         deletions requested.
         """
         LOGGER.info(
-            "Deleting configuration from P4 device %s ...", self.__endpoint)
+            "Deleting configuration from P4 device %s ...", self.__grpc_endpoint)
 
         if not resources or len(resources) == 0:
             LOGGER.warning(
@@ -308,6 +321,14 @@ class P4Driver(_Driver):
         """
         return self.__manager
 
+    def is_started(self):
+        """
+        Check if an instance of the P4 manager is started.
+
+        :return: boolean P4 manager instance status
+        """
+        return self.__started.is_set()
+
     def __parse_and_validate_settings(self):
         """
         Verify that the driver inputs comply to what is expected.
@@ -319,7 +340,7 @@ class P4Driver(_Driver):
             f"{self.__address} not a valid IPv4 or IPv6 address"
         assert valid_port(self.__port), \
             f"{self.__port} not a valid transport port"
-        self.__endpoint = f"{self.__address}:{self.__port}"
+        self.__grpc_endpoint = f"{self.__address}:{self.__port}"
 
         # Device ID
         try:
@@ -337,6 +358,16 @@ class P4Driver(_Driver):
                 "No device name is provided. Setting default name: %s",
                 self.__name)
 
+        # Device endpoints
+        if P4_ATTR_DEV_ENDPOINTS in self.__settings:
+            endpoints = self.__settings.get(P4_ATTR_DEV_ENDPOINTS, [])
+            endpoint_resources = compose_resource_endpoints(endpoints)
+            if endpoint_resources:
+                LOGGER.info("Setting endpoints: {}".format(endpoint_resources))
+                self.SetConfig(endpoint_resources)
+        else:
+            LOGGER.warning("No device endpoints are provided.")
+
         # Device vendor
         if P4_ATTR_DEV_VENDOR in self.__settings:
             self.__vendor = self.__settings.get(P4_ATTR_DEV_VENDOR)
@@ -365,7 +396,7 @@ class P4Driver(_Driver):
         if P4_ATTR_DEV_P4BIN in self.__settings:
             self.__p4bin_path = self.__settings.get(P4_ATTR_DEV_P4BIN)
             assert os.path.exists(self.__p4bin_path),\
-                "Invalid path to p4bin file"
+                "Invalid path to p4bin file: {}".format(self.__p4bin_path)
             assert P4_ATTR_DEV_P4INFO in self.__settings,\
                 "p4info and p4bin settings must be provided together"
 
@@ -373,7 +404,7 @@ class P4Driver(_Driver):
         if P4_ATTR_DEV_P4INFO in self.__settings:
             self.__p4info_path = self.__settings.get(P4_ATTR_DEV_P4INFO)
             assert os.path.exists(self.__p4info_path),\
-                "Invalid path to p4info file"
+                "Invalid path to p4info file: {}".format(self.__p4info_path)
             assert P4_ATTR_DEV_P4BIN in self.__settings,\
                 "p4info and p4bin settings must be provided together"
 
@@ -404,7 +435,7 @@ class P4Driver(_Driver):
         """
         resources = []
 
-        LOGGER.debug("GetConfig() -> Keys: %s", resource_keys)
+        LOGGER.info("GetConfig() -> Keys: {}".format(resource_keys))
 
         for resource_key in resource_keys:
             entries = []
@@ -423,8 +454,7 @@ class P4Driver(_Driver):
                             entries.append(c_entries)
                 elif KEY_DIR_COUNTER == resource_key:
                     for d_cnt_name in self.__manager.get_direct_counter_names():
-                        dc_entries = \
-                            self.__manager.direct_counter_entries_to_json(
+                        dc_entries = self.__manager.direct_counter_entries_to_json(
                                 d_cnt_name)
                         if dc_entries:
                             entries.append(dc_entries)
@@ -436,28 +466,35 @@ class P4Driver(_Driver):
                             entries.append(m_entries)
                 elif KEY_DIR_METER == resource_key:
                     for d_meter_name in self.__manager.get_direct_meter_names():
-                        dm_entries = \
-                            self.__manager.direct_meter_entries_to_json(
+                        dm_entries = self.__manager.direct_meter_entries_to_json(
                                 d_meter_name)
                         if dm_entries:
                             entries.append(dm_entries)
                 elif KEY_ACTION_PROFILE == resource_key:
                     for ap_name in self.__manager.get_action_profile_names():
-                        ap_entries = \
-                            self.__manager.action_prof_member_entries_to_json(
+                        ap_entries = self.__manager.action_prof_member_entries_to_json(
                                 ap_name)
                         if ap_entries:
                             entries.append(ap_entries)
                 elif KEY_ACTION == resource_key:
-                    #To be implemented or deprecated
-                    pass
-                elif '__endpoints__' == resource_key:
-                    #Not Supported for P4 devices
+                    # To be implemented or deprecated
                     pass
                 elif KEY_CTL_PKT_METADATA == resource_key:
+                    #TODO: Handle controller packet metadata
                     msg = f"{resource_key.capitalize()} is not a " \
                           f"retrievable resource"
-                    raise Exception(msg)
+                    LOGGER.warning("%s", msg)
+                elif KEY_DIGEST == resource_key:
+                    #TODO: Handle digests
+                    msg = f"{resource_key.capitalize()} is not a " \
+                          f"retrievable resource"
+                    LOGGER.warning("%s", msg)
+                elif RESOURCE_ENDPOINTS == resource_key:
+                    resources += self.__endpoints
+                    continue
+                elif RESOURCE_RULES == resource_key:
+                     resources = self.__rules_into_resources()
+                     continue
                 else:
                     msg = f"GetConfig failed due to invalid " \
                           f"resource key: {resource_key}"
@@ -465,8 +502,10 @@ class P4Driver(_Driver):
                 resources.append(
                     (resource_key, entries if entries else None)
                 )
-            except Exception as ex:  # pylint: disable=broad-except
-                resources.append((resource_key, ex))
+            except Exception as e:  # pylint: disable=broad-except
+                resources.append((resource_key, e))
+
+        LOGGER.info("GetConfig() -> Results: %s", resources)
 
         return resources
 
@@ -480,6 +519,8 @@ class P4Driver(_Driver):
         """
         results = []
 
+        LOGGER.info("SetConfig -> Resources {}".format(resources))
+
         for i, resource in enumerate(resources):
             str_resource_name = f"resources[#{i}]"
             resource_key = ""
@@ -499,11 +540,15 @@ class P4Driver(_Driver):
                 continue
 
             try:
-                resource_value = json.loads(resource_value)
-            except Exception:  # pylint: disable=broad-except
-                pass
+                # Rules are JSON-based, endpoints are not
+                if "endpoint" not in resource_key:
+                    resource_value = json.loads(resource_value)
+            except Exception as e:  # pylint: disable=broad-except
+                LOGGER.exception("Exception validating resource value {}".format(resource_value))
+                results.append(e)
+                continue
 
-            LOGGER.debug(
+            LOGGER.info(
                 "SetConfig() -> Key: %s - Value: %s",
                 resource_key, resource_value)
 
@@ -512,13 +557,22 @@ class P4Driver(_Driver):
             # to be inserted already exists, thus simply needs an update.
             operation = WriteOperation.insert
 
+            # Dataplane and cache rule insertion process
             try:
-                self.__apply_operation(resource_key, resource_value, operation)
-                results.append(True)
-            except Exception as ex:  # pylint: disable=broad-except
-                results.append(ex)
+                r2, r3 = False, True
+                r1 = self.__cache_rule_insert(resource_key, resource_value, operation)
+                # Cache insertion succeeded, proceed to dataplane
+                if r1:
+                    r2 = self.__apply_operation(resource_key, resource_value, operation)
+                # Dataplane insertion did not succeed --> Revert caching
+                if not r2 and r1:
+                    r3 = self.__cache_rule_remove(resource_key)
+                results.append(r1 & r2 & r3)
+            except Exception as e:  # pylint: disable=broad-except
+                results.append(e)
+                continue
 
-        print(results)
+        LOGGER.info("SetConfig() -> Results: {}".format(results))
 
         return results
 
@@ -552,21 +606,31 @@ class P4Driver(_Driver):
 
             try:
                 resource_value = json.loads(resource_value)
-            except Exception:  # pylint: disable=broad-except
-                pass
+            except Exception as e:  # pylint: disable=broad-except
+                results.append(e)
+                continue
 
-            LOGGER.debug("DeleteConfig() -> Key: %s - Value: %s",
+            LOGGER.info("DeleteConfig() -> Key: %s - Value: %s",
                          resource_key, resource_value)
 
             operation = WriteOperation.delete
 
+            # Dataplane and cache rule removal process
             try:
-                self.__apply_operation(resource_key, resource_value, operation)
-                results.append(True)
-            except Exception as ex:  # pylint: disable=broad-except
-                results.append(ex)
+                r2, r3 = False, True
+                r1 = self.__cache_rule_remove(resource_key)
+                # Cache removal succeeded, proceed to dataplane
+                if r1:
+                    r2 = self.__apply_operation(resource_key, resource_value, operation)
+                # Dataplane removal did not succeed --> Revert caching
+                if not r2 and r1:
+                    r3 = self.__cache_rule_insert(resource_key, resource_value, WriteOperation.insert)
+                results.append(r1 & r2 & r3)
+            except Exception as e:  # pylint: disable=broad-except
+                results.append(e)
+                continue
 
-        print(results)
+        LOGGER.info("DeleteConfig() -> Results: {}".format(results))
 
         return results
 
@@ -583,35 +647,85 @@ class P4Driver(_Driver):
         """
 
         # Apply settings to the various tables
-        if KEY_TABLE == resource_key:
+        if KEY_TABLE in resource_key:
             self.__manager.table_entry_operation_from_json(
                 resource_value, operation)
-        elif KEY_COUNTER == resource_key:
+        elif KEY_COUNTER in resource_key:
             self.__manager.counter_entry_operation_from_json(
                 resource_value, operation)
-        elif KEY_DIR_COUNTER == resource_key:
+        elif KEY_DIR_COUNTER in resource_key:
             self.__manager.direct_counter_entry_operation_from_json(
                 resource_value, operation)
-        elif KEY_METER == resource_key:
+        elif KEY_METER in resource_key:
             self.__manager.meter_entry_operation_from_json(
                 resource_value, operation)
-        elif KEY_DIR_METER == resource_key:
+        elif KEY_DIR_METER in resource_key:
             self.__manager.direct_meter_entry_operation_from_json(
                 resource_value, operation)
-        elif KEY_ACTION_PROFILE == resource_key:
+        elif KEY_ACTION_PROFILE in resource_key:
             self.__manager.action_prof_member_entry_operation_from_json(
                 resource_value, operation)
             self.__manager.action_prof_group_entry_operation_from_json(
                 resource_value, operation)
-        elif KEY_CTL_PKT_METADATA == resource_key:
+        elif KEY_CLONE_SESSION in resource_key:
+            self.__manager.clone_session_entry_operation_from_json(
+                resource_value, operation)
+        elif KEY_CTL_PKT_METADATA in resource_key:
             msg = f"{resource_key.capitalize()} is not a " \
                   f"configurable resource"
             raise Exception(msg)
+        elif KEY_DIGEST in resource_key:
+            msg = f"{resource_key.capitalize()} is not a " \
+                  f"configurable resource"
+            raise Exception(msg)
+        elif KEY_ENDPOINT in resource_key:
+            self.__endpoints.append((resource_key, resource_value))
         else:
             msg = f"{operation} on invalid key {resource_key}"
             LOGGER.error(msg)
             raise Exception(msg)
 
-        LOGGER.debug("%s operation: %s", resource_key.capitalize(), operation)
+        return True
+
+    def __cache_rule_insert(self, resource_key, resource_value, operation):
+        """
+        Insert a new rule into the rule cache or update an existing one.
+
+        :param resource_key: P4 resource key
+        :param resource_value: P4 resource value in JSON format
+        :param operation: write operation (i.e., insert, update) to apply
+        :return: True if new rule is inserted or existing is updated, otherwise False
+        """
+        if (resource_key in self.__rules.keys()) and (operation == WriteOperation.insert):
+            LOGGER.error("Attempting to insert an existing rule key: {}".format(resource_key))
+            return False
+        elif (resource_key not in self.__rules.keys()) and (operation == WriteOperation.update):
+            LOGGER.error("Attempting to update a non-existing rule key: {}".format(resource_key))
+            return False
+        elif (resource_key in self.__rules.keys()) and (operation == WriteOperation.update):
+            LOGGER.warning("Updating an existing rule key: {}".format(resource_key))
+        self.__rules[resource_key] = resource_value
+        return True
+
+    def __cache_rule_remove(self, resource_key):
+        """
+        Remove an existing rule from the rule cache.
 
+        :param resource_key: P4 resource key
+        :return: True if existing rule is removed, otherwise False
+        """
+        if resource_key not in self.__rules.keys():
+            LOGGER.error("Attempting to remove a non-existing rule key: {}".format(resource_key))
+            return False
+        self.__rules.pop(resource_key)
         return True
+
+    def __rules_into_resources(self):
+        """
+        Transform rules from the driver's rule map into
+        resources exposed through the SBI API.
+        """
+        resource_list = []
+        for rule_key, rule_val in self.__rules.items():
+            resource_list.append((rule_key, rule_val))
+        return resource_list
diff --git a/src/device/service/drivers/p4/p4_manager.py b/src/device/service/drivers/p4/p4_manager.py
index f6684412a4d650ecb909632b9ddcbc3d17a55a5c..210422ed8de2559b56fa22da4e36f154b7d03b99 100644
--- a/src/device/service/drivers/p4/p4_manager.py
+++ b/src/device/service/drivers/p4/p4_manager.py
@@ -35,7 +35,8 @@ try:
     from .p4_common import encode,\
         parse_resource_string_from_json, parse_resource_integer_from_json,\
         parse_resource_bytes_from_json, parse_match_operations_from_json,\
-        parse_action_parameters_from_json, parse_integer_list_from_json
+        parse_action_parameters_from_json, parse_integer_list_from_json,\
+        parse_replicas_from_json
     from .p4_exception import UserError, InvalidP4InfoError
 except ImportError:
     from p4_client import P4RuntimeClient, P4RuntimeException,\
@@ -58,6 +59,7 @@ CONTEXT = Context()
 CLIENTS = {}
 
 # Constant P4 entities
+KEYS_P4 = []
 KEY_TABLE = "table"
 KEY_ACTION = "action"
 KEY_ACTION_PROFILE = "action_profile"
@@ -66,6 +68,11 @@ KEY_DIR_COUNTER = "direct_counter"
 KEY_METER = "meter"
 KEY_DIR_METER = "direct_meter"
 KEY_CTL_PKT_METADATA = "controller_packet_metadata"
+KEY_DIGEST = "digest"
+
+# Extra resource keys
+KEY_CLONE_SESSION = "clone_session"
+KEY_ENDPOINT = "endpoint"
 
 
 def get_context():
@@ -83,19 +90,20 @@ def get_table_type(table):
     :param table: P4 table
     :return: P4 table type
     """
-    for m_f in table.match_fields:
-        if m_f.match_type == p4info_pb2.MatchField.EXACT:
-            return p4info_pb2.MatchField.EXACT
-        if m_f.match_type == p4info_pb2.MatchField.LPM:
-            return p4info_pb2.MatchField.LPM
-        if m_f.match_type == p4info_pb2.MatchField.TERNARY:
-            return p4info_pb2.MatchField.TERNARY
-        if m_f.match_type == p4info_pb2.MatchField.RANGE:
-            return p4info_pb2.MatchField.RANGE
-        if m_f.match_type == p4info_pb2.MatchField.OPTIONAL:
-            return p4info_pb2.MatchField.OPTIONAL
-    return None
+    is_ternary = False
 
+    for m_f in table.match_fields:
+        # LPM and range are special forms of ternary
+        if m_f.match_type in [
+            p4info_pb2.MatchField.TERNARY,
+            p4info_pb2.MatchField.LPM,
+            p4info_pb2.MatchField.RANGE
+        ]:
+            is_ternary = True
+
+    if is_ternary:
+        return p4info_pb2.MatchField.TERNARY
+    return p4info_pb2.MatchField.EXACT
 
 def match_type_to_str(match_type):
     """
@@ -132,12 +140,12 @@ class P4Manager:
         self.__id = device_id
         self.__ip_address = ip_address
         self.__port = int(port)
-        self.__endpoint = f"{self.__ip_address}:{self.__port}"
+        self.__grpc_endpoint = f"{self.__ip_address}:{self.__port}"
         self.key_id = ip_address+str(port)
         CLIENTS[self.key_id] = P4RuntimeClient(
-            self.__id, self.__endpoint, election_id, role_name, ssl_options)
+            self.__id, self.__grpc_endpoint, election_id, role_name, ssl_options)
         self.__p4info = None
-        
+
         self.local_client = CLIENTS[self.key_id]
 
         # Internal memory for whitebox management
@@ -146,14 +154,14 @@ class P4Manager:
 
         # | -> P4 entities
         self.table_entries = {}
+        self.action_profile_members = {}
+        self.action_profile_groups = {}
         self.counter_entries = {}
         self.direct_counter_entries = {}
         self.meter_entries = {}
         self.direct_meter_entries = {}
-        self.multicast_groups = {}
         self.clone_session_entries = {}
-        self.action_profile_members = {}
-        self.action_profile_groups = {}
+        self.multicast_groups = {}
 
     def start(self, p4bin_path, p4info_path):
         """
@@ -234,7 +242,7 @@ class P4Manager:
         self.__id = None
         self.__ip_address = None
         self.__port = None
-        self.__endpoint = None
+        self.__grpc_endpoint = None
         self.__clear_state()
 
     def __clear_state(self):
@@ -244,14 +252,14 @@ class P4Manager:
         :return: void
         """
         self.table_entries.clear()
+        self.action_profile_members.clear()
+        self.action_profile_groups.clear()
         self.counter_entries.clear()
         self.direct_counter_entries.clear()
         self.meter_entries.clear()
         self.direct_meter_entries.clear()
-        self.multicast_groups.clear()
         self.clone_session_entries.clear()
-        self.action_profile_members.clear()
-        self.action_profile_groups.clear()
+        self.multicast_groups.clear()
         self.p4_objects.clear()
 
     def __init_objects(self):
@@ -264,7 +272,7 @@ class P4Manager:
         global KEY_TABLE, KEY_ACTION, KEY_ACTION_PROFILE, \
             KEY_COUNTER, KEY_DIR_COUNTER, \
             KEY_METER, KEY_DIR_METER, \
-            KEY_CTL_PKT_METADATA
+            KEY_CTL_PKT_METADATA, KEY_DIGEST, KEYS_P4
 
         KEY_TABLE = P4Type.table.name
         KEY_ACTION = P4Type.action.name
@@ -274,12 +282,15 @@ class P4Manager:
         KEY_METER = P4Type.meter.name
         KEY_DIR_METER = P4Type.direct_meter.name
         KEY_CTL_PKT_METADATA = P4Type.controller_packet_metadata.name
-        assert (k for k in [
+        KEY_DIGEST = P4Type.digest.name
+
+        KEYS_P4 = [
             KEY_TABLE, KEY_ACTION, KEY_ACTION_PROFILE,
             KEY_COUNTER, KEY_DIR_COUNTER,
             KEY_METER, KEY_DIR_METER,
-            KEY_CTL_PKT_METADATA
-        ])
+            KEY_CTL_PKT_METADATA, KEY_DIGEST
+        ]
+        assert (k for k in KEYS_P4)
 
         if not self.p4_objects:
             LOGGER.warning(
@@ -292,6 +303,11 @@ class P4Manager:
             for table in self.p4_objects[KEY_TABLE]:
                 self.table_entries[table.name] = []
 
+        if KEY_ACTION_PROFILE in self.p4_objects:
+            for act_prof in self.p4_objects[KEY_ACTION_PROFILE]:
+                self.action_profile_members[act_prof.name] = []
+                self.action_profile_groups[act_prof.name] = []
+
         if KEY_COUNTER in self.p4_objects:
             for cnt in self.p4_objects[KEY_COUNTER]:
                 self.counter_entries[cnt.name] = []
@@ -308,11 +324,6 @@ class P4Manager:
             for d_meter in self.p4_objects[KEY_DIR_METER]:
                 self.direct_meter_entries[d_meter.name] = []
 
-        if KEY_ACTION_PROFILE in self.p4_objects:
-            for act_prof in self.p4_objects[KEY_ACTION_PROFILE]:
-                self.action_profile_members[act_prof.name] = []
-                self.action_profile_groups[act_prof.name] = []
-
     def __discover_objects(self):
         """
         Discover and store all P4 objects.
@@ -509,6 +520,20 @@ class P4Manager:
                 return pkt_meta
         return None
 
+    def get_digest(self, digest_name):
+        """
+        Get a digest object by name.
+
+        :param digest_name: name of a digest object
+        :return: digest object or None
+        """
+        if KEY_DIGEST not in self.p4_objects:
+            return None
+        for dg in self.p4_objects[KEY_DIGEST]:
+            if dg == digest_name.name:
+                return digest_name
+        return None
+
     def get_resource_keys(self):
         """
         Retrieve the available P4 resource keys.
@@ -561,15 +586,15 @@ class P4Manager:
         self.table_entries[table_name] = []
 
         try:
-            for count, table_entry in enumerate(
-                    TableEntry(self.local_client, table_name)(action=action_name).read()):
-                LOGGER.debug(
-                    "Table %s - Entry %d\n%s", table_name, count, table_entry)
+            entries = TableEntry(self.local_client, table_name).read()
+            assert self.local_client
+            for table_entry in entries:
                 self.table_entries[table_name].append(table_entry)
             return self.table_entries[table_name]
         except P4RuntimeException as ex:
-            LOGGER.error(ex)
-            return []
+            LOGGER.error("Failed to get table %s entries: %s",
+                         table_name, str(ex))
+        return []
 
     def table_entries_to_json(self, table_name):
         """
@@ -634,10 +659,14 @@ class P4Manager:
         :return: number of P4 table entries or negative integer
         upon missing table
         """
-        entries = self.get_table_entries(table_name, action_name)
-        if entries is None:
-            return -1
-        return len(entries)
+        count = 0
+        try:
+            entries = TableEntry(self.local_client, table_name).read()
+            count = sum(1 for _ in entries)
+        except Exception as e:  # pylint: disable=broad-except
+            LOGGER.error("Failed to read entries of table: %s", table_name)
+
+        return count
 
     def count_table_entries_all(self):
         """
@@ -675,7 +704,7 @@ class P4Manager:
         metadata = parse_resource_bytes_from_json(json_resource, "metadata")
 
         if operation in [WriteOperation.insert, WriteOperation.update]:
-            LOGGER.debug("Table entry to insert/update: %s", json_resource)
+            LOGGER.info("Table entry to insert/update: %s", json_resource)
             return self.insert_table_entry(
                 table_name=table_name,
                 match_map=match_map,
@@ -685,7 +714,7 @@ class P4Manager:
                 metadata=metadata if metadata else None
             )
         if operation == WriteOperation.delete:
-            LOGGER.debug("Table entry to delete: %s", json_resource)
+            LOGGER.info("Table entry to delete: %s", json_resource)
             return self.delete_table_entry(
                 table_name=table_name,
                 match_map=match_map,
@@ -700,7 +729,7 @@ class P4Manager:
             cnt_pkt=-1, cnt_byte=-1):
         """
         Insert an entry into an exact match table.
-    
+
         :param table_name: P4 table name
         :param match_map: Map of match operations
         :param action_name: Action name
@@ -712,45 +741,45 @@ class P4Manager:
         """
         assert match_map, "Table entry without match operations is not accepted"
         assert action_name, "Table entry without action is not accepted"
-    
+
         table_entry = TableEntry(self.local_client, table_name)(action=action_name)
-    
+
         for match_k, match_v in match_map.items():
             table_entry.match[match_k] = match_v
-    
+
         for action_k, action_v in action_params.items():
             table_entry.action[action_k] = action_v
-    
+
         if metadata:
             table_entry.metadata = metadata
-    
+
         if cnt_pkt > 0:
             table_entry.counter_data.packet_count = cnt_pkt
-    
+
         if cnt_byte > 0:
             table_entry.counter_data.byte_count = cnt_byte
-    
+
         ex_msg = ""
         try:
             table_entry.insert()
             LOGGER.info("Inserted exact table entry: %s", table_entry)
         except (P4RuntimeException, P4RuntimeWriteException) as ex:
-            raise P4RuntimeException from ex
-    
+            ex_msg = str(ex)
+            LOGGER.warning(ex)
+
         # Table entry exists, needs to be modified
         if "ALREADY_EXISTS" in ex_msg:
             table_entry.modify()
             LOGGER.info("Updated exact table entry: %s", table_entry)
-    
+
         return table_entry
-    
-    
+
     def insert_table_entry_ternary(self,
             table_name, match_map, action_name, action_params, metadata,
             priority, cnt_pkt=-1, cnt_byte=-1):
         """
         Insert an entry into a ternary match table.
-    
+
         :param table_name: P4 table name
         :param match_map: Map of match operations
         :param action_name: Action name
@@ -763,47 +792,47 @@ class P4Manager:
         """
         assert match_map, "Table entry without match operations is not accepted"
         assert action_name, "Table entry without action is not accepted"
-    
+
         table_entry = TableEntry(self.local_client, table_name)(action=action_name)
-    
+
         for match_k, match_v in match_map.items():
             table_entry.match[match_k] = match_v
-    
+
         for action_k, action_v in action_params.items():
             table_entry.action[action_k] = action_v
-    
+
         table_entry.priority = priority
-    
+
         if metadata:
             table_entry.metadata = metadata
-    
+
         if cnt_pkt > 0:
             table_entry.counter_data.packet_count = cnt_pkt
-    
+
         if cnt_byte > 0:
             table_entry.counter_data.byte_count = cnt_byte
-    
+
         ex_msg = ""
         try:
             table_entry.insert()
             LOGGER.info("Inserted ternary table entry: %s", table_entry)
         except (P4RuntimeException, P4RuntimeWriteException) as ex:
-            raise P4RuntimeException from ex
-    
+            ex_msg = str(ex)
+            LOGGER.error(ex)
+
         # Table entry exists, needs to be modified
         if "ALREADY_EXISTS" in ex_msg:
             table_entry.modify()
             LOGGER.info("Updated ternary table entry: %s", table_entry)
-    
+
         return table_entry
-    
-    
+
     def insert_table_entry_range(self,
             table_name, match_map, action_name, action_params, metadata,
             priority, cnt_pkt=-1, cnt_byte=-1):  # pylint: disable=unused-argument
         """
         Insert an entry into a range match table.
-    
+
         :param table_name: P4 table name
         :param match_map: Map of match operations
         :param action_name: Action name
@@ -816,17 +845,16 @@ class P4Manager:
         """
         assert match_map, "Table entry without match operations is not accepted"
         assert action_name, "Table entry without action is not accepted"
-    
+
         raise NotImplementedError(
             "Range-based table insertion not implemented yet")
-    
-    
+
     def insert_table_entry_optional(self,
             table_name, match_map, action_name, action_params, metadata,
             priority, cnt_pkt=-1, cnt_byte=-1):  # pylint: disable=unused-argument
         """
         Insert an entry into an optional match table.
-    
+
         :param table_name: P4 table name
         :param match_map: Map of match operations
         :param action_name: Action name
@@ -839,7 +867,7 @@ class P4Manager:
         """
         assert match_map, "Table entry without match operations is not accepted"
         assert action_name, "Table entry without action is not accepted"
-    
+
         raise NotImplementedError(
             "Optional-based table insertion not implemented yet")
 
@@ -869,32 +897,36 @@ class P4Manager:
         assert table, \
             "P4 pipeline does not implement table " + table_name
 
-        if not get_table_type(table):
+        table_type = get_table_type(table)
+
+        if not table_type:
             msg = f"Table {table_name} is undefined, cannot insert entry"
             LOGGER.error(msg)
             raise UserError(msg)
 
+        LOGGER.debug("Table {}: {}".format(table_name, match_type_to_str(table_type)))
+
         # Exact match is supported
-        if get_table_type(table) == p4info_pb2.MatchField.EXACT:
+        if table_type == p4info_pb2.MatchField.EXACT:
             return self.insert_table_entry_exact(
                 table_name, match_map, action_name, action_params, metadata,
                 cnt_pkt, cnt_byte)
 
         # Ternary and LPM matches are supported
-        if get_table_type(table) in \
+        if table_type in \
                 [p4info_pb2.MatchField.TERNARY, p4info_pb2.MatchField.LPM]:
             return self.insert_table_entry_ternary(
                 table_name, match_map, action_name, action_params, metadata,
                 priority, cnt_pkt, cnt_byte)
 
         # TODO: Cover RANGE match  # pylint: disable=W0511
-        if get_table_type(table) == p4info_pb2.MatchField.RANGE:
+        if table_type == p4info_pb2.MatchField.RANGE:
             return self.insert_table_entry_range(
                 table_name, match_map, action_name, action_params, metadata,
                 priority, cnt_pkt, cnt_byte)
 
         # TODO: Cover OPTIONAL match  # pylint: disable=W0511
-        if get_table_type(table) == p4info_pb2.MatchField.OPTIONAL:
+        if table_type == p4info_pb2.MatchField.OPTIONAL:
             return self.insert_table_entry_optional(
                 table_name, match_map, action_name, action_params, metadata,
                 priority, cnt_pkt, cnt_byte)
@@ -917,7 +949,9 @@ class P4Manager:
         assert table, \
             "P4 pipeline does not implement table " + table_name
 
-        if not get_table_type(table):
+        table_type = get_table_type(table)
+
+        if not table_type:
             msg = f"Table {table_name} is undefined, cannot delete entry"
             LOGGER.error(msg)
             raise UserError(msg)
@@ -930,7 +964,7 @@ class P4Manager:
         for action_k, action_v in action_params.items():
             table_entry.action[action_k] = action_v
 
-        if get_table_type(table) in \
+        if table_type in \
                 [p4info_pb2.MatchField.TERNARY, p4info_pb2.MatchField.LPM]:
             if priority == 0:
                 msg = f"Table {table_name} is ternary, priority must be != 0"
@@ -938,15 +972,25 @@ class P4Manager:
                 raise UserError(msg)
 
         # TODO: Ensure correctness of RANGE & OPTIONAL  # pylint: disable=W0511
-        if get_table_type(table) in \
+        if table_type in \
                 [p4info_pb2.MatchField.RANGE, p4info_pb2.MatchField.OPTIONAL]:
             raise NotImplementedError(
                 "Range and optional-based table deletion not implemented yet")
 
         table_entry.priority = priority
 
-        table_entry.delete()
-        LOGGER.info("Deleted entry %s from table: %s", table_entry, table_name)
+        ex_msg = ""
+        try:
+            table_entry.delete()
+            LOGGER.info("Deleted entry %s from table: %s", table_entry, table_name)
+        except (P4RuntimeException, P4RuntimeWriteException) as ex:
+            ex_msg = str(ex)
+            LOGGER.warning(ex)
+
+        # Table entry exists, needs to be modified
+        if "NOT_FOUND" in ex_msg:
+            # TODO: No way to discriminate between a modified entry and an actual table miss
+            LOGGER.warning("Table entry was initially modified, thus cannot be removed: %s", table_entry)
 
         return table_entry
 
@@ -1172,7 +1216,8 @@ class P4Manager:
                 self.counter_entries[cnt_name].append(cnt_entry)
             return self.counter_entries[cnt_name]
         except P4RuntimeException as ex:
-            LOGGER.error(ex)
+            LOGGER.error("Failed to get counter %s entries: %s",
+                         cnt_name, str(ex))
             return []
 
     def counter_entries_to_json(self, cnt_name):
@@ -1620,7 +1665,8 @@ class P4Manager:
                 self.meter_entries[meter_name].append(meter_entry)
             return self.meter_entries[meter_name]
         except P4RuntimeException as ex:
-            LOGGER.error(ex)
+            LOGGER.error("Failed to get meter %s entries: %s",
+                         meter_name, str(ex))
             return []
 
     def meter_entries_to_json(self, meter_name):
@@ -1852,7 +1898,8 @@ class P4Manager:
                 self.direct_meter_entries[d_meter_name].append(d_meter_entry)
             return self.direct_meter_entries[d_meter_name]
         except P4RuntimeException as ex:
-            LOGGER.error(ex)
+            LOGGER.error("Failed to get direct meter %s entries: %s",
+                         d_meter_name, str(ex))
             return []
 
     def direct_meter_entries_to_json(self, d_meter_name):
@@ -2094,7 +2141,8 @@ class P4Manager:
                 self.action_profile_members[ap_name].append(ap_entry)
             return self.action_profile_members[ap_name]
         except P4RuntimeException as ex:
-            LOGGER.error(ex)
+            LOGGER.error("Failed to get action profile member %s entries: %s",
+                         ap_name, str(ex))
             return []
 
     def action_prof_member_entries_to_json(self, ap_name):
@@ -2357,7 +2405,8 @@ class P4Manager:
                 self.action_profile_groups[ap_name].append(ap_entry)
             return self.action_profile_groups[ap_name]
         except P4RuntimeException as ex:
-            LOGGER.error(ex)
+            LOGGER.error("Failed to get action profile group %s entries: %s",
+                         ap_name, str(ex))
             return []
 
     def count_action_prof_group_entries(self, ap_name):
@@ -2880,14 +2929,13 @@ class P4Manager:
             json_resource, "session-id")
 
         if operation in [WriteOperation.insert, WriteOperation.update]:
-            ports = parse_integer_list_from_json(
-                json_resource, "ports", "port")
+            replicas = parse_replicas_from_json(json_resource)
 
             LOGGER.debug(
                 "Clone session entry to insert/update: %s", json_resource)
             return self.insert_clone_session_entry(
                 session_id=session_id,
-                ports=ports
+                replicas=replicas
             )
         if operation == WriteOperation.delete:
             LOGGER.debug(
@@ -2897,22 +2945,24 @@ class P4Manager:
             )
         return None
 
-    def insert_clone_session_entry(self, session_id, ports):
+    def insert_clone_session_entry(self, session_id, replicas):
         """
         Insert a new clone session.
 
         :param session_id: id of a clone session
-        :param ports: list of egress ports to clone session
+        :param replicas: list of egress ports to clone session
         :return: inserted clone session
         """
         assert session_id > 0, \
             "Clone session " + session_id + " must be > 0"
-        assert ports, \
-            "No clone session ports are provided"
+        assert replicas, \
+            "No clone session replicas are provided"
+        assert isinstance(replicas, dict), \
+            "Clone session replicas must be a dictionary"
 
         session = CloneSessionEntry(self.local_client, session_id)
-        for p in ports:
-            session.add(p, 1)
+        for eg_port,instance in replicas.items():
+            session.add(eg_port, instance)
 
         ex_msg = ""
         try:
@@ -2943,12 +2993,15 @@ class P4Manager:
             "Clone session " + session_id + " must be > 0"
 
         session = CloneSessionEntry(self.local_client, session_id)
-        session.delete()
+
+        try:
+            session.delete()
+            LOGGER.info("Deleted clone session %d", session_id)
+        except (P4RuntimeException, P4RuntimeWriteException) as ex:
+            LOGGER.error(ex)
 
         if session_id in self.clone_session_entries:
             del self.clone_session_entries[session_id]
-        LOGGER.info(
-            "Deleted clone session %d", session_id)
 
         return session
 
@@ -3786,6 +3839,7 @@ class _P4EntityBase(_EntityBase):
     def __init__(self, p4_client, p4_type, entity_type, p4runtime_cls, name=None,
                  modify_only=False):
         super().__init__(p4_client, entity_type, p4runtime_cls, modify_only)
+        assert self.local_client, "No local P4 client instance"
         self._p4_type = p4_type
         if name is None:
             raise UserError(
@@ -3815,7 +3869,7 @@ class ActionProfileMember(_P4EntityBase):
     """
 
     def __init__(self, p4_client, action_profile_name=None):
-        super().__init__( p4_client,
+        super().__init__(p4_client,
             P4Type.action_profile, P4RuntimeEntity.action_profile_member,
             p4runtime_pb2.ActionProfileMember, action_profile_name)
         self.member_id = 0
@@ -3981,7 +4035,7 @@ class ActionProfileGroup(_P4EntityBase):
     """
 
     def __init__(self, p4_client, action_profile_name=None):
-        super().__init__( p4_client,
+        super().__init__(p4_client,
             P4Type.action_profile, P4RuntimeEntity.action_profile_group,
             p4runtime_pb2.ActionProfileGroup, action_profile_name)
         self.group_id = 0
@@ -5055,7 +5109,7 @@ class CounterEntry(_CounterEntryBase):
     """
 
     def __init__(self, p4_client, counter_name=None):
-        super().__init__( p4_client,
+        super().__init__(p4_client,
             P4Type.counter, P4RuntimeEntity.counter_entry,
             p4runtime_pb2.CounterEntry, counter_name,
             modify_only=True)
@@ -5115,11 +5169,11 @@ To write to the counter, use <self>.modify
 class DirectCounterEntry(_CounterEntryBase):
     """
     Direct P4 counter entry.
-    """ 
+    """
     local_client = None
 
     def __init__(self, p4_client, direct_counter_name=None):
-        super().__init__( p4_client, 
+        super().__init__(p4_client,
             P4Type.direct_counter, P4RuntimeEntity.direct_counter_entry,
             p4runtime_pb2.DirectCounterEntry, direct_counter_name,
             modify_only=True)
@@ -5213,7 +5267,7 @@ class _MeterEntryBase(_P4EntityBase):
     """
 
     def __init__(self, p4_client, *args, **kwargs):
-        super().__init__(*args, **kwargs)
+        super().__init__(p4_client, *args, **kwargs)
         self._meter_type = self._info.spec.unit
         self.index = -1
         self.cir = -1
@@ -5910,7 +5964,7 @@ class IdleTimeoutNotification():
     """
     P4 idle timeout notification.
     """
-    
+
     local_client = None
 
     def __init__(self, p4_client):
diff --git a/src/e2e_orchestrator/service/E2EOrchestratorService.py b/src/e2e_orchestrator/service/E2EOrchestratorService.py
index 9fa7bf4bd82564c4158b5af77c0d69b0b9014289..3abef2777ba22cc63df3db1eb86ee411a4ea74c7 100644
--- a/src/e2e_orchestrator/service/E2EOrchestratorService.py
+++ b/src/e2e_orchestrator/service/E2EOrchestratorService.py
@@ -12,19 +12,15 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import logging
-
 from common.Constants import ServiceNameEnum
-from common.proto.e2eorchestrator_pb2_grpc import add_E2EOrchestratorServiceServicer_to_server
 from common.Settings import get_service_port_grpc
+from common.proto.e2eorchestrator_pb2 import DESCRIPTOR as E2EORCHESTRATOR_DESCRIPTOR
+from common.proto.e2eorchestrator_pb2_grpc import add_E2EOrchestratorServiceServicer_to_server
 from common.tools.service.GenericGrpcService import GenericGrpcService
 from .E2EOrchestratorServiceServicerImpl import E2EOrchestratorServiceServicerImpl
 
-LOGGER = logging.getLogger(__name__)
-
-
 class E2EOrchestratorService(GenericGrpcService):
-    def __init__(self, cls_name: str = __name__):
+    def __init__(self, cls_name: str = __name__) -> None:
         port = get_service_port_grpc(ServiceNameEnum.E2EORCHESTRATOR)
         super().__init__(port, cls_name=cls_name)
         self.e2eorchestrator_servicer = E2EOrchestratorServiceServicerImpl()
@@ -33,3 +29,5 @@ class E2EOrchestratorService(GenericGrpcService):
         add_E2EOrchestratorServiceServicer_to_server(
             self.e2eorchestrator_servicer, self.server
         )
+
+        self.add_reflection_service_name(E2EORCHESTRATOR_DESCRIPTOR, 'E2EOrchestratorService')
diff --git a/src/forecaster/service/ForecasterService.py b/src/forecaster/service/ForecasterService.py
index 5f540cdc5bc628ae1a35e5f5ebf47ead276a413c..fedb5242d616eb8eef0a9b4e3fd5308925437acd 100644
--- a/src/forecaster/service/ForecasterService.py
+++ b/src/forecaster/service/ForecasterService.py
@@ -14,6 +14,7 @@
 
 from common.Constants import ServiceNameEnum
 from common.Settings import get_service_port_grpc
+from common.proto.forecaster_pb2 import DESCRIPTOR as FORECASTER_DESCRIPTOR
 from common.proto.forecaster_pb2_grpc import add_ForecasterServiceServicer_to_server
 from common.tools.service.GenericGrpcService import GenericGrpcService
 from .ForecasterServiceServicerImpl import ForecasterServiceServicerImpl
@@ -26,3 +27,5 @@ class ForecasterService(GenericGrpcService):
 
     def install_servicers(self):
         add_ForecasterServiceServicer_to_server(self.forecaster_servicer, self.server)
+
+        self.add_reflection_service_name(FORECASTER_DESCRIPTOR, 'ForecasterService')
diff --git a/src/nbi/README.md b/src/nbi/README.md
index 32902a0b33dba2f9ce3df4a60833608bac6e129d..f997ce21c9b809a1749f046672e895d3ad466824 100644
--- a/src/nbi/README.md
+++ b/src/nbi/README.md
@@ -31,5 +31,5 @@ sudo ldconfig
 
 ### Install Python bindings
 ```bash
-pip install libyang==2.8.0
+pip install libyang==2.8.4
 ```
diff --git a/src/nbi/requirements.in b/src/nbi/requirements.in
index 0d780483626979cc993a984d3da709762c749d56..d56ee821b19894e435368cd6250b25d3bdc33c10 100644
--- a/src/nbi/requirements.in
+++ b/src/nbi/requirements.in
@@ -18,7 +18,7 @@ Flask==2.1.3
 Flask-HTTPAuth==4.5.0
 Flask-RESTful==0.3.9
 jsonschema==4.4.0
-libyang==2.8.0
+libyang==2.8.4
 netaddr==0.9.0
 pyang==2.6.0
 git+https://github.com/robshakir/pyangbind.git
diff --git a/src/nbi/service/rest_server/nbi_plugins/tfs_api/Resources.py b/src/nbi/service/rest_server/nbi_plugins/tfs_api/Resources.py
index eaa21352527a95591829e6bad87de8ecef1df521..ab608f2d746a2faffc819f25cc026ce9b949aff7 100644
--- a/src/nbi/service/rest_server/nbi_plugins/tfs_api/Resources.py
+++ b/src/nbi/service/rest_server/nbi_plugins/tfs_api/Resources.py
@@ -177,6 +177,11 @@ class Topology(_Resource):
     def delete(self, context_uuid : str, topology_uuid : str):
         return format_grpc_to_json(self.context_client.RemoveTopology(grpc_topology_id(context_uuid, topology_uuid)))
 
+class TopologyDetails(_Resource):
+    def get(self, context_uuid : str, topology_uuid : str):
+        topology_id = grpc_topology_id(context_uuid, topology_uuid)
+        return format_grpc_to_json(self.context_client.GetTopologyDetails(topology_id))
+
 class ServiceIds(_Resource):
     def get(self, context_uuid : str):
         return format_grpc_to_json(self.context_client.ListServiceIds(grpc_context_id(context_uuid)))
@@ -301,16 +306,20 @@ class Link(_Resource):
     def put(self, link_uuid : str):
         link_json = request.get_json()
         link = grpc_link(link_json)
-        virtual_types = {LinkTypeEnum.LINKTYPE_VIRTUAL_COPPER, LinkTypeEnum.LINKTYPE_VIRTUAL_OPTICAL}
         if link_uuid != link.link_id.link_uuid.uuid:
             raise BadRequest('Mismatching link_uuid')
-        elif link.link_type in virtual_types:
-            link = grpc_link(link_json)
-            return format_grpc_to_json(self.vntmanager_client.SetVirtualLink(link))    
-        return format_grpc_to_json(self.context_client.SetLink(grpc_link(link)))
+        if link.link_type == LinkTypeEnum.LINKTYPE_VIRTUAL:
+            return format_grpc_to_json(self.vntmanager_client.SetVirtualLink(link))
+        else:
+            return format_grpc_to_json(self.context_client.SetLink(link))
 
     def delete(self, link_uuid : str):
-        return format_grpc_to_json(self.context_client.RemoveLink(grpc_link_id(link_uuid)))
+        link_id = grpc_link_id(link_uuid)
+        link = self.context_client.GetLink(link_id)
+        if link.link_type == LinkTypeEnum.LINKTYPE_VIRTUAL:
+            return format_grpc_to_json(self.vntmanager_client.RemoveVirtualLink(link_id))
+        else:
+            return format_grpc_to_json(self.context_client.RemoveLink(link_id))
 
 class ConnectionIds(_Resource):
     def get(self, context_uuid : str, service_uuid : str):
diff --git a/src/nbi/service/rest_server/nbi_plugins/tfs_api/__init__.py b/src/nbi/service/rest_server/nbi_plugins/tfs_api/__init__.py
index 304a326481f4713f4b2e4f860fd2d42c25ae656b..6605557ca1b1aa7d6eb8db55287beb19e3db62a5 100644
--- a/src/nbi/service/rest_server/nbi_plugins/tfs_api/__init__.py
+++ b/src/nbi/service/rest_server/nbi_plugins/tfs_api/__init__.py
@@ -22,7 +22,7 @@ from .Resources import (
     PolicyRule, PolicyRuleIds, PolicyRules,
     Service, ServiceIds, Services,
     Slice, SliceIds, Slices,
-    Topologies, Topology, TopologyIds
+    Topologies, Topology, TopologyDetails, TopologyIds
 )
 
 URL_PREFIX = '/tfs-api'
@@ -30,38 +30,39 @@ URL_PREFIX = '/tfs-api'
 # Use 'path' type since some identifiers might contain char '/' and Flask is unable to recognize them in 'string' type.
 RESOURCES = [
     # (endpoint_name, resource_class, resource_url)
-    ('api.context_ids',    ContextIds,    '/context_ids'),
-    ('api.contexts',       Contexts,      '/contexts'),
-    ('api.dummy_contexts', DummyContexts, '/dummy_contexts'),
-    ('api.context',        Context,       '/context/<path:context_uuid>'),
+    ('api.context_ids',      ContextIds,      '/context_ids'),
+    ('api.contexts',         Contexts,        '/contexts'),
+    ('api.dummy_contexts',   DummyContexts,   '/dummy_contexts'),
+    ('api.context',          Context,         '/context/<path:context_uuid>'),
 
-    ('api.topology_ids',   TopologyIds,   '/context/<path:context_uuid>/topology_ids'),
-    ('api.topologies',     Topologies,    '/context/<path:context_uuid>/topologies'),
-    ('api.topology',       Topology,      '/context/<path:context_uuid>/topology/<path:topology_uuid>'),
+    ('api.topology_ids',     TopologyIds,     '/context/<path:context_uuid>/topology_ids'),
+    ('api.topologies',       Topologies,      '/context/<path:context_uuid>/topologies'),
+    ('api.topology',         Topology,        '/context/<path:context_uuid>/topology/<path:topology_uuid>'),
+    ('api.topology_details', TopologyDetails, '/context/<path:context_uuid>/topology_details/<path:topology_uuid>'),
 
-    ('api.service_ids',    ServiceIds,    '/context/<path:context_uuid>/service_ids'),
-    ('api.services',       Services,      '/context/<path:context_uuid>/services'),
-    ('api.service',        Service,       '/context/<path:context_uuid>/service/<path:service_uuid>'),
+    ('api.service_ids',      ServiceIds,      '/context/<path:context_uuid>/service_ids'),
+    ('api.services',         Services,        '/context/<path:context_uuid>/services'),
+    ('api.service',          Service,         '/context/<path:context_uuid>/service/<path:service_uuid>'),
 
-    ('api.slice_ids',      SliceIds,      '/context/<path:context_uuid>/slice_ids'),
-    ('api.slices',         Slices,        '/context/<path:context_uuid>/slices'),
-    ('api.slice',          Slice,         '/context/<path:context_uuid>/slice/<path:slice_uuid>'),
+    ('api.slice_ids',        SliceIds,        '/context/<path:context_uuid>/slice_ids'),
+    ('api.slices',           Slices,          '/context/<path:context_uuid>/slices'),
+    ('api.slice',            Slice,           '/context/<path:context_uuid>/slice/<path:slice_uuid>'),
 
-    ('api.device_ids',     DeviceIds,     '/device_ids'),
-    ('api.devices',        Devices,       '/devices'),
-    ('api.device',         Device,        '/device/<path:device_uuid>'),
+    ('api.device_ids',       DeviceIds,       '/device_ids'),
+    ('api.devices',          Devices,         '/devices'),
+    ('api.device',           Device,          '/device/<path:device_uuid>'),
 
-    ('api.link_ids',       LinkIds,       '/link_ids'),
-    ('api.links',          Links,         '/links'),
-    ('api.link',           Link,          '/link/<path:link_uuid>'),
+    ('api.link_ids',         LinkIds,         '/link_ids'),
+    ('api.links',            Links,           '/links'),
+    ('api.link',             Link,            '/link/<path:link_uuid>'),
 
-    ('api.connection_ids', ConnectionIds, '/context/<path:context_uuid>/service/<path:service_uuid>/connection_ids'),
-    ('api.connections',    Connections,   '/context/<path:context_uuid>/service/<path:service_uuid>/connections'),
-    ('api.connection',     Connection,    '/connection/<path:connection_uuid>'),
+    ('api.connection_ids',   ConnectionIds,   '/context/<path:context_uuid>/service/<path:service_uuid>/connection_ids'),
+    ('api.connections',      Connections,     '/context/<path:context_uuid>/service/<path:service_uuid>/connections'),
+    ('api.connection',       Connection,      '/connection/<path:connection_uuid>'),
 
-    ('api.policyrule_ids', PolicyRuleIds, '/policyrule_ids'),
-    ('api.policyrules',    PolicyRules,   '/policyrules'),
-    ('api.policyrule',     PolicyRule,    '/policyrule/<path:policyrule_uuid>'),
+    ('api.policyrule_ids',   PolicyRuleIds,   '/policyrule_ids'),
+    ('api.policyrules',      PolicyRules,     '/policyrules'),
+    ('api.policyrule',       PolicyRule,      '/policyrule/<path:policyrule_uuid>'),
 ]
 
 def register_tfs_api(rest_server : RestServer):
diff --git a/src/pathcomp/frontend/service/PathCompService.py b/src/pathcomp/frontend/service/PathCompService.py
index c19e59e77b9b5f75f66eec07990691a76cdc36b7..6e413c14eb293f3073bfb1d80963dab58ba04308 100644
--- a/src/pathcomp/frontend/service/PathCompService.py
+++ b/src/pathcomp/frontend/service/PathCompService.py
@@ -14,8 +14,9 @@
 
 from common.Constants import ServiceNameEnum
 from common.Settings import get_service_port_grpc
-from common.tools.service.GenericGrpcService import GenericGrpcService
+from common.proto.pathcomp_pb2 import DESCRIPTOR as PATHCOMP_DESCRIPTOR
 from common.proto.pathcomp_pb2_grpc import add_PathCompServiceServicer_to_server
+from common.tools.service.GenericGrpcService import GenericGrpcService
 from .PathCompServiceServicerImpl import PathCompServiceServicerImpl
 
 class PathCompService(GenericGrpcService):
@@ -26,3 +27,5 @@ class PathCompService(GenericGrpcService):
 
     def install_servicers(self):
         add_PathCompServiceServicer_to_server(self.pathcomp_servicer, self.server)
+
+        self.add_reflection_service_name(PATHCOMP_DESCRIPTOR, 'PathCompService')
diff --git a/src/pathcomp/frontend/service/algorithms/tools/ResourceGroups.py b/src/pathcomp/frontend/service/algorithms/tools/ResourceGroups.py
index 42635bf4ad5cfd1a1a4cb174b73d26c51576af9a..b08830332f7fc6f526a19516b120e94a1a98b232 100644
--- a/src/pathcomp/frontend/service/algorithms/tools/ResourceGroups.py
+++ b/src/pathcomp/frontend/service/algorithms/tools/ResourceGroups.py
@@ -22,6 +22,8 @@ from common.tools.grpc.Tools import grpc_message_to_json_string
 DEVICE_TYPE_TO_DEEPNESS = {
     DeviceTypeEnum.EMULATED_DATACENTER.value             : 90,
     DeviceTypeEnum.DATACENTER.value                      : 90,
+    DeviceTypeEnum.EMULATED_CLIENT.value                 : 90,
+    DeviceTypeEnum.CLIENT.value                          : 90,
 
     DeviceTypeEnum.TERAFLOWSDN_CONTROLLER.value          : 80,
     DeviceTypeEnum.EMULATED_IP_SDN_CONTROLLER.value      : 80,
@@ -50,6 +52,8 @@ DEVICE_TYPE_TO_DEEPNESS = {
     DeviceTypeEnum.OPTICAL_TRANSPONDER.value             : 10,
     DeviceTypeEnum.EMULATED_OPTICAL_ROADM.value          : 10,
     DeviceTypeEnum.OPTICAL_ROADM.value                   : 10,
+    DeviceTypeEnum.QKD_NODE.value                        : 10,
+    DeviceTypeEnum.OPEN_ROADM.value                      : 10,
 
     DeviceTypeEnum.EMULATED_OPTICAL_SPLITTER.value       :  0,
     DeviceTypeEnum.NETWORK.value                         :  0, # network out of our control; always delegate
diff --git a/src/service/service/ServiceService.py b/src/service/service/ServiceService.py
index b99826e5b0f6ab8b228c32f4c7811181c83c7198..e088a99ebcc2e1b8258500df33ed8e319202d41c 100644
--- a/src/service/service/ServiceService.py
+++ b/src/service/service/ServiceService.py
@@ -14,6 +14,7 @@
 
 from common.Constants import ServiceNameEnum
 from common.Settings import get_service_port_grpc
+from common.proto.service_pb2 import DESCRIPTOR as SERVICE_DESCRIPTOR
 from common.proto.service_pb2_grpc import add_ServiceServiceServicer_to_server
 from common.tools.service.GenericGrpcService import GenericGrpcService
 from .ServiceServiceServicerImpl import ServiceServiceServicerImpl
@@ -27,3 +28,5 @@ class ServiceService(GenericGrpcService):
 
     def install_servicers(self):
         add_ServiceServiceServicer_to_server(self.service_servicer, self.server)
+
+        self.add_reflection_service_name(SERVICE_DESCRIPTOR, 'ServiceService')
diff --git a/src/service/service/service_handlers/l3nm_gnmi_openconfig/ConfigRuleComposer.py b/src/service/service/service_handlers/l3nm_gnmi_openconfig/ConfigRuleComposer.py
index c8227975f3633ede1ee48cb1175e439615cb0543..277d6d7e1a574afafa138d517cfec4c644e25023 100644
--- a/src/service/service/service_handlers/l3nm_gnmi_openconfig/ConfigRuleComposer.py
+++ b/src/service/service/service_handlers/l3nm_gnmi_openconfig/ConfigRuleComposer.py
@@ -21,7 +21,9 @@ from service.service.service_handler_api.AnyTreeTools import TreeNode
 
 LOGGER = logging.getLogger(__name__)
 
-NETWORK_INSTANCE = 'teraflowsdn'
+#NETWORK_INSTANCE = 'teraflowsdn' # TODO: investigate; sometimes it does not create/delete static rules properly
+NETWORK_INSTANCE = 'default'
+DEFAULT_NETWORK_INSTANCE = 'default'
 
 RE_IF    = re.compile(r'^\/interface\[([^\]]+)\]$')
 RE_SUBIF = re.compile(r'^\/interface\[([^\]]+)\]\/subinterface\[([^\]]+)\]$')
@@ -108,12 +110,21 @@ class EndpointComposer:
         if self.ipv4_address is None: return []
         if self.ipv4_prefix_len is None: return []
         json_config_rule = json_config_rule_delete if delete else json_config_rule_set
-        config_rules = [
-            json_config_rule(*_network_instance_interface(
+
+        config_rules : List[Dict] = list()
+        if network_instance_name != DEFAULT_NETWORK_INSTANCE:
+            config_rules.append(json_config_rule(*_network_instance_interface(
                 network_instance_name, self.objekt.name, self.sub_interface_index
-            )),
-        ]
-        if not delete:
+            )))
+
+        if delete:
+            config_rules.extend([
+                json_config_rule(*_interface(
+                    self.objekt.name, index=self.sub_interface_index, address_ip=None,
+                    address_prefix=None, enabled=False
+                )),
+            ])
+        else:
             config_rules.extend([
                 json_config_rule(*_interface(
                     self.objekt.name, index=self.sub_interface_index, address_ip=self.ipv4_address,
@@ -128,6 +139,12 @@ class EndpointComposer:
             'address_ip'    : self.ipv4_address,
             'address_prefix': self.ipv4_prefix_len,
         }
+    
+    def __str__(self):
+        data = {'uuid': self.uuid}
+        if self.objekt is not None: data['name'] = self.objekt.name
+        data.update(self.dump())
+        return json.dumps(data)
 
 class DeviceComposer:
     def __init__(self, device_uuid : str) -> None:
@@ -187,7 +204,8 @@ class DeviceComposer:
                 endpoint.ipv4_prefix_len = ipv4_prefix_len
                 endpoint.sub_interface_index = int(subif_index)
                 endpoint_ip_network = netaddr.IPNetwork('{:s}/{:d}'.format(ipv4_network, ipv4_prefix_len))
-                self.connected.add(str(endpoint_ip_network.cidr))
+                if '0.0.0.0/' not in str(endpoint_ip_network.cidr):
+                    self.connected.add(str(endpoint_ip_network.cidr))
 
             match = RE_SR.match(config_rule_custom.resource_key)
             if match is not None:
@@ -211,9 +229,9 @@ class DeviceComposer:
         if self.objekt.device_type not in SELECTED_DEVICES: return []
 
         json_config_rule = json_config_rule_delete if delete else json_config_rule_set
-        config_rules = [
+        config_rules : List[Dict] = list()
+        if network_instance_name != DEFAULT_NETWORK_INSTANCE:
             json_config_rule(*_network_instance(network_instance_name, 'L3VRF'))
-        ]
         for endpoint in self.endpoints.values():
             config_rules.extend(endpoint.get_config_rules(network_instance_name, delete=delete))
         if len(self.static_routes) > 0:
@@ -240,6 +258,12 @@ class DeviceComposer:
             'static_routes' : self.static_routes,
         }
 
+    def __str__(self):
+        data = {'uuid': self.uuid}
+        if self.objekt is not None: data['name'] = self.objekt.name
+        data.update(self.dump())
+        return json.dumps(data)
+
 class ConfigRuleComposer:
     def __init__(self) -> None:
         self.objekt : Optional[Service] = None
diff --git a/src/service/service/service_handlers/l3nm_gnmi_openconfig/L3NMGnmiOpenConfigServiceHandler.py b/src/service/service/service_handlers/l3nm_gnmi_openconfig/L3NMGnmiOpenConfigServiceHandler.py
index 8aa3781a4c3c0d238d38491fb31d8dfdf9102368..4099675fa57df11b11302c210113189f0153b599 100644
--- a/src/service/service/service_handlers/l3nm_gnmi_openconfig/L3NMGnmiOpenConfigServiceHandler.py
+++ b/src/service/service/service_handlers/l3nm_gnmi_openconfig/L3NMGnmiOpenConfigServiceHandler.py
@@ -65,8 +65,9 @@ class L3NMGnmiOpenConfigServiceHandler(_ServiceHandler):
 
             self.__endpoint_map[(device_uuid, endpoint_uuid)] = (device_obj.name, endpoint_obj.name)
 
+        LOGGER.debug('[pre] config_rule_composer = {:s}'.format(json.dumps(self.__config_rule_composer.dump())))
         self.__static_route_generator.compose(endpoints)
-        LOGGER.debug('config_rule_composer = {:s}'.format(json.dumps(self.__config_rule_composer.dump())))
+        LOGGER.debug('[post] config_rule_composer = {:s}'.format(json.dumps(self.__config_rule_composer.dump())))
 
     def _do_configurations(
         self, config_rules_per_device : Dict[str, List[Dict]], endpoints : List[Tuple[str, str, Optional[str]]],
@@ -110,8 +111,8 @@ class L3NMGnmiOpenConfigServiceHandler(_ServiceHandler):
         #network_instance_name = service_uuid.split('-')[0]
         #config_rules_per_device = self.__config_rule_composer.get_config_rules(network_instance_name, delete=False)
         config_rules_per_device = self.__config_rule_composer.get_config_rules(delete=False)
-        LOGGER.debug('config_rules_per_device={:s}'.format(str(config_rules_per_device)))
-        results = self._do_configurations(config_rules_per_device, endpoints)
+        LOGGER.debug('config_rules_per_device={:s}'.format(json.dumps(config_rules_per_device)))
+        results = self._do_configurations(config_rules_per_device, endpoints, delete=False)
         LOGGER.debug('results={:s}'.format(str(results)))
         return results
 
@@ -128,7 +129,7 @@ class L3NMGnmiOpenConfigServiceHandler(_ServiceHandler):
         #network_instance_name = service_uuid.split('-')[0]
         #config_rules_per_device = self.__config_rule_composer.get_config_rules(network_instance_name, delete=True)
         config_rules_per_device = self.__config_rule_composer.get_config_rules(delete=True)
-        LOGGER.debug('config_rules_per_device={:s}'.format(str(config_rules_per_device)))
+        LOGGER.debug('config_rules_per_device={:s}'.format(json.dumps(config_rules_per_device)))
         results = self._do_configurations(config_rules_per_device, endpoints, delete=True)
         LOGGER.debug('results={:s}'.format(str(results)))
         return results
diff --git a/src/service/service/service_handlers/l3nm_gnmi_openconfig/StaticRouteGenerator.py b/src/service/service/service_handlers/l3nm_gnmi_openconfig/StaticRouteGenerator.py
index 201f22e637556eee9e5e78c83db23b5e3d56c85f..cdc58049d8c22dbd0ed4b338aa5c0f0e61e9842e 100644
--- a/src/service/service/service_handlers/l3nm_gnmi_openconfig/StaticRouteGenerator.py
+++ b/src/service/service/service_handlers/l3nm_gnmi_openconfig/StaticRouteGenerator.py
@@ -63,12 +63,29 @@ class StaticRouteGenerator:
     def _compute_link_endpoints(
         self, connection_hop_list : List[Tuple[str, str, Optional[str]]]
     ) -> List[Tuple[Tuple[str, str, Optional[str]], Tuple[str, str, Optional[str]]]]:
+        # In some cases connection_hop_list might contain repeated endpoints, remove them here.
+        added_connection_hops = set()
+        filtered_connection_hop_list = list()
+        for connection_hop in connection_hop_list:
+            if connection_hop in added_connection_hops: continue
+            filtered_connection_hop_list.append(connection_hop)
+            added_connection_hops.add(connection_hop)
+        connection_hop_list = filtered_connection_hop_list
+
+        # In some cases connection_hop_list first and last items might be internal endpoints of
+        # devices instead of link endpoints. Filter those endpoints not reaching a new device.
+        if len(connection_hop_list) > 2 and connection_hop_list[0][0] == connection_hop_list[1][0]:
+            # same device on first 2 endpoints
+            connection_hop_list = connection_hop_list[1:]
+        if len(connection_hop_list) > 2 and connection_hop_list[-1][0] == connection_hop_list[-2][0]:
+            # same device on last 2 endpoints
+            connection_hop_list = connection_hop_list[:-1]
+
         num_connection_hops = len(connection_hop_list)
         if num_connection_hops % 2 != 0: raise Exception('Number of connection hops must be even')
         if num_connection_hops < 4: raise Exception('Number of connection hops must be >= 4')
 
-        # Skip service endpoints (first and last)
-        it_connection_hops = iter(connection_hop_list[1:-1])
+        it_connection_hops = iter(connection_hop_list)
         return list(zip(it_connection_hops, it_connection_hops))
 
     def _compute_link_addresses(
@@ -130,6 +147,7 @@ class StaticRouteGenerator:
             if endpoint.ipv4_address is None: continue
             ip_network = _compose_ipv4_network(endpoint.ipv4_address, endpoint.ipv4_prefix_len)
 
+            if '0.0.0.0/' in str(ip_network.cidr): continue
             device.connected.add(str(ip_network.cidr))
 
     def _compute_static_routes(
diff --git a/src/service/tests/test_l3nm_gnmi_static_rule_gen/MockServiceHandler.py b/src/service/tests/test_l3nm_gnmi_static_rule_gen/MockServiceHandler.py
index 22da218ab53c4a9d08c07dbf2553b9d8bbf407a8..a480f6b31884610782b15340ff1c40b6209b062d 100644
--- a/src/service/tests/test_l3nm_gnmi_static_rule_gen/MockServiceHandler.py
+++ b/src/service/tests/test_l3nm_gnmi_static_rule_gen/MockServiceHandler.py
@@ -19,6 +19,7 @@ from common.tools.object_factory.Connection import json_connection_id
 from common.tools.object_factory.Device import json_device_id
 from common.type_checkers.Checkers import chk_type
 from service.service.service_handler_api._ServiceHandler import _ServiceHandler
+#from service.service.service_handler_api.AnyTreeTools import TreeNode
 from service.service.service_handler_api.SettingsHandler import SettingsHandler
 from service.service.service_handler_api.Tools import get_device_endpoint_uuids, get_endpoint_matching
 from .MockTaskExecutor import MockTaskExecutor
@@ -45,6 +46,10 @@ class MockServiceHandler(_ServiceHandler):
         service_settings = self.__settings_handler.get_service_settings()
         self.__config_rule_composer.configure(self.__service, service_settings)
 
+        #prev_endpoint_obj = None
+        #prev_endpoint     = None
+        #settings_for_next = None
+        #for i,endpoint in enumerate(endpoints):
         for endpoint in endpoints:
             device_uuid, endpoint_uuid = get_device_endpoint_uuids(endpoint)
 
@@ -60,8 +65,35 @@ class MockServiceHandler(_ServiceHandler):
             _endpoint = _device.get_endpoint(endpoint_obj.name)
             _endpoint.configure(endpoint_obj, endpoint_settings)
 
+            #if settings_for_next is not None:
+            #    _endpoint.configure(endpoint_obj, settings_for_next)
+            #    settings_for_next = None
+
+            #if endpoint_settings is not None and 'neighbor_address' in endpoint_settings.value:
+            #    _neighbor_settings = {'address_ip': endpoint_settings.value['neighbor_address']}
+            #
+            #    if 'address_prefix' in endpoint_settings.value:
+            #        _neighbor_settings['address_prefix'] = endpoint_settings.value['address_prefix']
+            #    elif 'prefix_length' in endpoint_settings.value:
+            #        _neighbor_settings['address_prefix'] = endpoint_settings.value['prefix_length']
+            #    else:
+            #        MSG = 'IP Address Prefix not found. Tried: address_prefix and prefix_length. endpoint_settings.value={:s}'
+            #        raise Exception(MSG.format(str(endpoint_settings.value)))
+            #
+            #    neighbor_settings = TreeNode('.')
+            #    neighbor_settings.value = _neighbor_settings
+            #    if i % 2 == 0:
+            #        # configure in next endpoint
+            #        settings_for_next = neighbor_settings
+            #    else:
+            #        # configure in previous endpoint
+            #        prev_endpoint.configure(prev_endpoint_obj, neighbor_settings)
+
             self.__endpoint_map[(device_uuid, endpoint_uuid)] = (device_obj.name, endpoint_obj.name)
 
+            #prev_endpoint = _endpoint
+            #prev_endpoint_obj = endpoint_obj
+
         self.__static_route_generator.compose(endpoints)
         LOGGER.debug('config_rule_composer = {:s}'.format(json.dumps(self.__config_rule_composer.dump())))
 
@@ -106,7 +138,7 @@ class MockServiceHandler(_ServiceHandler):
         #network_instance_name = service_uuid.split('-')[0]
         #config_rules_per_device = self.__config_rule_composer.get_config_rules(network_instance_name, delete=False)
         config_rules_per_device = self.__config_rule_composer.get_config_rules(delete=False)
-        LOGGER.debug('config_rules_per_device={:s}'.format(str(config_rules_per_device)))
+        LOGGER.debug('config_rules_per_device={:s}'.format(json.dumps(config_rules_per_device)))
         results = self._do_configurations(config_rules_per_device, endpoints)
         LOGGER.debug('results={:s}'.format(str(results)))
         return results
@@ -123,7 +155,7 @@ class MockServiceHandler(_ServiceHandler):
         #network_instance_name = service_uuid.split('-')[0]
         #config_rules_per_device = self.__config_rule_composer.get_config_rules(network_instance_name, delete=True)
         config_rules_per_device = self.__config_rule_composer.get_config_rules(delete=True)
-        LOGGER.debug('config_rules_per_device={:s}'.format(str(config_rules_per_device)))
+        LOGGER.debug('config_rules_per_device={:s}'.format(json.dumps(config_rules_per_device)))
         results = self._do_configurations(config_rules_per_device, endpoints, delete=True)
         LOGGER.debug('results={:s}'.format(str(results)))
         return results
diff --git a/src/service/tests/test_l3nm_gnmi_static_rule_gen/test_unitary_sns4sns.py b/src/service/tests/test_l3nm_gnmi_static_rule_gen/test_unitary_sns4sns.py
index 0177500e2a3963fb00b3aabc27b2aa0bcaa0f12d..64035f1bbf4bb80bb5192488bffcbb4962458617 100644
--- a/src/service/tests/test_l3nm_gnmi_static_rule_gen/test_unitary_sns4sns.py
+++ b/src/service/tests/test_l3nm_gnmi_static_rule_gen/test_unitary_sns4sns.py
@@ -37,27 +37,23 @@ SERVICE = Service(**json_service_l3nm_planned(
         json_endpoint_id(json_device_id('edge-net'), 'eth1'),
     ],
     config_rules=[
+        json_config_rule_set('/settings', {'address_families': ['IPV4'], 'mtu': 1500}),
+        json_config_rule_set('/static_routing', {}),
+
         json_config_rule_set('/device[core-net]/endpoint[eth1]/settings', {
-            'address_ip': '10.10.10.0', 'address_prefix': 24, 'index': 0
-        }),
-        json_config_rule_set('/device[r1]/endpoint[eth10]/settings', {
-            'address_ip': '10.10.10.229', 'address_prefix': 24, 'index': 0
-        }),
-        json_config_rule_set('/device[r2]/endpoint[eth10]/settings', {
-            'address_ip': '10.158.72.229', 'address_prefix': 24, 'index': 0
+            'address_ip': '10.10.10.0', 'neighbor_address': '10.10.10.229', 'address_prefix': 24, 'index': 0
         }),
         json_config_rule_set('/device[edge-net]/endpoint[eth1]/settings', {
-            'address_ip': '10.158.72.0', 'address_prefix': 24, 'index': 0
+            'address_ip': '10.158.72.0', 'neighbor_address': '10.158.72.229', 'address_prefix': 24, 'index': 0
         }),
     ]
 ))
 
 CONNECTION_ENDPOINTS : List[Tuple[str, str, Optional[str]]] = [
     #('core-net', 'int',   None),
-    ('core-net', 'eth1',  None),
-    ('r1',       'eth10', None), ('r1',       'eth2',  None),
-    ('r2',       'eth1',  None), ('r2',       'eth10', None),
-    ('edge-net', 'eth1',  None),
+    ('core-net', 'eth1',  None), ('r1',       'eth10', None),
+    ('r1',       'eth2',  None), ('r2',       'eth1',  None),
+    ('r2',       'eth10', None), ('edge-net', 'eth1',  None),
     #('edge-net', 'int',   None),
 ]
 
diff --git a/src/slice/service/SliceService.py b/src/slice/service/SliceService.py
index dc2584f82d0704080f16e83aa958ba0db6f08fe2..ac4e809762c1ffb6097506f34d519056f2bd3426 100644
--- a/src/slice/service/SliceService.py
+++ b/src/slice/service/SliceService.py
@@ -14,9 +14,10 @@
 
 from common.Constants import ServiceNameEnum
 from common.Settings import get_service_port_grpc
+from common.proto.slice_pb2 import DESCRIPTOR as SLICE_DESCRIPTOR
 from common.proto.slice_pb2_grpc import add_SliceServiceServicer_to_server
 from common.tools.service.GenericGrpcService import GenericGrpcService
-from slice.service.SliceServiceServicerImpl import SliceServiceServicerImpl
+from .SliceServiceServicerImpl import SliceServiceServicerImpl
 
 class SliceService(GenericGrpcService):
     def __init__(self, cls_name: str = __name__) -> None:
@@ -26,3 +27,5 @@ class SliceService(GenericGrpcService):
 
     def install_servicers(self):
         add_SliceServiceServicer_to_server(self.slice_servicer, self.server)
+
+        self.add_reflection_service_name(SLICE_DESCRIPTOR, 'SliceService')
diff --git a/src/telemetry/backend/collector_api/_Collector.py b/src/telemetry/backend/collector_api/_Collector.py
new file mode 100644
index 0000000000000000000000000000000000000000..ec4ba943c90de8a8d683d1e7a9dd9d48865b5edf
--- /dev/null
+++ b/src/telemetry/backend/collector_api/_Collector.py
@@ -0,0 +1,236 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import threading
+from typing import Any, Iterator, List, Optional, Tuple, Union
+
+# Special resource names to request to the collector to retrieve the specified
+# configuration/structural resources.
+# These resource names should be used with GetConfig() method.
+RESOURCE_ENDPOINTS = '__endpoints__'
+RESOURCE_INTERFACES = '__interfaces__'
+RESOURCE_NETWORK_INSTANCES = '__network_instances__'
+RESOURCE_ROUTING_POLICIES = '__routing_policies__'
+RESOURCE_SERVICES = '__services__'
+RESOURCE_ACL = '__acl__'
+RESOURCE_INVENTORY = '__inventory__'
+
+
+class _Collector:
+    def __init__(self, name : str, address: str, port: int, **settings) -> None:
+        """ Initialize Collector.
+            Parameters:
+                address : str
+                    The address of the device
+                port : int
+                    The port of the device
+                **settings
+                    Extra settings required by the collector.
+        """
+        self._name = name
+        self._address = address
+        self._port = port
+        self._settings = settings
+
+    @property
+    def name(self): return self._name
+
+    @property
+    def address(self): return self._address
+
+    @property
+    def port(self): return self._port
+
+    @property
+    def settings(self): return self._settings
+
+    def Connect(self) -> bool:
+        """ Connect to the Device.
+            Returns:
+                succeeded : bool
+                    Boolean variable indicating if connection succeeded.
+        """
+        raise NotImplementedError()
+
+    def Disconnect(self) -> bool:
+        """ Disconnect from the Device.
+            Returns:
+                succeeded : bool
+                    Boolean variable indicating if disconnection succeeded.
+        """
+        raise NotImplementedError()
+
+    def GetInitialConfig(self) -> List[Tuple[str, Any]]:
+        """ Retrieve initial configuration of entire device.
+            Returns:
+                values : List[Tuple[str, Any]]
+                    List of tuples (resource key, resource value) for
+                    resource keys.
+        """
+        raise NotImplementedError()
+
+    def GetConfig(self, resource_keys: List[str] = []) -> \
+            List[Tuple[str, Union[Any, None, Exception]]]:
+        """ Retrieve running configuration of entire device or
+        selected resource keys.
+            Parameters:
+                resource_keys : List[str]
+                    List of keys pointing to the resources to be retrieved.
+            Returns:
+                values : List[Tuple[str, Union[Any, None, Exception]]]
+                    List of tuples (resource key, resource value) for
+                    resource keys requested. If a resource is found,
+                    the appropriate value type must be retrieved.
+                    If a resource is not found, None must be retrieved as
+                    value for that resource. In case of Exception,
+                    the Exception must be retrieved as value.
+        """
+        raise NotImplementedError()
+
+    def SetConfig(self, resources: List[Tuple[str, Any]]) -> \
+            List[Union[bool, Exception]]:
+        """ Create/Update configuration for a list of resources.
+            Parameters:
+                resources : List[Tuple[str, Any]]
+                    List of tuples, each containing a resource_key pointing the
+                    resource to be modified, and a resource_value containing
+                    the new value to be set.
+            Returns:
+                results : List[Union[bool, Exception]]
+                    List of results for resource key changes requested.
+                    Return values must be in the same order as the
+                    resource keys requested. If a resource is properly set,
+                    True must be retrieved; otherwise, the Exception that is
+                    raised during the processing must be retrieved.
+        """
+        raise NotImplementedError()
+
+    def DeleteConfig(self, resources: List[Tuple[str, Any]]) -> \
+            List[Union[bool, Exception]]:
+        """ Delete configuration for a list of resources.
+            Parameters:
+                resources : List[Tuple[str, Any]]
+                    List of tuples, each containing a resource_key pointing the
+                    resource to be modified, and a resource_value containing
+                    possible additionally required values to locate
+                    the value to be removed.
+            Returns:
+                results : List[Union[bool, Exception]]
+                    List of results for resource key deletions requested.
+                    Return values must be in the same order as the resource keys
+                    requested. If a resource is properly deleted, True must be
+                    retrieved; otherwise, the Exception that is raised during
+                    the processing must be retrieved.
+        """
+        raise NotImplementedError()
+
+    def SubscribeState(self, subscriptions: List[Tuple[str, float, float]]) -> \
+            List[Union[bool, Exception]]:
+        """ Subscribe to state information of entire device or
+        selected resources. Subscriptions are incremental.
+            Collector should keep track of requested resources.
+            Parameters:
+                subscriptions : List[Tuple[str, float, float]]
+                    List of tuples, each containing a resource_key pointing the
+                    resource to be subscribed, a sampling_duration, and a
+                    sampling_interval (both in seconds with float
+                    representation) defining, respectively, for how long
+                    monitoring should last, and the desired monitoring interval
+                    for the resource specified.
+            Returns:
+                results : List[Union[bool, Exception]]
+                    List of results for resource key subscriptions requested.
+                    Return values must be in the same order as the resource keys
+                    requested. If a resource is properly subscribed,
+                    True must be retrieved; otherwise, the Exception that is
+                    raised during the processing must be retrieved.
+        """
+        raise NotImplementedError()
+
+    def UnsubscribeState(self, subscriptions: List[Tuple[str, float, float]]) \
+            -> List[Union[bool, Exception]]:
+        """ Unsubscribe from state information of entire device
+        or selected resources. Subscriptions are incremental.
+            Collector should keep track of requested resources.
+            Parameters:
+                subscriptions : List[str]
+                    List of tuples, each containing a resource_key pointing the
+                    resource to be subscribed, a sampling_duration, and a
+                    sampling_interval (both in seconds with float
+                    representation) defining, respectively, for how long
+                    monitoring should last, and the desired monitoring interval
+                    for the resource specified.
+            Returns:
+                results : List[Union[bool, Exception]]
+                    List of results for resource key un-subscriptions requested.
+                    Return values must be in the same order as the resource keys
+                    requested. If a resource is properly unsubscribed,
+                    True must be retrieved; otherwise, the Exception that is
+                    raised during the processing must be retrieved.
+        """
+        raise NotImplementedError()
+
+    def GetState(
+        self, blocking=False, terminate : Optional[threading.Event] = None
+    ) -> Iterator[Tuple[float, str, Any]]:
+        """ Retrieve last collected values for subscribed resources.
+        Operates as a generator, so this method should be called once and will
+        block until values are available. When values are available,
+        it should yield each of them and block again until new values are
+        available. When the collector is destroyed, GetState() can return instead
+        of yield to terminate the loop.
+        Terminate enables to request interruption of the generation.
+            Examples:
+                # keep looping waiting for extra samples (generator loop)
+                terminate = threading.Event()
+                i = 0
+                for timestamp,resource_key,resource_value in my_collector.GetState(blocking=True, terminate=terminate):
+                    process(timestamp, resource_key, resource_value)
+                    i += 1
+                    if i == 10: terminate.set()
+
+                # just retrieve accumulated samples
+                samples = my_collector.GetState(blocking=False, terminate=terminate)
+                # or (as classical loop)
+                i = 0
+                for timestamp,resource_key,resource_value in my_collector.GetState(blocking=False, terminate=terminate):
+                    process(timestamp, resource_key, resource_value)
+                    i += 1
+                    if i == 10: terminate.set()
+            Parameters:
+                blocking : bool
+                    Select the collector behaviour. In both cases, the collector will
+                    first retrieve the samples accumulated and available in the
+                    internal queue. Then, if blocking, the collector does not
+                    terminate the loop and waits for additional samples to come,
+                    thus behaving as a generator. If non-blocking, the collector
+                    terminates the loop and returns. Non-blocking behaviour can
+                    be used for periodically polling the collector, while blocking
+                    can be used when a separate thread is in charge of
+                    collecting the samples produced by the collector.
+                terminate : threading.Event
+                    Signals the interruption of the GetState method as soon as
+                    possible.
+            Returns:
+                results : Iterator[Tuple[float, str, Any]]
+                    Sequences of state sample. Each State sample contains a
+                    float Unix-like timestamps of the samples in seconds with up
+                    to microsecond resolution, the resource_key of the sample,
+                    and its resource_value.
+                    Only resources with an active subscription must be
+                    retrieved. Interval and duration of the sampling process are
+                    specified when creating the subscription using method
+                    SubscribeState(). Order of values yielded is arbitrary.
+        """
+        raise NotImplementedError()
diff --git a/src/telemetry/backend/collector_api/__init__.py b/src/telemetry/backend/collector_api/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..023830645e0fcb60e3f8583674a954810af222f2
--- /dev/null
+++ b/src/telemetry/backend/collector_api/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
diff --git a/src/telemetry/backend/collectors/__init__.py b/src/telemetry/backend/collectors/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..023830645e0fcb60e3f8583674a954810af222f2
--- /dev/null
+++ b/src/telemetry/backend/collectors/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
diff --git a/src/telemetry/backend/collectors/emulated/EmulatedCollector.py b/src/telemetry/backend/collectors/emulated/EmulatedCollector.py
new file mode 100644
index 0000000000000000000000000000000000000000..90be013368c5aa80dcb52c2394e8b74f9d74b6f4
--- /dev/null
+++ b/src/telemetry/backend/collectors/emulated/EmulatedCollector.py
@@ -0,0 +1,450 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import pytz
+import queue
+import logging
+import uuid
+import json
+from anytree import Node, Resolver
+from apscheduler.events import EVENT_JOB_ADDED, EVENT_JOB_REMOVED
+from apscheduler.schedulers.background import BackgroundScheduler
+from apscheduler.jobstores.memory import MemoryJobStore
+from apscheduler.executors.pool import ThreadPoolExecutor
+from datetime import datetime, timedelta
+from typing import Any, Iterator, List, Tuple, Union, Optional
+from telemetry.backend.collector_api._Collector import _Collector
+from .EmulatedHelper import EmulatedCollectorHelper
+from .SyntheticMetricsGenerator import SyntheticMetricsGenerator
+
+
+class EmulatedCollector(_Collector):
+    """
+    EmulatedCollector is a class that simulates a network collector for testing purposes.
+    It provides functionalities to manage configurations, state subscriptions, and synthetic data generation.
+    """
+    def __init__(self, address: str, port: int, **settings):
+        super().__init__('emulated_collector', address, port, **settings)
+        self._initial_config = Node('root')                 # Tree structure for initial config
+        self._running_config = Node('root')                 # Tree structure for running config
+        self._subscriptions  = Node('subscriptions')        # Tree for state subscriptions
+        self._resolver       = Resolver()                   # For path resolution in tree structures
+        self._out_samples    = queue.Queue()                # Queue to hold synthetic state samples
+        self._synthetic_data = SyntheticMetricsGenerator(metric_queue=self._out_samples)  # Placeholder for synthetic data generator
+        self._scheduler      = BackgroundScheduler(daemon=True)
+        self._scheduler.configure(
+            jobstores = {'default': MemoryJobStore()},
+            executors = {'default': ThreadPoolExecutor(max_workers=1)},
+            timezone  = pytz.utc
+        )
+        self._scheduler.add_listener(self._listener_job_added_to_subscription_tree,     EVENT_JOB_ADDED)
+        self._scheduler.add_listener(self._listener_job_removed_from_subscription_tree, EVENT_JOB_REMOVED)
+        self._helper_methods = EmulatedCollectorHelper()
+
+        self.logger    = logging.getLogger(__name__)
+        self.connected = False          # To track connection state
+        self.logger.info("EmulatedCollector initialized")
+
+    def Connect(self) -> bool:
+        self.logger.info(f"Connecting to {self.address}:{self.port}")
+        self.connected = True
+        self._scheduler.start()
+        self.logger.info(f"Successfully connected to {self.address}:{self.port}")
+        return True
+
+    def Disconnect(self) -> bool:
+        self.logger.info(f"Disconnecting from {self.address}:{self.port}")
+        if not self.connected:
+            self.logger.warning("Collector is not connected. Nothing to disconnect.")
+            return False
+        self._scheduler.shutdown()
+        self.connected = False
+        self.logger.info(f"Successfully disconnected from {self.address}:{self.port}")
+        return True
+
+    def _require_connection(self):
+        if not self.connected:
+            raise RuntimeError("Collector is not connected. Please connect before performing operations.")
+
+    def SubscribeState(self, subscriptions: List[Tuple[str, float, float]]) -> List[Union[bool, Exception]]:
+        self._require_connection()
+        results = []
+        for resource_key, duration, interval in subscriptions:
+            resource_key = self._helper_methods.validate_resource_key(resource_key)    # Validate the endpoint name
+            self.logger.info(f"1. Subscribing to {resource_key} with duration {duration}s and interval {interval}s")
+            try:
+                self._resolver.get(self._running_config, resource_key)   # Verify if the resource key exists in the running configuration
+                self.logger.info(f"Resource key {resource_key} exists in the configuration.")
+                resource_value = json.loads(self._resolver.get(self._running_config, resource_key).value) 
+                if resource_value is not None:
+                    sample_type_ids = resource_value['sample_types']
+                    self.logger.info(f"Sample type IDs for {resource_key}: {sample_type_ids}")
+                    if len(sample_type_ids) == 0:
+                        self.logger.warning(f"No sample types found for {resource_key}. Skipping subscription.")
+                        results.append(False)
+                        continue
+                else:
+                    self.logger.warning(f"No sample types found for {resource_key}. Skipping subscription.")
+                    results.append(False)
+                    continue
+                # Add the job to the scheduler
+                job_id = f"{resource_key}-{uuid.uuid4()}"
+                self._scheduler.add_job(
+                    self._generate_sample,
+                    'interval',
+                    seconds=interval,
+                    args=[resource_key, sample_type_ids],
+                    id=job_id,
+                    replace_existing=True,
+                    end_date=datetime.now(pytz.utc) + timedelta(seconds=duration)
+                )
+                self.logger.info(f"Job added to scheduler for resource key {resource_key} with duration {duration}s and interval {interval}s")
+                results.append(True)
+            except Exception as e:
+                self.logger.error(f"Failed to verify resource key or add job: {e}")
+                results.append(e)
+        return results
+
+    def UnsubscribeState(self, subscriptions: List[Tuple[str, float, float]]) -> List[Union[bool, Exception]]:
+        self._require_connection()
+        results = []
+        for resource_key, _, _ in subscriptions:
+            resource_key = self._helper_methods.validate_resource_key(resource_key)
+            try:
+                # Check if job exists
+                job_ids = [job.id for job in self._scheduler.get_jobs() if resource_key in job.id]
+                if not job_ids:
+                    self.logger.warning(f"No active jobs found for {resource_key}. It might have already terminated.")
+                    results.append(False)
+                    continue
+                # Remove jobs
+                for job_id in job_ids:
+                    self._scheduler.remove_job(job_id)
+                
+                self.logger.info(f"Unsubscribed from {resource_key} with job IDs: {job_ids}")
+                results.append(True)
+            except Exception as e:
+                self.logger.exception(f"Failed to unsubscribe from {resource_key}")
+                results.append(e)
+        return results
+
+    def GetState(self, blocking: bool = False, terminate: Optional[queue.Queue] = None) -> Iterator[Tuple[float, str, Any]]:
+        self._require_connection()
+        start_time = datetime.now(pytz.utc)
+        duration = 10  # Duration of the subscription in seconds (as an example)
+
+        while True:
+            try:
+                if terminate and not terminate.empty():
+                    self.logger.info("Termination signal received, stopping GetState")
+                    break
+
+                elapsed_time = (datetime.now(pytz.utc) - start_time).total_seconds()
+                if elapsed_time >= duration:
+                    self.logger.info("Duration expired, stopping GetState")
+                    break
+
+                sample = self._out_samples.get(block=blocking, timeout=1 if blocking else 0.1)
+                self.logger.info(f"Retrieved state sample: {sample}")
+                yield sample
+            except queue.Empty:
+                if not blocking:
+                    self.logger.info("No more samples in queue, exiting GetState")
+                    return None
+
+    def _generate_sample(self, resource_key: str, sample_type_ids : List[int]):
+        # Simulate generating a sample for the resource key
+        self.logger.debug(f"Executing _generate_sample for resource: {resource_key}")
+        sample = self._synthetic_data.generate_synthetic_data_point(resource_key, sample_type_ids)
+        self._out_samples.put(sample)
+
+# ------------- Event Listeners (START)-----------------
+
+    def _listener_job_removed_from_subscription_tree(self, event):
+        if event.job_id:
+            # Extract the resource key from the job ID
+            resource_key = event.job_id.split('-')[0]
+            resource_key = self._helper_methods.validate_resource_key(resource_key)
+            
+            # Remove the subscription from the tree
+            try:
+                subscription_path = resource_key.split('/')
+                parent = self._subscriptions
+                for part in subscription_path:
+                    parent = next((child for child in parent.children if child.name == part), None)
+                    if not parent:
+                        raise ValueError(f"Subscription path '{resource_key}' not found in tree.")
+                if parent:
+                    parent.parent.children = tuple(child for child in parent.parent.children if child != parent)
+                    self.logger.warning(f"Automatically removed subscription from subscription_tree for {resource_key} after job termination by listener. Maybe due to timeout.")
+            except Exception as e:
+                self.logger.warning(f"Failed to remove subscription for {resource_key}: {e}")
+
+    def _listener_job_added_to_subscription_tree(self, event):
+        try:
+            job_id = event.job_id
+            if job_id:
+                resource_key = job_id.split('-')[0]  # Extract resource key from job ID
+                resource_key = self._helper_methods.validate_resource_key(resource_key)
+                subscription_path = resource_key.split('/')
+                parent = self._subscriptions
+                for part in subscription_path:
+                    node = next((child for child in parent.children if child.name == part), None)
+                    if not node:
+                        node = Node(part, parent=parent)
+                    parent = node
+                parent.value = {
+                    "job_id": job_id
+                }
+                self.logger.info(f"Automatically added subscription for {resource_key} to the subscription_tree by listener.")
+        except Exception as e:
+            self.logger.exception("Failed to add subscription to the tree")
+
+# ------------- Event Listeners (END)-----------------
+
+#-------------------------------------------------------------------------------------
+# ------- The below methods are kept for debugging purposes (test-case) only ---------
+#-------------------------------------------------------------------------------------
+
+#  This method can be commented but this will arise an error in the test-case (@pytest.fixture --> connected_configured_collector()).
+    def SetConfig(self, resources: dict) -> List[Union[bool, Exception]]:  # For debugging purposes.
+        self._require_connection()
+        results = []
+
+        # if not isinstance(resources, dict):
+        #     self.logger.error("Invalid configuration format: resources must be a dictionary.")
+        #     raise ValueError("Invalid configuration format. Must be a dictionary.")
+        if 'config_rules' not in resources or not isinstance(resources['config_rules'], list):
+            self.logger.error("Invalid configuration format: 'config_rules' key missing or not a list.")
+            raise ValueError("Invalid configuration format. Must contain a 'config_rules' key with a list of rules.")
+
+        for rule in resources['config_rules']:
+            try:
+                if 'action' not in rule or 'custom' not in rule:
+                    raise ValueError(f"Invalid rule format: {rule}")
+
+                action = rule['action']
+                custom = rule['custom']
+                resource_key = custom.get('resource_key')
+                resource_value = custom.get('resource_value')
+
+                if not resource_key:
+                    raise ValueError(f"Resource key is missing in rule: {rule}")
+
+                if resource_value is None:
+                    raise ValueError(f"Resource value is None for key: {resource_key}")
+                if not resource_key:
+                    raise ValueError(f"Resource key is missing in rule: {rule}")
+
+                if action == 1:  # Set action
+                    resource_path = self._helper_methods._parse_resource_key(resource_key)
+                    # self.logger.info(f"1. Setting configuration for resource key {resource_key} and resource_path: {resource_path}")
+                    parent = self._running_config
+
+                    for part in resource_path[:-1]:
+                        if '[' in part and ']' in part:
+                            base, index = part.split('[', 1)
+                            index = index.rstrip(']')
+                            parent = self._helper_methods._find_or_create_node(index, self._helper_methods._find_or_create_node(base, parent))
+                            # self.logger.info(f"2a. Creating node: {base}, {index}, {parent}")
+                        elif resource_path[-1] != 'settings':
+                            # self.logger.info(f"2b. Creating node: {part}")
+                            parent = self._helper_methods._find_or_create_node(part, parent)
+
+                    final_part = resource_path[-1]
+                    if final_part in ['address', 'port']: 
+                        self._helper_methods._create_or_update_node(final_part, parent, resource_value)
+                        self.logger.info(f"Configured: {resource_key} = {resource_value}")
+
+                    if resource_key.startswith("_connect/settings"):
+                        parent = self._helper_methods._find_or_create_node("_connect", self._running_config)
+                        settings_node = self._helper_methods._find_or_create_node("settings", parent)
+                        settings_node.value = None  # Ensure settings node has None value
+                        endpoints_node = self._helper_methods._find_or_create_node("endpoints", settings_node)
+
+                        for endpoint in resource_value.get("endpoints", []):
+                            uuid = endpoint.get("uuid")
+                            uuid = uuid.replace('/', '_') if uuid else None
+                            if uuid:
+                                # self.logger.info(f"3. Creating endpoint: {uuid}, {endpoint}, {endpoints_node}")
+                                self._helper_methods._create_or_update_node(uuid, endpoints_node, endpoint)
+                                self.logger.info(f"Configured endpoint: {uuid} : {endpoint}")
+
+                    elif resource_key.startswith("/interface"):
+                        interface_parent = self._helper_methods._find_or_create_node("interface", self._running_config)
+                        name = resource_value.get("name")
+                        name = name.replace('/', '_') if name else None
+                        if name:
+                            self._helper_methods._create_or_update_node(name, interface_parent, resource_value)
+                            self.logger.info(f"Configured interface: {name} : {resource_value}")
+                            # self.logger.info(f"4. Configured interface: {name}")
+
+                    results.append(True)
+                else:
+                    raise ValueError(f"Unsupported action '{action}' in rule: {rule}")
+
+                if resource_value is None:
+                    raise ValueError(f"Resource value is None for key: {resource_key}")
+
+            except Exception as e:
+                self.logger.exception(f"Failed to apply rule: {rule}")
+                results.append(e)
+
+        return results
+
+#-----------------------------------
+# ------- EXTRA Methods ------------
+#-----------------------------------
+
+    # def log_active_jobs(self):              # For debugging purposes.
+    #     """
+    #     Logs the IDs of all active jobs.
+    #     This method retrieves the list of active jobs from the scheduler and logs their IDs using the logger.
+    #     """
+    #     self._require_connection()
+    #     jobs = self._scheduler.get_jobs()
+    #     self.logger.info(f"Active jobs: {[job.id for job in jobs]}")
+
+    # def print_config_tree(self):            # For debugging purposes.
+    #     """
+    #     Reads the configuration using GetConfig and prints it as a hierarchical tree structure.
+    #     """
+    #     self._require_connection()
+
+    #     def print_tree(node, indent=""):
+    #         """
+    #         Recursively prints the configuration tree.
+
+    #         Args:
+    #             node (Node): The current node to print.
+    #             indent (str): The current indentation level.
+    #         """
+    #         if node.name != "root":  # Skip the root node's name
+    #             value = getattr(node, "value", None)
+    #             print(f"{indent}- {node.name}: {json.loads(value) if value else ''}")
+            
+    #         for child in node.children:
+    #             print_tree(child, indent + "  ")
+
+    #     print("Configuration Tree:")
+    #     print_tree(self._running_config)
+
+
+    # def GetInitialConfig(self) -> List[Tuple[str, Any]]:    # comment
+    #     self._require_connection()
+    #     results = []
+    #     for node in self._initial_config.descendants:
+    #         value = getattr(node, "value", None)
+    #         results.append((node.name, json.loads(value) if value else None))
+    #     self.logger.info("Retrieved initial configurations")
+    #     return results
+
+    # def GetConfig(self, resource_keys: List[str] = []) -> List[Tuple[str, Union[Any, dict, Exception]]]:    # comment
+    #     """
+    #     Retrieves the configuration for the specified resource keys.
+    #     If no keys are provided, returns the full configuration tree.
+
+    #     Args:
+    #         resource_keys (List[str]): A list of keys specifying the configuration to retrieve.
+            
+    #     Returns:
+    #         List[Tuple[str, Union[Any, dict, Exception]]]: A list of tuples with the resource key and its value, 
+    #                                                     subtree, or an exception.
+    #     """
+    #     self._require_connection()
+    #     results = []
+
+    #     try:
+    #         if not resource_keys:
+    #             # If no specific keys are provided, return the full configuration tree
+
+    #             full_tree = self._helper_methods._generate_subtree(self._running_config)
+    #             # full_tree = self._generate_subtree(self._running_config)
+    #             return [("full_configuration", full_tree)]
+
+    #         for key in resource_keys:
+    #             try:
+    #                 # Parse the resource key
+    #                 resource_path = self._helper_methods.(key)
+    #                 self.logger.info(f"1. Retrieving configuration for resource path : {resource_path}")
+
+    #                 # Navigate to the node corresponding to the key
+    #                 parent = self._running_config
+    #                 for part in resource_path:
+    #                     parent = self._find_or_raise_node(part, parent)
+
+    #                 # Check if the node has a value
+    #                 value = getattr(parent, "value", None)
+    #                 if value:
+    #                     # If a value exists, return it
+    #                     results.append((key, json.loads(value)))
+    #                 else:
+    #                     # If no value, return the subtree of this node
+    #                     subtree = self._helper_methods._generate_subtree(parent)
+    #                     # subtree = self._generate_subtree(parent)
+    #                     results.append((key, subtree))
+
+    #             except Exception as e:
+    #                 self.logger.exception(f"Failed to retrieve configuration for key: {key}")
+    #                 results.append((key, e))
+
+    #     except Exception as e:
+    #         self.logger.exception("Failed to retrieve configurations")
+    #         results.append(("Error", e))
+
+    #     return results
+
+    # def DeleteConfig(self, resources: List[Tuple[str, Any]]) -> List[Union[bool, Exception]]: # comment
+    #     self._require_connection()
+    #     results = []
+
+    #     for key in resources:
+    #         try:
+    #             # Parse resource key into parts, handling brackets correctly
+    #             resource_path = self._helper_methods.(key)
+
+    #             parent = self._running_config
+    #             for part in resource_path:
+    #                 parent = self._find_or_raise_node(part, parent)
+
+    #             # Delete the final node
+    #             node_to_delete = parent
+    #             parent = node_to_delete.parent
+    #             parent.children = tuple(child for child in parent.children if child != node_to_delete)
+    #             self.logger.info(f"Deleted configuration for key: {key}")
+
+    #             # Handle endpoints structure
+    #             if "interface" in key and "settings" in key:
+    #                 interface_name = key.split('[')[-1].split(']')[0]
+    #                 endpoints_parent = self._find_or_raise_node("_connect", self._running_config)
+    #                 endpoints_node = self._find_or_raise_node("endpoints", endpoints_parent)
+    #                 endpoint_to_delete = next((child for child in endpoints_node.children if child.name == interface_name), None)
+    #                 if endpoint_to_delete:
+    #                     endpoints_node.children = tuple(child for child in endpoints_node.children if child != endpoint_to_delete)
+    #                     self.logger.info(f"Removed endpoint entry for interface '{interface_name}'")
+
+    #             # Check if parent has no more children and is not the root
+    #             while parent and parent.name != "root" and not parent.children:
+    #                 node_to_delete = parent
+    #                 parent = node_to_delete.parent
+    #                 parent.children = tuple(child for child in parent.children if child != node_to_delete)
+    #                 self.logger.info(f"Deleted empty parent node: {node_to_delete.name}")
+
+    #             results.append(True)
+    #         except Exception as e:
+    #             self.logger.exception(f"Failed to delete configuration for key: {key}")
+    #             results.append(e)
+
+    #     return results
+
diff --git a/src/telemetry/backend/collectors/emulated/EmulatedHelper.py b/src/telemetry/backend/collectors/emulated/EmulatedHelper.py
new file mode 100644
index 0000000000000000000000000000000000000000..ebfb7d49fdb7ceafa00986e763e56dd59e445609
--- /dev/null
+++ b/src/telemetry/backend/collectors/emulated/EmulatedHelper.py
@@ -0,0 +1,166 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+from anytree import Node
+import json
+from typing import Any, List
+
+
+class EmulatedCollectorHelper:
+    """
+    Helper class for the emulated collector.
+    """
+    def __init__(self):
+        pass
+
+    def validate_resource_key(self, key: str) -> str:
+        """
+        Splits the input string into two parts: 
+        - The first part is '_connect/settings/endpoints/'.
+        - The second part is the remaining string after the first part, with '/' replaced by '_'.
+        
+        Args:
+            key (str): The input string to process.
+            
+        Returns:
+            str: A single string with the processed result.
+        """
+        prefix = '_connect/settings/endpoints/'
+        if not key.startswith(prefix):
+            raise ValueError(f"The input path '{key}' does not start with the expected prefix: {prefix}")
+        second_part = key[len(prefix):]
+        second_part_processed = second_part.replace('/', '_')
+        validated_key = prefix + second_part_processed
+        return validated_key
+
+#--------------------------------------------------------------------------------------
+# ------- Below function is kept for debugging purposes (test-cases) only -------------
+#--------------------------------------------------------------------------------------
+
+#  This below methods can be commented but are called by the SetConfig method in EmulatedCollector.py
+
+    def _find_or_create_node(self, name: str, parent: Node) -> Node:
+        """
+        Finds or creates a node with the given name under the specified parent.
+
+        Args:
+            name (str): The name of the node to find or create.
+            parent (Node): The parent node.
+
+        Returns:
+            Node: The found or created node.
+        """
+        node = next((child for child in parent.children if child.name == name), None)
+        if not node:
+            node = Node(name, parent=parent)
+        return node
+
+
+    def _create_or_update_node(self, name: str, parent: Node, value: Any):
+        """
+        Creates or updates a node with the given name and value under the specified parent.
+
+        Args:
+            name (str): The name of the node.
+            parent (Node): The parent node.
+            value (Any): The value to set on the node.
+        """
+        node = next((child for child in parent.children if child.name == name), None)
+        if node:
+            node.value = json.dumps(value)
+        else:
+            Node(name, parent=parent, value=json.dumps(value))
+
+
+    def _parse_resource_key(self, resource_key: str) -> List[str]:
+        """
+        Parses the resource key into parts, correctly handling brackets.
+
+        Args:
+            resource_key (str): The resource key to parse.
+
+        Returns:
+            List[str]: A list of parts from the resource key.
+        """
+        resource_path = []
+        current_part = ""
+        in_brackets = False
+
+        if not resource_key.startswith('/interface'):
+            for char in resource_key.strip('/'):
+                if char == '[':
+                    in_brackets = True
+                    current_part += char
+                elif char == ']':
+                    in_brackets = False
+                    current_part += char
+                elif char == '/' and not in_brackets:
+                    resource_path.append(current_part)
+                    current_part = ""
+                else:
+                    current_part += char
+            if current_part:
+                resource_path.append(current_part)
+            return resource_path
+        else:
+            resource_path = resource_key.strip('/').split('/', 1)
+            if resource_path[1] == 'settings':
+                return resource_path
+            else:
+                resource_path = [resource_key.strip('/').split('[')[0].strip('/'), resource_key.strip('/').split('[')[1].split(']')[0].replace('/', '_')]
+                return resource_path
+
+
+#-----------------------------------
+# ------- EXTRA Methods ------------
+#-----------------------------------
+
+    # def _generate_subtree(self, node: Node) -> dict:
+    #     """
+    #     Generates a subtree of the configuration tree starting from the specified node.
+
+    #     Args:
+    #         node (Node): The node from which to generate the subtree.
+
+    #     Returns:
+    #         dict: The subtree as a dictionary.
+    #     """
+    #     subtree = {}
+    #     for child in node.children:
+    #         if child.children:
+    #             subtree[child.name] = self._generate_subtree(child)
+    #         else:
+    #             value = getattr(child, "value", None)
+    #             subtree[child.name] = json.loads(value) if value else None
+    #     return subtree
+
+
+    # def _find_or_raise_node(self, name: str, parent: Node) -> Node:
+    #     """
+    #     Finds a node with the given name under the specified parent or raises an exception if not found.
+
+    #     Args:
+    #         name (str): The name of the node to find.
+    #         parent (Node): The parent node.
+
+    #     Returns:
+    #         Node: The found node.
+
+    #     Raises:
+    #         ValueError: If the node is not found.
+    #     """
+    #     node = next((child for child in parent.children if child.name == name), None)
+    #     if not node:
+    #         raise ValueError(f"Node '{name}' not found under parent '{parent.name}'.")
+    #     return node
diff --git a/src/telemetry/backend/collectors/emulated/SyntheticMetricsGenerator.py b/src/telemetry/backend/collectors/emulated/SyntheticMetricsGenerator.py
new file mode 100644
index 0000000000000000000000000000000000000000..a01e2c0e659f1eea6383030daeafef11c83d7a45
--- /dev/null
+++ b/src/telemetry/backend/collectors/emulated/SyntheticMetricsGenerator.py
@@ -0,0 +1,129 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import numpy as np
+import random
+import logging
+import queue
+import time
+
+LOGGER = logging.getLogger(__name__)
+
+class SyntheticMetricsGenerator():
+    """
+    This collector class generates synthetic network metrics based on the current network state.
+    The metrics include packet_in, packet_out, bytes_in, bytes_out, packet_loss (percentage), packet_drop_count, byte_drop_count, and latency.
+    The network state can be 'good', 'moderate', or 'poor', and it affects the generated metrics accordingly.
+    """
+    def __init__(self, metric_queue=None, network_state="good"):
+        LOGGER.info("Initiaitng Emulator")
+        super().__init__()
+        self.metric_queue        = metric_queue if metric_queue is not None else queue.Queue()
+        self.network_state       = network_state
+        self.running             = True
+        self.set_initial_parameter_values()  # update this method to set the initial values for the parameters
+
+    def set_initial_parameter_values(self):
+        self.bytes_per_pkt       = random.uniform(65, 150)
+        self.states              = ["good", "moderate", "poor"]
+        self.state_probabilities = {
+            "good"    : [0.9, 0.1, 0.0],
+            "moderate": [0.2, 0.7, 0.1],
+            "poor"    : [0.0, 0.3, 0.7]
+        }
+        if self.network_state   == "good":
+            self.packet_in = random.uniform(700, 900)
+        elif self.network_state == "moderate":
+            self.packet_in = random.uniform(300, 700)
+        else:
+            self.packet_in = random.uniform(100, 300)
+
+    def generate_synthetic_data_point(self, resource_key, sample_type_ids):
+        """
+        Generates a synthetic data point based on the current network state.
+
+        Parameters:
+        resource_key (str): The key associated with the resource for which the data point is generated.
+
+        Returns:
+        tuple: A tuple containing the timestamp, resource key, and a dictionary of generated metrics.
+        """
+        if self.network_state   == "good":
+            packet_loss  = random.uniform(0.01, 0.1)  
+            random_noise = random.uniform(1,10)
+            latency      = random.uniform(5, 25)
+        elif self.network_state == "moderate":
+            packet_loss  = random.uniform(0.1, 1)
+            random_noise = random.uniform(10, 40)
+            latency      = random.uniform(25, 100)
+        elif self.network_state == "poor":
+            packet_loss  = random.uniform(1, 3)
+            random_noise = random.uniform(40, 100)
+            latency      = random.uniform(100, 300)
+        else:
+            raise ValueError("Invalid network state. Must be 'good', 'moderate', or 'poor'.")
+
+        period            = 60 * 60 * random.uniform(10, 100)
+        amplitude         = random.uniform(50, 100) 
+        sin_wave          = amplitude  * np.sin(2 * np.pi   * 100 / period) + self.packet_in
+        packet_in         = sin_wave   + ((sin_wave/100)    * random_noise)
+        packet_out        = packet_in  - ((packet_in / 100) * packet_loss)
+        bytes_in          = packet_in  * self.bytes_per_pkt
+        bytes_out         = packet_out * self.bytes_per_pkt
+        packet_drop_count = packet_in  * (packet_loss / 100)
+        byte_drop_count   = packet_drop_count * self.bytes_per_pkt
+
+        state_prob = self.state_probabilities[self.network_state]
+        self.network_state = random.choices(self.states, state_prob)[0]
+        print (self.network_state)
+
+        generated_samples = {
+            "packet_in" : int(packet_in),   "packet_out" : int(packet_out),    "bytes_in"          : float(bytes_in),
+            "bytes_out" : float(bytes_out), "packet_loss": float(packet_loss), "packet_drop_count" : int(packet_drop_count),
+            "latency"   : float(latency),   "byte_drop_count": float(byte_drop_count)
+        }
+        requested_metrics = self.metric_id_mapper(sample_type_ids, generated_samples)
+        # generated_samples = {metric: generated_samples[metric] for metric in requested_metrics}
+
+        return (time.time(), resource_key, requested_metrics)
+
+    def metric_id_mapper(self, sample_type_ids, metric_dict):
+        """
+        Maps the sample type IDs to the corresponding metric names.
+
+        Parameters:
+        sample_type_ids (list): A list of sample type IDs.
+
+        Returns:
+        list: A list of metric names.
+        """
+        metric_names = []
+        for sample_type_id in sample_type_ids:
+            if sample_type_id == 102:
+                metric_names.append(metric_dict["packet_in"])
+            elif sample_type_id == 101:
+                metric_names.append(metric_dict["packet_out"])
+            elif sample_type_id == 103:
+                metric_names.append(metric_dict["packet_drop_count"])
+            elif sample_type_id == 202:
+                metric_names.append(metric_dict["bytes_in"])
+            elif sample_type_id == 201:
+                metric_names.append(metric_dict["bytes_out"])
+            elif sample_type_id == 203:
+                metric_names.append(metric_dict["byte_drop_count"])
+            elif sample_type_id == 701:
+                metric_names.append(metric_dict["latency"])
+            else:
+                raise ValueError(f"Invalid sample type ID: {sample_type_id}")
+        return metric_names
diff --git a/src/telemetry/backend/collectors/emulated/__init__.py b/src/telemetry/backend/collectors/emulated/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..023830645e0fcb60e3f8583674a954810af222f2
--- /dev/null
+++ b/src/telemetry/backend/collectors/emulated/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
diff --git a/src/telemetry/backend/requirements.in b/src/telemetry/backend/requirements.in
index effd1752af0d1a2d00312ff4935676c24964c784..2843bdbf68defcc1a972b49bfa12a8107b696aaa 100644
--- a/src/telemetry/backend/requirements.in
+++ b/src/telemetry/backend/requirements.in
@@ -12,4 +12,7 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+anytree==2.8.0
 confluent-kafka==2.3.*
+numpy==2.0.1
+APScheduler==3.10.1
diff --git a/src/telemetry/backend/service/TelemetryBackendService.py b/src/telemetry/backend/service/TelemetryBackendService.py
index fe5792a023a926d41a71b0dc7614d7e2b093507b..a1f17df3cb65a6bd13ffb8e96a6a07b536200825 100755
--- a/src/telemetry/backend/service/TelemetryBackendService.py
+++ b/src/telemetry/backend/service/TelemetryBackendService.py
@@ -12,21 +12,20 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import queue
 import json
 import time
-import random
 import logging
 import threading
-from typing   import Any, Dict
-from datetime import datetime, timezone
-# from common.proto.context_pb2 import Empty
-from confluent_kafka import Producer as KafkaProducer
-from confluent_kafka import Consumer as KafkaConsumer
-from confluent_kafka import KafkaError
+from typing           import Any, Dict
+from datetime         import datetime, timezone
+from confluent_kafka  import Producer as KafkaProducer
+from confluent_kafka  import Consumer as KafkaConsumer
+from confluent_kafka  import KafkaError
 from common.Constants import ServiceNameEnum
-from common.Settings import get_service_port_grpc
-from common.tools.kafka.Variables import KafkaConfig, KafkaTopic
-from common.method_wrappers.Decorator import MetricsPool
+from common.Settings  import get_service_port_grpc
+from common.method_wrappers.Decorator        import MetricsPool
+from common.tools.kafka.Variables            import KafkaConfig, KafkaTopic
 from common.tools.service.GenericGrpcService import GenericGrpcService
 
 LOGGER             = logging.getLogger(__name__)
@@ -35,7 +34,7 @@ METRICS_POOL       = MetricsPool('TelemetryBackend', 'backendService')
 class TelemetryBackendService(GenericGrpcService):
     """
     Class listens for request on Kafka topic, fetches requested metrics from device.
-    Produces metrics on both RESPONSE and VALUE kafka topics.
+    Produces metrics on both TELEMETRY_RESPONSE and VALUE kafka topics.
     """
     def __init__(self, cls_name : str = __name__) -> None:
         LOGGER.info('Init TelemetryBackendService')
@@ -45,7 +44,9 @@ class TelemetryBackendService(GenericGrpcService):
         self.kafka_consumer = KafkaConsumer({'bootstrap.servers' : KafkaConfig.get_kafka_address(),
                                             'group.id'           : 'backend',
                                             'auto.offset.reset'  : 'latest'})
-        self.running_threads = {}
+        self.running_threads   = {}
+        self.emulatorCollector = None
+        self.metric_queue      = queue.Queue()
 
     def install_servicers(self):
         threading.Thread(target=self.RequestListener).start()
@@ -57,7 +58,7 @@ class TelemetryBackendService(GenericGrpcService):
         LOGGER.info('Telemetry backend request listener is running ...')
         # print      ('Telemetry backend request listener is running ...')
         consumer = self.kafka_consumer
-        consumer.subscribe([KafkaTopic.REQUEST.value])
+        consumer.subscribe([KafkaTopic.TELEMETRY_REQUEST.value])
         while True:
             receive_msg = consumer.poll(2.0)
             if receive_msg is None:
@@ -66,93 +67,83 @@ class TelemetryBackendService(GenericGrpcService):
                 if receive_msg.error().code() == KafkaError._PARTITION_EOF:
                     continue
                 else:
-                    # print("Consumer error: {}".format(receive_msg.error()))
+                    LOGGER.error("Consumer error: {}".format(receive_msg.error()))
                     break
             try: 
                 collector = json.loads(receive_msg.value().decode('utf-8'))
                 collector_id = receive_msg.key().decode('utf-8')
                 LOGGER.debug('Recevied Collector: {:} - {:}'.format(collector_id, collector))
-                # print('Recevied Collector: {:} - {:}'.format(collector_id, collector))
 
                 if collector['duration'] == -1 and collector['interval'] == -1:
                     self.TerminateCollectorBackend(collector_id)
                 else:
-                    self.RunInitiateCollectorBackend(collector_id, collector)
+                    threading.Thread(target=self.InitiateCollectorBackend, 
+                                  args=(collector_id, collector)).start()
             except Exception as e:
-                LOGGER.warning("Unable to consumer message from topic: {:}. ERROR: {:}".format(KafkaTopic.REQUEST.value, e))
-                # print         ("Unable to consumer message from topic: {:}. ERROR: {:}".format(KafkaTopic.REQUEST.value, e))
+                LOGGER.warning("Unable to consumer message from topic: {:}. ERROR: {:}".format(KafkaTopic.TELEMETRY_REQUEST.value, e))
 
-    def TerminateCollectorBackend(self, collector_id):
-        if collector_id in self.running_threads:
-            thread, stop_event = self.running_threads[collector_id]
-            stop_event.set()
-            thread.join()
-            # print ("Terminating backend (by StopCollector): Collector Id: ", collector_id)
-            del self.running_threads[collector_id]
-            self.GenerateCollectorTerminationSignal(collector_id, "-1", -1)          # Termination confirmation to frontend.
-        else:
-            # print ('Backend collector {:} not found'.format(collector_id))
-            LOGGER.warning('Backend collector {:} not found'.format(collector_id))
-
-    def RunInitiateCollectorBackend(self, collector_id: str, collector: str):
-        stop_event = threading.Event()
-        thread = threading.Thread(target=self.InitiateCollectorBackend, 
-                                  args=(collector_id, collector, stop_event))
-        self.running_threads[collector_id] = (thread, stop_event)
-        thread.start()
-
-    def InitiateCollectorBackend(self, collector_id, collector, stop_event):
+    def InitiateCollectorBackend(self, collector_id, collector):
         """
         Method receives collector request and initiates collecter backend.
         """
-        # print("Initiating backend for collector: ", collector_id)
-        LOGGER.info("Initiating backend for collector: {:s}".format(str(collector_id)))
-        start_time = time.time()
-        while not stop_event.is_set():
-            if int(collector['duration']) != -1 and time.time() - start_time >= collector['duration']:            # condition to terminate backend
-                print("Execuation duration completed: Terminating backend: Collector Id: ", collector_id, " - ", time.time() - start_time)
-                self.GenerateCollectorTerminationSignal(collector_id, "-1", -1)       # Termination confirmation to frontend.
-                break
-            self.ExtractKpiValue(collector_id, collector['kpi_id'])
-            time.sleep(collector['interval'])
+        LOGGER.info("Initiating backend for collector: (Not Implemented... In progress ) {:s}".format(str(collector_id)))
+        # start_time = time.time()
+        # self.emulatorCollector = NetworkMetricsEmulator(
+        #     duration           = collector['duration'],
+        #     interval           = collector['interval'],
+        #     metric_queue       = self.metric_queue
+        # )
+        # self.emulatorCollector.start()
+        # self.running_threads[collector_id] = self.emulatorCollector
 
-    def GenerateCollectorTerminationSignal(self, collector_id: str, kpi_id: str, measured_kpi_value: Any):
+        # while self.emulatorCollector.is_alive():
+        #     if not self.metric_queue.empty():
+        #         metric_value = self.metric_queue.get()
+        #         LOGGER.debug("Metric: {:} - Value : {:}".format(collector['kpi_id'], metric_value))
+        #         self.GenerateKpiValue(collector_id, collector['kpi_id'] , metric_value)
+        #     time.sleep(1)
+        # self.TerminateCollectorBackend(collector_id)
+
+    def GenerateKpiValue(self, collector_id: str, kpi_id: str, measured_kpi_value: Any):
         """
-        Method to write kpi Termination signat on RESPONSE Kafka topic
+        Method to write kpi value on VALUE Kafka topic
         """
         producer = self.kafka_producer
         kpi_value : Dict = {
+            "time_stamp": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
             "kpi_id"    : kpi_id,
-            "kpi_value" : measured_kpi_value,
+            "kpi_value" : measured_kpi_value
         }
         producer.produce(
-            KafkaTopic.RESPONSE.value, # TODO: to  the topic ...
+            KafkaTopic.VALUE.value,
             key      = collector_id,
             value    = json.dumps(kpi_value),
             callback = self.delivery_callback
         )
         producer.flush()
 
-    def ExtractKpiValue(self, collector_id: str, kpi_id: str):
-        """
-        Method to extract kpi value.
-        """
-        measured_kpi_value = random.randint(1,100)                      # TODO: To be extracted from a device
-        # print ("Measured Kpi value: {:}".format(measured_kpi_value))
-        self.GenerateCollectorResponse(collector_id, kpi_id , measured_kpi_value)
+    def TerminateCollectorBackend(self, collector_id):
+        LOGGER.debug("Terminating collector backend...")
+        if collector_id in self.running_threads:
+            thread = self.running_threads[collector_id]
+            thread.stop()
+            del self.running_threads[collector_id]
+            LOGGER.debug("Collector backend terminated. Collector ID: {:}".format(collector_id))
+            self.GenerateCollectorTerminationSignal(collector_id, "-1", -1)          # Termination confirmation to frontend.
+        else:
+            LOGGER.warning('Backend collector {:} not found'.format(collector_id))
 
-    def GenerateCollectorResponse(self, collector_id: str, kpi_id: str, measured_kpi_value: Any):
+    def GenerateCollectorTerminationSignal(self, collector_id: str, kpi_id: str, measured_kpi_value: Any):
         """
-        Method to write kpi value on RESPONSE Kafka topic
+        Method to write kpi Termination signat on TELEMETRY_RESPONSE Kafka topic
         """
         producer = self.kafka_producer
         kpi_value : Dict = {
-            "time_stamp": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"),
             "kpi_id"    : kpi_id,
-            "kpi_value" : measured_kpi_value
+            "kpi_value" : measured_kpi_value,
         }
         producer.produce(
-            KafkaTopic.VALUE.value, # TODO: to  the topic ...
+            KafkaTopic.TELEMETRY_RESPONSE.value,
             key      = collector_id,
             value    = json.dumps(kpi_value),
             callback = self.delivery_callback
@@ -160,14 +151,9 @@ class TelemetryBackendService(GenericGrpcService):
         producer.flush()
 
     def delivery_callback(self, err, msg):
-        """
-        Callback function to handle message delivery status.
-        Args: err (KafkaError): Kafka error object.
-              msg (Message): Kafka message object.
-        """
-        if err:
-            LOGGER.error('Message delivery failed: {:}'.format(err))
+        if err: 
+            LOGGER.error('Message delivery failed: {:s}'.format(str(err)))
             # print(f'Message delivery failed: {err}')
-        #else:
-        #    LOGGER.debug('Message delivered to topic {:}'.format(msg.topic()))
-        #    # print(f'Message delivered to topic {msg.topic()}')
+        # else:
+        #     LOGGER.info('Message delivered to topic {:}'.format(msg.topic()))
+            # print(f'Message delivered to topic {msg.topic()}')
diff --git a/src/telemetry/backend/tests/messages.py b/src/telemetry/backend/tests/messages.py
index 0dc5506ab42d67d67a88cf8976409472213fe098..f6a2bb247f28d10654746e0c75b6ed1973382e38 100644
--- a/src/telemetry/backend/tests/messages.py
+++ b/src/telemetry/backend/tests/messages.py
@@ -12,4 +12,20 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+import uuid
+import random
+from common.proto import telemetry_frontend_pb2
+# from common.proto.kpi_sample_types_pb2 import KpiSampleType
+# from common.proto.kpi_manager_pb2 import KpiId
+
+def create_collector_request():
+    _create_collector_request                                = telemetry_frontend_pb2.Collector()
+    _create_collector_request.collector_id.collector_id.uuid = str(uuid.uuid4()) 
+    # _create_collector_request.collector_id.collector_id.uuid = "efef4d95-1cf1-43c4-9742-95c283dddddd"
+    _create_collector_request.kpi_id.kpi_id.uuid             = str(uuid.uuid4())
+    # _create_collector_request.kpi_id.kpi_id.uuid             = "6e22f180-ba28-4641-b190-2287bf448888"
+    _create_collector_request.duration_s                     = float(random.randint(8, 16))
+    # _create_collector_request.duration_s                     = -1
+    _create_collector_request.interval_s                     = float(random.randint(2, 4)) 
+    return _create_collector_request
 
diff --git a/src/telemetry/backend/tests/messages_emulated.py b/src/telemetry/backend/tests/messages_emulated.py
new file mode 100644
index 0000000000000000000000000000000000000000..e081fb3febc163d40742d3e690cc0e2b3d4b7d61
--- /dev/null
+++ b/src/telemetry/backend/tests/messages_emulated.py
@@ -0,0 +1,61 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import logging
+# Configure logging to ensure logs appear on the console
+logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
+logger = logging.getLogger(__name__)
+
+
+def create_test_configuration():
+    return {
+            "config_rules": [
+                {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}},
+                {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": 8080}},
+                {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {
+                    "endpoints": [
+                        {"uuid": "eth0",   "type": "ethernet", "sample_types": [101, 102]},
+                        {"uuid": "eth1",   "type": "ethernet", "sample_types": []},
+                        {"uuid": "13/1/2", "type": "copper",   "sample_types": [101, 102, 201, 202]}
+                    ]
+                }}},
+                {"action": 1, "custom": {"resource_key": "/interface[eth0]/settings", "resource_value": {
+                    "name": "eth0", "enabled": True
+                }}},
+                {"action": 1, "custom": {"resource_key": "/interface[eth1]/settings", "resource_value": {
+                    "name": "eth1", "enabled": False
+                }}},
+                {"action": 1, "custom": {"resource_key": "/interface[13/1/2]/settings", "resource_value": {
+                    "name": "13/1/2", "enabled": True
+                }}}
+            ]
+        }
+
+def create_specific_config_keys():
+    keys_to_return = ["_connect/settings/endpoints/eth1", "/interface/[13/1/2]/settings", "_connect/address"]
+    return keys_to_return
+
+def create_config_for_delete():
+    keys_to_delete = ["_connect/settings/endpoints/eth0", "/interface/[eth1]", "_connect/port"]
+    return keys_to_delete
+
+def create_test_subscriptions():
+    return [("_connect/settings/endpoints/eth1",   10, 2),
+            ("_connect/settings/endpoints/13/1/2", 15, 3),
+            ("_connect/settings/endpoints/eth0",   8,  2)]
+
+def create_unscubscribe_subscriptions():
+    return [("_connect/settings/endpoints/eth1",   10, 2),
+            ("_connect/settings/endpoints/13/1/2", 15, 3),
+            ("_connect/settings/endpoints/eth0",   8,  2)]
diff --git a/src/telemetry/backend/tests/test_backend.py b/src/telemetry/backend/tests/test_backend.py
index 5307cd9fe51f3bb15f5dd4915bfc601318db9551..e75b33ca58c6bf27c5d2e1c2012dc31de5274ad3 100644
--- a/src/telemetry/backend/tests/test_backend.py
+++ b/src/telemetry/backend/tests/test_backend.py
@@ -13,10 +13,11 @@
 # limitations under the License.
 
 import logging
-import threading
+import time
+from typing import Dict
 from common.tools.kafka.Variables import KafkaTopic
 from telemetry.backend.service.TelemetryBackendService import TelemetryBackendService
-
+from .messages import create_collector_request
 
 LOGGER = logging.getLogger(__name__)
 
@@ -34,4 +35,19 @@ def test_validate_kafka_topics():
 # def test_RunRequestListener():
 #     LOGGER.info('test_RunRequestListener')
 #     TelemetryBackendServiceObj = TelemetryBackendService()
-#     threading.Thread(target=TelemetryBackendServiceObj.RequestListener).start()
\ No newline at end of file
+#     threading.Thread(target=TelemetryBackendServiceObj.RequestListener).start()
+
+def test_RunInitiateCollectorBackend():
+    LOGGER.debug(">>> RunInitiateCollectorBackend <<<")
+    collector_obj = create_collector_request()
+    collector_id = collector_obj.collector_id.collector_id.uuid
+    collector_dict :  Dict = {
+        "kpi_id"  : collector_obj.kpi_id.kpi_id.uuid,
+        "duration": collector_obj.duration_s,
+        "interval": collector_obj.interval_s
+    }
+    TeleObj = TelemetryBackendService()
+    TeleObj.InitiateCollectorBackend(collector_id, collector_dict)
+    time.sleep(20)
+
+    LOGGER.debug("--- Execution Finished Sucessfully---")
diff --git a/src/telemetry/backend/tests/test_emulated.py b/src/telemetry/backend/tests/test_emulated.py
new file mode 100644
index 0000000000000000000000000000000000000000..feb5b1f7f92de4016f3bcb8eff8e17b843bf0c3e
--- /dev/null
+++ b/src/telemetry/backend/tests/test_emulated.py
@@ -0,0 +1,108 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import logging
+import time
+import pytest
+from telemetry.backend.collectors.emulated.EmulatedCollector import EmulatedCollector
+from telemetry.backend.tests.messages_emulated import (
+    create_test_configuration,
+    create_specific_config_keys,
+    create_config_for_delete,
+    create_test_subscriptions,
+)
+
+logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
+logger = logging.getLogger(__name__)
+
+@pytest.fixture
+def setup_collector():
+    """Sets up an EmulatedCollector instance for testing."""
+    yield EmulatedCollector(address="127.0.0.1", port=8080)
+
+@pytest.fixture
+def connected_configured_collector(setup_collector):
+    collector = setup_collector # EmulatedCollector(address="127.0.0.1", port=8080)
+    collector.Connect()
+    collector.SetConfig(create_test_configuration())
+    yield collector
+    collector.Disconnect()
+
+def test_connect(setup_collector):
+    logger.info(">>> test_connect <<<")
+    collector = setup_collector
+    assert collector.Connect() is True
+    assert collector.connected is True
+
+def test_disconnect(setup_collector):
+    logger.info(">>> test_disconnect <<<")
+    collector = setup_collector
+    collector.Connect()
+    assert collector.Disconnect() is True
+    assert collector.connected is False
+
+# def test_set_config(setup_collector):
+#     logger.info(">>> test_set_config <<<")
+#     collector = setup_collector
+#     collector.Connect()
+
+#     config = create_test_configuration()
+
+#     results = collector.SetConfig(config)
+#     assert all(result is True for result in results)
+
+# def test_get_config(connected_configured_collector):
+#     logger.info(">>> test_get_config <<<")
+#     resource_keys = create_specific_config_keys() 
+#     results = connected_configured_collector.GetConfig(resource_keys)
+
+#     for key, value in results:
+#         assert key in create_specific_config_keys()
+#         assert value is not None
+
+# def test_delete_config(connected_configured_collector):
+#     logger.info(">>> test_delete_config <<<")
+#     resource_keys = create_config_for_delete() 
+
+#     results = connected_configured_collector.DeleteConfig(resource_keys)
+#     assert all(result is True for result in results)
+
+def test_subscribe_state(connected_configured_collector):
+    logger.info(">>> test_subscribe_state <<<")
+    subscriptions = create_test_subscriptions() 
+
+    results = connected_configured_collector.SubscribeState(subscriptions)
+    # logger.info(f"Subscribed result: {results}.")
+    assert results ==  [False, True, True] # all(result is True for result in results)
+
+def test_unsubscribe_state(connected_configured_collector):
+    logger.info(">>> test_unsubscribe_state <<<")
+    subscriptions = create_test_subscriptions()
+
+    connected_configured_collector.SubscribeState(subscriptions)
+    results = connected_configured_collector.UnsubscribeState(subscriptions)
+    assert results ==  [False, True, True] # all(result is True for result in results)
+
+def test_get_state(connected_configured_collector):
+    logger.info(">>> test_get_state <<<")
+    subscriptions = create_test_subscriptions()
+
+    connected_configured_collector.SubscribeState(subscriptions)
+    logger.info(f"Subscribed to state: {subscriptions}. waiting for 12 seconds ...")
+    time.sleep(12)
+
+    state_iterator = connected_configured_collector.GetState(blocking=False)
+    states = list(state_iterator)
+
+    assert len(states) > 0
diff --git a/src/telemetry/frontend/service/TelemetryFrontendServiceServicerImpl.py b/src/telemetry/frontend/service/TelemetryFrontendServiceServicerImpl.py
index ce55f80510b3ff678ead1be82bda9101cc8e7e17..f74e97ffd4998ca0b3255ca4e1ebe496ebc6737b 100644
--- a/src/telemetry/frontend/service/TelemetryFrontendServiceServicerImpl.py
+++ b/src/telemetry/frontend/service/TelemetryFrontendServiceServicerImpl.py
@@ -74,7 +74,7 @@ class TelemetryFrontendServiceServicerImpl(TelemetryFrontendServiceServicer):
             "interval": collector_obj.interval_s
         }
         self.kafka_producer.produce(
-            KafkaTopic.REQUEST.value,
+            KafkaTopic.TELEMETRY_REQUEST.value,
             key      = collector_uuid,
             value    = json.dumps(collector_to_generate),
             callback = self.delivery_callback
@@ -110,7 +110,7 @@ class TelemetryFrontendServiceServicerImpl(TelemetryFrontendServiceServicer):
             "interval": -1
         }
         self.kafka_producer.produce(
-            KafkaTopic.REQUEST.value,
+            KafkaTopic.TELEMETRY_REQUEST.value,
             key      = collector_uuid,
             value    = json.dumps(collector_to_stop),
             callback = self.delivery_callback
@@ -168,7 +168,7 @@ class TelemetryFrontendServiceServicerImpl(TelemetryFrontendServiceServicer):
         """
         listener for response on Kafka topic.
         """
-        self.kafka_consumer.subscribe([KafkaTopic.RESPONSE.value])
+        self.kafka_consumer.subscribe([KafkaTopic.TELEMETRY_RESPONSE.value])
         while True:
             receive_msg = self.kafka_consumer.poll(2.0)
             if receive_msg is None:
@@ -196,7 +196,7 @@ class TelemetryFrontendServiceServicerImpl(TelemetryFrontendServiceServicer):
     def process_response(self, collector_id: str, kpi_id: str, kpi_value: Any):
         if kpi_id == "-1" and kpi_value == -1:
             # print ("Backend termination confirmation for collector id: ", collector_id)
-            LOGGER.info("Backend termination confirmation for collector id: ", collector_id)
+            LOGGER.info("Backend termination confirmation for collector id: {:}".format(collector_id))
         else:
-            LOGGER.info("Backend termination confirmation for collector id: ", collector_id)
+            LOGGER.info("Backend termination confirmation for collector id: {:}".format(collector_id))
             # print ("KPI Value: Collector Id:", collector_id, ", Kpi Id:", kpi_id, ", Value:", kpi_value)
diff --git a/src/tests/eucnc24/.gitlab-ci.yml b/src/tests/eucnc24/.gitlab-ci.yml
index 8c5e9f20ba2e891cd39c89beee200b22088b6438..02c4cced3981f4c12042e636652dca95c384a169 100644
--- a/src/tests/eucnc24/.gitlab-ci.yml
+++ b/src/tests/eucnc24/.gitlab-ci.yml
@@ -70,6 +70,11 @@ end2end_test eucnc24:
     - sleep 3
     - docker ps -a
 
+    # Dump configuration of the routers (before any configuration)
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+
     # Configure TeraFlowSDN deployment
     # Uncomment if DEBUG log level is needed for the components
     #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/contextservice.yaml
@@ -126,12 +131,30 @@ end2end_test eucnc24:
       --volume "$PWD/src/tests/${TEST_NAME}:/opt/results"
       $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-service-tfs-create.sh
 
+    # Dump configuration of the routers (after configure TFS service)
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+
     # Run end-to-end test: test connectivity with ping
-    - sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 192.168.1.10'
-    - sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 192.168.1.1'
-    - sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 192.168.2.1'
-    - sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 192.168.2.10'
-    - sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 192.168.3.10'
+    - export TEST1_10=$(sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.1.10' --format json)
+    - echo $TEST1_10
+    - echo $TEST1_10 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+    - export TEST1_1=$(sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.1.1' --format json)
+    - echo $TEST1_1
+    - echo $TEST1_1 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+    - export TEST2_1=$(sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.2.1' --format json)
+    - echo $TEST2_1
+    - echo $TEST2_1 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+    - export TEST2_10=$(sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.2.10' --format json)
+    - echo $TEST2_10
+    - echo $TEST2_10 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+    - export TEST3_1=$(sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.3.1' --format json)
+    - echo $TEST3_1
+    - echo $TEST3_1 | grep -E '3 packets transmitted, 0 received, 100\% packet loss'
+    - export TEST3_10=$(sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.3.10' --format json)
+    - echo $TEST3_10
+    - echo $TEST3_10 | grep -E '3 packets transmitted, 0 received, 100\% packet loss'
 
     # Run end-to-end test: deconfigure service TFS
     - >
@@ -140,6 +163,11 @@ end2end_test eucnc24:
       --volume "$PWD/src/tests/${TEST_NAME}:/opt/results"
       $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-service-tfs-remove.sh
 
+    # Dump configuration of the routers (after deconfigure TFS service)
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+
     # Run end-to-end test: configure service IETF
     - >
       docker run -t --rm --name ${TEST_NAME} --network=host 
@@ -147,12 +175,30 @@ end2end_test eucnc24:
       --volume "$PWD/src/tests/${TEST_NAME}:/opt/results"
       $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-service-ietf-create.sh
 
+    # Dump configuration of the routers (after configure IETF service)
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+
     # Run end-to-end test: test connectivity with ping
-    - sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 192.168.1.10'
-    - sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 192.168.1.1'
-    - sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 192.168.2.1'
-    - sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 192.168.2.10'
-    - sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 192.168.3.10'
+    - export TEST1_10=$(sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.1.10' --format json)
+    - echo $TEST1_10
+    - echo $TEST1_10 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+    - export TEST1_1=$(sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.1.1' --format json)
+    - echo $TEST1_1
+    - echo $TEST1_1 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+    - export TEST2_1=$(sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.2.1' --format json)
+    - echo $TEST2_1
+    - echo $TEST2_1 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+    - export TEST2_10=$(sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.2.10' --format json)
+    - echo $TEST2_10
+    - echo $TEST2_10 | grep -E '3 packets transmitted, 3 received, 0\% packet loss'
+    - export TEST3_1=$(sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.3.1' --format json)
+    - echo $TEST3_1
+    - echo $TEST3_1 | grep -E '3 packets transmitted, 0 received, 100\% packet loss'
+    - export TEST3_10=$(sudo containerlab exec --name eucnc24 --label clab-node-name=dc1 --cmd 'ping -n -c3 172.16.3.10' --format json)
+    - echo $TEST3_10
+    - echo $TEST3_10 | grep -E '3 packets transmitted, 0 received, 100\% packet loss'
 
     # Run end-to-end test: deconfigure service IETF
     - >
@@ -161,6 +207,11 @@ end2end_test eucnc24:
       --volume "$PWD/src/tests/${TEST_NAME}:/opt/results"
       $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-service-ietf-remove.sh
 
+    # Dump configuration of the routers (after deconfigure IETF service)
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+
     # Run end-to-end test: cleanup scenario
     - >
       docker run -t --rm --name ${TEST_NAME} --network=host 
@@ -169,6 +220,11 @@ end2end_test eucnc24:
       $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-cleanup.sh
 
   after_script:
+    # Dump configuration of the routers (on after_script)
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+    - sudo containerlab exec --name eucnc24 --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\""
+
     # Dump TeraFlowSDN component logs
     - source src/tests/${TEST_NAME}/deploy_specs.sh
     - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server
diff --git a/src/tests/eucnc24/README.md b/src/tests/eucnc24/README.md
index f8c2f9d49793b8e0751ea4ea09bf893e7ceae0b6..3cc7974568028faa2bfbad70942ff2cc82bbafa0 100644
--- a/src/tests/eucnc24/README.md
+++ b/src/tests/eucnc24/README.md
@@ -8,7 +8,7 @@
 ## TeraFlowSDN Deployment
 ```bash
 cd ~/tfs-ctrl
-source dataplane-in-a-box/deploy_specs.sh
+source ~/tfs-ctrl/src/tests/eucnc24/deploy_specs.sh
 ./deploy/all.sh
 ```
 
@@ -16,67 +16,55 @@ source dataplane-in-a-box/deploy_specs.sh
 
 ## Download and install ContainerLab
 ```bash
-sudo bash -c "$(curl -sL https://get.containerlab.dev)" -- -v 0.48.6
+sudo bash -c "$(curl -sL https://get.containerlab.dev)" -- -v 0.59.0
 ```
 
 ## Download Arista cEOS image and create Docker image
 ```bash
-cd ~/tfs-ctrl/dataplane-in-a-box
-docker import arista/cEOS64-lab-4.31.2F.tar ceos:4.31.2F
+cd ~/tfs-ctrl/src/tests/eucnc24/
+docker import arista/cEOS64-lab-4.32.2F.tar ceos:4.32.2F
 ```
 
 ## Deploy scenario
 ```bash
-cd ~/tfs-ctrl/dataplane-in-a-box
-sudo containerlab deploy --topo arista.clab.yml
+cd ~/tfs-ctrl/src/tests/eucnc24/
+sudo containerlab deploy --topo eucnc24.clab.yml
 ```
 
 ## Inspect scenario
 ```bash
-cd ~/tfs-ctrl/dataplane-in-a-box
-sudo containerlab inspect --topo arista.clab.yml
+cd ~/tfs-ctrl/src/tests/eucnc24/
+sudo containerlab inspect --topo eucnc24.clab.yml
 ```
 
 ## Destroy scenario
 ```bash
-cd ~/tfs-ctrl/dataplane-in-a-box
-sudo containerlab destroy --topo arista.clab.yml
-sudo rm -rf clab-arista/ .arista.clab.yml.bak
+cd ~/tfs-ctrl/src/tests/eucnc24/
+sudo containerlab destroy --topo eucnc24.clab.yml
+sudo rm -rf clab-eucnc24/ .eucnc24.clab.yml.bak
 ```
 
-## Access cEOS Bash
+## Access cEOS Bash/CLI
 ```bash
-docker exec -it clab-arista-r1 bash
-```
-
-## Access cEOS CLI
-```bash
-docker exec -it clab-arista-r1 Cli
-docker exec -it clab-arista-r2 Cli
+docker exec -it clab-eucnc24-r1 bash
+docker exec -it clab-eucnc24-r2 bash
+docker exec -it clab-eucnc24-r3 bash
+docker exec -it clab-eucnc24-r1 Cli
+docker exec -it clab-eucnc24-r2 Cli
+docker exec -it clab-eucnc24-r3 Cli
 ```
 
 ## Configure ContainerLab clients
 ```bash
-docker exec -it clab-arista-client1 bash
-    ip address add 192.168.1.10/24 dev eth1
-    ip route add 192.168.2.0/24 via 192.168.1.1
-    ip route add 192.168.3.0/24 via 192.168.1.1
-    ping 192.168.2.10
-    ping 192.168.3.10
-
-docker exec -it clab-arista-client2 bash
-    ip address add 192.168.2.10/24 dev eth1
-    ip route add 192.168.1.0/24 via 192.168.2.1
-    ip route add 192.168.3.0/24 via 192.168.2.1
-    ping 192.168.1.10
-    ping 192.168.3.10
-
-docker exec -it clab-arista-client3 bash
-    ip address add 192.168.3.10/24 dev eth1
-    ip route add 192.168.2.0/24 via 192.168.3.1
-    ip route add 192.168.3.0/24 via 192.168.3.1
-    ping 192.168.2.10
-    ping 192.168.3.10
+docker exec -it clab-eucnc24-dc1 bash
+    ip address add 172.16.1.10/24 dev eth1
+    ip route add 172.16.2.0/24 via 172.16.1.1
+    ping 172.16.2.10
+
+docker exec -it clab-eucnc24-dc2 bash
+    ip address add 172.16.2.10/24 dev eth1
+    ip route add 172.16.1.0/24 via 172.16.2.1
+    ping 172.16.1.10
 ```
 
 ## Install gNMIc
@@ -86,38 +74,38 @@ sudo bash -c "$(curl -sL https://get-gnmic.kmrd.dev)"
 
 ## gNMI Capabilities request
 ```bash
-gnmic --address clab-arista-wan1 --port 6030 --username admin --password admin --insecure capabilities
+gnmic --address clab-eucnc24-r1 --port 6030 --username admin --password admin --insecure capabilities
 ```
 
 ## gNMI Get request
 ```bash
-gnmic --address clab-arista-wan1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path / > wan1.json
-gnmic --address clab-arista-wan1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path /interfaces/interface > wan1-ifaces.json
+gnmic --address clab-eucnc24-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path / > r1.json
+gnmic --address clab-eucnc24-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path /interfaces/interface > r1-ifaces.json
 ```
 
 ## gNMI Set request
 ```bash
-#gnmic --address clab-arista-wan1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set --update-path /system/config/hostname --update-value srl11
-#gnmic --address clab-arista-wan1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path /system/config/hostname
+gnmic --address clab-eucnc24-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set --update-path /system/config/hostname --update-value srl11
+gnmic --address clab-eucnc24-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path /system/config/hostname
 ```
 
 ## Subscribe request
 ```bash
-gnmic --address clab-arista-wan1 --port 6030 --username admin --password admin --insecure --encoding json_ietf subscribe --path /interfaces/interface[name=Management0]/state/
+gnmic --address clab-eucnc24-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf subscribe --path /interfaces/interface[name=Management0]/state/
 
 # In another terminal, you can generate traffic opening SSH connection
-ssh admin@clab-arista-wan1
+ssh admin@clab-eucnc24-r1
 ```
 
 # Check configurations done:
 ```bash
-gnmic --address clab-arista-wan1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path '/network-instances' > wan1-nis.json
-gnmic --address clab-arista-wan1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path '/interfaces' > wan1-ifs.json
+gnmic --address clab-eucnc24-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path '/network-instances' > r1-nis.json
+gnmic --address clab-eucnc24-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path '/interfaces' > r1-ifs.json
 ```
 
 # Delete elements:
 ```bash
---address clab-arista-wan1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set --delete '/network-instances/network-instance[name=b19229e8]'
---address clab-arista-wan1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set --delete '/interfaces/interface[name=ethernet-1/1]/subinterfaces/subinterface[index=0]'
---address clab-arista-wan1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set --delete '/interfaces/interface[name=ethernet-1/2]/subinterfaces/subinterface[index=0]'
+--address clab-eucnc24-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set --delete '/network-instances/network-instance[name=b19229e8]'
+--address clab-eucnc24-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set --delete '/interfaces/interface[name=ethernet-1/1]/subinterfaces/subinterface[index=0]'
+--address clab-eucnc24-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set --delete '/interfaces/interface[name=ethernet-1/2]/subinterfaces/subinterface[index=0]'
 ```
diff --git a/src/tests/eucnc24/clab/eucnc24.clab.yml b/src/tests/eucnc24/clab/eucnc24.clab.yml
index 807a1847c2c2f7580a699aada2d21c0d2577942d..aaf971e360b4770913b9aade3c21b348d700fa86 100644
--- a/src/tests/eucnc24/clab/eucnc24.clab.yml
+++ b/src/tests/eucnc24/clab/eucnc24.clab.yml
@@ -26,10 +26,11 @@ topology:
       kind: arista_ceos
       #image: ceos:4.30.4M
       #image: ceos:4.31.2F
-      #image: ceos:4.31.5M
+      #image: ceos:4.31.5M # tested, works
       #image: ceos:4.32.0F
-      image: ceos:4.32.2F
+      image: ceos:4.32.2F # tested, works
       #image: ceos:4.32.2.1F
+      #image: ceos:4.33.1F # does not work, libyang.util.LibyangError: failed to parse data tree: No module named "openconfig-platform-healthz" in the context.
     linux:
       kind: linux
       image: ghcr.io/hellt/network-multitool:latest
@@ -38,30 +39,33 @@ topology:
     r1:
       kind: arista_ceos
       mgmt-ipv4: 172.20.20.101
+      startup-config: r1-startup.cfg
 
     r2:
       kind: arista_ceos
       mgmt-ipv4: 172.20.20.102
+      startup-config: r2-startup.cfg
 
     r3:
       kind: arista_ceos
       mgmt-ipv4: 172.20.20.103
+      startup-config: r3-startup.cfg
 
     dc1:
       kind: linux
-      mgmt-ipv4: 172.20.20.211
+      mgmt-ipv4: 172.20.20.201
       exec:
         - ip link set address 00:c1:ab:00:01:01 dev eth1
-        - ip address add 192.168.1.10/24 dev eth1
-        - ip route add 192.168.2.0/24 via 192.168.1.1
+        - ip address add 172.16.1.10/24 dev eth1
+        - ip route add 172.16.2.0/24 via 172.16.1.1
 
     dc2:
       kind: linux
-      mgmt-ipv4: 172.20.20.221
+      mgmt-ipv4: 172.20.20.202
       exec:
         - ip link set address 00:c1:ab:00:02:01 dev eth1
-        - ip address add 192.168.2.10/24 dev eth1
-        - ip route add 192.168.1.0/24 via 192.168.2.1
+        - ip address add 172.16.2.10/24 dev eth1
+        - ip route add 172.16.1.0/24 via 172.16.2.1
 
   links:
     - endpoints: ["r1:eth2", "r2:eth1"]
diff --git a/src/tests/eucnc24/clab/r1-startup.cfg b/src/tests/eucnc24/clab/r1-startup.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..b7feebe067b9c77572d63b719a588a4a2aa44cb9
--- /dev/null
+++ b/src/tests/eucnc24/clab/r1-startup.cfg
@@ -0,0 +1,48 @@
+! device: r1 (cEOSLab, EOS-4.32.2F-38195967.4322F (engineering build))
+!
+no aaa root
+!
+username admin privilege 15 role network-admin secret sha512 $6$OmfaAwJRg/r44r5U$9Fca1O1G6Bgsd4NKwSyvdRJcHHk71jHAR3apDWAgSTN/t/j1iroEhz5J36HjWjOF/jEVC/R8Wa60VmbX6.cr70
+!
+management api http-commands
+   no shutdown
+!
+no service interface inactive port-id allocation disabled
+!
+transceiver qsfp default-mode 4x10G
+!
+service routing protocols model multi-agent
+!
+hostname r1
+!
+spanning-tree mode mstp
+!
+system l1
+   unsupported speed action error
+   unsupported error-correction action error
+!
+management api gnmi
+   transport grpc default
+!
+management api netconf
+   transport ssh default
+!
+interface Ethernet2
+!
+interface Ethernet10
+!
+interface Management0
+   ip address 172.20.20.101/24
+!
+ip routing
+!
+ip route 0.0.0.0/0 172.20.20.1
+!
+router multicast
+   ipv4
+      software-forwarding kernel
+   !
+   ipv6
+      software-forwarding kernel
+!
+end
diff --git a/src/tests/eucnc24/clab/r2-startup.cfg b/src/tests/eucnc24/clab/r2-startup.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..e1ab661a0ab455ab22f025ec6b2f96cf42a9f2dd
--- /dev/null
+++ b/src/tests/eucnc24/clab/r2-startup.cfg
@@ -0,0 +1,48 @@
+! device: r2 (cEOSLab, EOS-4.32.2F-38195967.4322F (engineering build))
+!
+no aaa root
+!
+username admin privilege 15 role network-admin secret sha512 $6$OmfaAwJRg/r44r5U$9Fca1O1G6Bgsd4NKwSyvdRJcHHk71jHAR3apDWAgSTN/t/j1iroEhz5J36HjWjOF/jEVC/R8Wa60VmbX6.cr70
+!
+management api http-commands
+   no shutdown
+!
+no service interface inactive port-id allocation disabled
+!
+transceiver qsfp default-mode 4x10G
+!
+service routing protocols model multi-agent
+!
+hostname r2
+!
+spanning-tree mode mstp
+!
+system l1
+   unsupported speed action error
+   unsupported error-correction action error
+!
+management api gnmi
+   transport grpc default
+!
+management api netconf
+   transport ssh default
+!
+interface Ethernet1
+!
+interface Ethernet3
+!
+interface Management0
+   ip address 172.20.20.102/24
+!
+ip routing
+!
+ip route 0.0.0.0/0 172.20.20.1
+!
+router multicast
+   ipv4
+      software-forwarding kernel
+   !
+   ipv6
+      software-forwarding kernel
+!
+end
diff --git a/src/tests/eucnc24/clab/r3-startup.cfg b/src/tests/eucnc24/clab/r3-startup.cfg
new file mode 100644
index 0000000000000000000000000000000000000000..63c0625931e5a4645c8ae8741a2b5bd5fe8a28d6
--- /dev/null
+++ b/src/tests/eucnc24/clab/r3-startup.cfg
@@ -0,0 +1,48 @@
+! device: r3 (cEOSLab, EOS-4.32.2F-38195967.4322F (engineering build))
+!
+no aaa root
+!
+username admin privilege 15 role network-admin secret sha512 $6$OmfaAwJRg/r44r5U$9Fca1O1G6Bgsd4NKwSyvdRJcHHk71jHAR3apDWAgSTN/t/j1iroEhz5J36HjWjOF/jEVC/R8Wa60VmbX6.cr70
+!
+management api http-commands
+   no shutdown
+!
+no service interface inactive port-id allocation disabled
+!
+transceiver qsfp default-mode 4x10G
+!
+service routing protocols model multi-agent
+!
+hostname r3
+!
+spanning-tree mode mstp
+!
+system l1
+   unsupported speed action error
+   unsupported error-correction action error
+!
+management api gnmi
+   transport grpc default
+!
+management api netconf
+   transport ssh default
+!
+interface Ethernet2
+!
+interface Ethernet10
+!
+interface Management0
+   ip address 172.20.20.103/24
+!
+ip routing
+!
+ip route 0.0.0.0/0 172.20.20.1
+!
+router multicast
+   ipv4
+      software-forwarding kernel
+   !
+   ipv6
+      software-forwarding kernel
+!
+end
diff --git a/src/tests/eucnc24/data/ietf-l3vpn-service.json b/src/tests/eucnc24/data/ietf-l3vpn-service.json
index a6297b28f0fea94dcc8a457ad2b45d38e77aa4ea..a0f28ee063c97aaabdd3fdda679e8ebbcd8089dc 100644
--- a/src/tests/eucnc24/data/ietf-l3vpn-service.json
+++ b/src/tests/eucnc24/data/ietf-l3vpn-service.json
@@ -11,7 +11,7 @@
                     "site-network-accesses": {
                         "site-network-access": [
                             {
-                                "site-network-access-id": "int",
+                                "site-network-access-id": "eth1",
                                 "site-network-access-type": "ietf-l3vpn-svc:multipoint",
                                 "device-reference": "dc1",
                                 "vpn-attachment": {"vpn-id": "ietf-l3vpn-svc", "site-role": "ietf-l3vpn-svc:spoke-role"},
@@ -19,8 +19,8 @@
                                     "ipv4": {
                                         "address-allocation-type": "ietf-l3vpn-svc:static-address",
                                         "addresses": {
-                                            "provider-address": "192.168.1.1",
-                                            "customer-address": "192.168.1.10",
+                                            "provider-address": "172.16.1.1",
+                                            "customer-address": "172.16.1.10",
                                             "prefix-length": 24
                                         }
                                     }
@@ -48,7 +48,7 @@
                     "site-network-accesses": {
                         "site-network-access": [
                             {
-                                "site-network-access-id": "int",
+                                "site-network-access-id": "eth1",
                                 "site-network-access-type": "ietf-l3vpn-svc:multipoint",
                                 "device-reference": "dc2",
                                 "vpn-attachment": {"vpn-id": "ietf-l3vpn-svc", "site-role": "ietf-l3vpn-svc:hub-role"},
@@ -56,8 +56,8 @@
                                     "ipv4": {
                                         "address-allocation-type": "ietf-l3vpn-svc:static-address",
                                         "addresses": {
-                                            "provider-address": "192.168.2.1",
-                                            "customer-address": "192.168.2.10",
+                                            "provider-address": "172.16.2.1",
+                                            "customer-address": "172.16.2.10",
                                             "prefix-length": 24
                                         }
                                     }
diff --git a/src/tests/eucnc24/data/tfs-service.json b/src/tests/eucnc24/data/tfs-service.json
index 397fc84789111932da047acd22c7bc787888657f..e4bb7c2d255d2f119cd5c9646d01450ac4bffd9c 100644
--- a/src/tests/eucnc24/data/tfs-service.json
+++ b/src/tests/eucnc24/data/tfs-service.json
@@ -14,11 +14,11 @@
             "service_config": {"config_rules": [
                 {"action": "CONFIGACTION_SET", "custom": {
                     "resource_key": "/device[dc1]/endpoint[eth1]/settings",
-                    "resource_value": {"address_ip": "192.168.1.10", "address_prefix": 24, "index": 0}
+                    "resource_value": {"address_ip": "172.16.1.10", "address_prefix": 24, "index": 0}
                 }},
                 {"action": "CONFIGACTION_SET", "custom": {
                     "resource_key": "/device[dc2]/endpoint[eth1]/settings",
-                    "resource_value": {"address_ip": "192.168.2.10", "address_prefix": 24, "index": 0}
+                    "resource_value": {"address_ip": "172.16.2.10", "address_prefix": 24, "index": 0}
                 }}
             ]}
         }
diff --git a/src/tests/p4-fwd-l1/tests/Objects.py b/src/tests/p4-fwd-l1/tests/Objects.py
index ba260e936805e57fb8f07761b1e5fc79cffbaf8f..83d1e23b438693f3dbe6b657d0332a4f0a9d1680 100644
--- a/src/tests/p4-fwd-l1/tests/Objects.py
+++ b/src/tests/p4-fwd-l1/tests/Objects.py
@@ -13,18 +13,12 @@
 # limitations under the License.
 
 import os
-from typing import Dict, List, Tuple
 from common.Constants import DEFAULT_CONTEXT_NAME, DEFAULT_TOPOLOGY_NAME
 from common.tools.object_factory.Context import json_context, json_context_id
 from common.tools.object_factory.Device import (
-    json_device_connect_rules, json_device_emulated_connect_rules, json_device_emulated_packet_router_disabled,
-    json_device_connect_rules, json_device_id, json_device_p4_disabled,
-    json_device_emulated_tapi_disabled, json_device_id, json_device_packetrouter_disabled, json_device_tapi_disabled)
-from common.tools.object_factory.Service import (
-    get_service_uuid, json_service_l3nm_planned,json_service_p4_planned)
-from common.tools.object_factory.ConfigRule import (
-    json_config_rule_set, json_config_rule_delete)
-from common.tools.object_factory.EndPoint import json_endpoint, json_endpoint_ids, json_endpoints, json_endpoint_id
+    json_device_connect_rules, json_device_id, json_device_p4_disabled)
+from common.tools.object_factory.Service import get_service_uuid, json_service_p4_planned
+from common.tools.object_factory.EndPoint import json_endpoint_ids, json_endpoints
 from common.tools.object_factory.EndPoint import json_endpoint_descriptor
 from common.tools.object_factory.Link import get_link_uuid, json_link, json_link_id
 from common.tools.object_factory.Topology import json_topology, json_topology_id
diff --git a/src/tests/p4-fwd-l1/tests/test_functional_bootstrap.py b/src/tests/p4-fwd-l1/tests/test_functional_bootstrap.py
index fe622c908b44ed28a5c91ca8b35b8524511de388..341799c0224794bd32e0a81a02c593bd1173eca1 100644
--- a/src/tests/p4-fwd-l1/tests/test_functional_bootstrap.py
+++ b/src/tests/p4-fwd-l1/tests/test_functional_bootstrap.py
@@ -14,14 +14,9 @@
 
 import copy, logging, pytest
 from common.Settings import get_setting
-from common.tests.EventTools import EVENT_CREATE, EVENT_UPDATE, check_events
 from common.tools.object_factory.Context import json_context_id
-from common.tools.object_factory.Device import json_device_id
-from common.tools.object_factory.Link import json_link_id
-from common.tools.object_factory.Topology import json_topology_id
 from context.client.ContextClient import ContextClient
-from context.client.EventsCollector import EventsCollector
-from common.proto.context_pb2 import ConfigActionEnum, Context, ContextId, Device, Empty, Link, Topology, DeviceOperationalStatusEnum
+from common.proto.context_pb2 import Context, ContextId, Device, Empty, Link, Topology, DeviceOperationalStatusEnum
 from device.client.DeviceClient import DeviceClient
 from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
 
diff --git a/src/tests/p4-fwd-l1/tests/test_functional_cleanup.py b/src/tests/p4-fwd-l1/tests/test_functional_cleanup.py
index 67934ff8a78f79252ef4b6994c3b628a8275c503..0b44f794d7201f49034c536c8988798ac9b44bc7 100644
--- a/src/tests/p4-fwd-l1/tests/test_functional_cleanup.py
+++ b/src/tests/p4-fwd-l1/tests/test_functional_cleanup.py
@@ -12,18 +12,13 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import copy, logging, pytest
+import logging, pytest
 from common.Settings import get_setting
-from common.tests.EventTools import EVENT_REMOVE, check_events
 from common.tools.object_factory.Context import json_context_id
-from common.tools.object_factory.Device import json_device_id
-from common.tools.object_factory.Link import json_link_id
-from common.tools.object_factory.Topology import json_topology_id
 from context.client.ContextClient import ContextClient
-from context.client.EventsCollector import EventsCollector
-from common.proto.context_pb2 import ConfigActionEnum, ContextId, Device, DeviceId, Empty, Link, LinkId, TopologyId, DeviceOperationalStatusEnum
+from common.proto.context_pb2 import ContextId, DeviceId, Empty, LinkId, TopologyId
 from device.client.DeviceClient import DeviceClient
-from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES
+from .Objects import CONTEXTS, DEVICES, LINKS, TOPOLOGIES
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
diff --git a/src/tests/p4-fwd-l1/tests/test_functional_create_service.py b/src/tests/p4-fwd-l1/tests/test_functional_create_service.py
index 9f82da129e159f02d40ee57b890409b0a5685b75..ee714c4774e417a9afb84554d4dc99fe57d96863 100644
--- a/src/tests/p4-fwd-l1/tests/test_functional_create_service.py
+++ b/src/tests/p4-fwd-l1/tests/test_functional_create_service.py
@@ -14,24 +14,16 @@
 
 import copy, logging, pytest
 from common.Settings import get_setting
-from common.tests.EventTools import EVENT_CREATE, EVENT_UPDATE, check_events
-from common.tools.object_factory.Context import json_context_id
-from common.tools.object_factory.Device import json_device_id
-from common.tools.object_factory.Service import json_service_id
-from common.tools.object_factory.Link import json_link_id
-from common.tools.object_factory.Topology import json_topology_id
 from context.client.ContextClient import ContextClient
-from context.client.EventsCollector import EventsCollector
-from common.proto.context_pb2 import Context, ContextId, Device, Empty, Link, Topology, Service, ServiceId
+from common.proto.context_pb2 import Service
 from device.client.DeviceClient import DeviceClient
 from service.client.ServiceClient import ServiceClient
-from tests.p4.tests.Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES, SERVICES
-from common.proto.context_pb2 import ConfigActionEnum, Device, DeviceId,\
-    DeviceOperationalStatusEnum
+from tests.p4.tests.Objects import SERVICES
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
+
 @pytest.fixture(scope='session')
 def context_client():
     _client = ContextClient(get_setting('CONTEXTSERVICE_SERVICE_HOST'), get_setting('CONTEXTSERVICE_SERVICE_PORT_GRPC'))
diff --git a/src/tests/p4-fwd-l1/tests/test_functional_delete_service.py b/src/tests/p4-fwd-l1/tests/test_functional_delete_service.py
index 98b6a01c1be2a00003b3be267839a4513967d4f7..439a88efd3f72dbd1389d9d47494fa891ff2b2d2 100644
--- a/src/tests/p4-fwd-l1/tests/test_functional_delete_service.py
+++ b/src/tests/p4-fwd-l1/tests/test_functional_delete_service.py
@@ -14,18 +14,12 @@
 
 import copy, logging, pytest
 from common.Settings import get_setting
-from common.tests.EventTools import EVENT_REMOVE, check_events
-from common.tools.object_factory.Context import json_context_id
-from common.tools.object_factory.Device import json_device_id
 from common.tools.object_factory.Service import json_service_id
-from common.tools.object_factory.Link import json_link_id
-from common.tools.object_factory.Topology import json_topology_id
 from context.client.ContextClient import ContextClient
-from context.client.EventsCollector import EventsCollector
-from common.proto.context_pb2 import ConfigActionEnum, ContextId, Device, DeviceId, Empty, LinkId, TopologyId, Service, ServiceId, DeviceOperationalStatusEnum
+from common.proto.context_pb2 import ServiceId
 from device.client.DeviceClient import DeviceClient
 from service.client.ServiceClient import ServiceClient
-from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES, SERVICES
+from .Objects import CONTEXT_ID, SERVICES
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
diff --git a/src/tests/p4-int-routing-acl/README.md b/src/tests/p4-int-routing-acl/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..fa935e1b2eae2decb0e852ebd72b752c3d67ca28
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/README.md
@@ -0,0 +1,129 @@
+# Tests for P4 routing, ACL, and In-Band Network Telemetry functions
+
+This directory contains the necessary scripts and configurations to run tests atop a Stratum-based P4 whitebox that performs a set of network functions, including routing, access control list (ACL), and In-Band Network Telemetry (INT).
+
+## Prerequisites
+
+You need Python3, which should already be installed while preparing for a TFS build.
+Additionally, `pytest` is also mandatory as it is used by our tests below.
+Aliasing python with python3 will also help bridging issues between older and newer python versions.
+
+```shell
+alias python='python3'
+pip3 install pytest
+pip3 install grpclib protobuf
+pip3 install grpcio-tools
+```
+
+The versions used for this test are:
+- `protobuf` 3.20.3
+- `grpclib` 0.4.4
+- `grpcio` 1.47.5
+- `grpcio-tools` 1.47.5
+
+After the installation of `grpclib`, protoc-gen-grpclib_python binary is in /home/$USER/.local/bin/
+First we copy it to /usr/local/bin/:
+
+```shell
+  sudo cp /home/$USER/.local/bin/protoc-gen-grpclib_python /usr/local/bin/
+```
+
+Then, we include this path to the PYTHONPATH:
+```shell
+export PYTHONPATH="${PYTHONPATH}:/usr/local/bin/protoc-gen-grpclib_python"
+```
+
+
+You need to build and deploy a software-based Stratum switch, before being able to use TFS to control it.
+To do so, follow the instructions in the `./topology` folder.
+
+## Steps to setup and run a TFS program atop Stratum
+
+To conduct this test, follow the steps below.
+
+### TFS re-deploy
+
+```shell
+cd ~/tfs-ctrl/
+source my_deploy.sh && source tfs_runtime_env_vars.sh
+./deploy/all.sh
+```
+
+### Path setup
+
+Ensure that `PATH` variable contains the parent project directory, e.g., "home/$USER/tfs-ctrl".
+
+Ensure that `PYTHONPATH` variable contains the source code directory of TFS, e.g., "home/$USER/tfs-ctrl/src"
+
+## Topology setup
+
+In the `./topology/` directory there are scripts that allow to build Stratum on a target machine (e.g., a VM) and then deploy a P4 switch atop this machine.
+This test assumes a Stratum P4 switch with 2 network interfaces used as a data plane (routing traffic from one to another) as well as another network interface used to send telemetry information to an external telemetry collector.
+
+## P4 artifacts
+
+In the `./p4src/` directory there are compiled P4 artifacts of the pipeline that will be pushed to the P4 switch, along with the P4-runtime definitions.
+The `./setup.sh` script copies from this directory. If you need to change the P4 program, make sure to put the compiled artifacts there.
+
+## Tests
+
+The following tests are implemented.
+For each of these tests, an auxiliary bash script allows to run it with less typing.
+
+|                 Test                 |              Bash Runner           |                Purpose             |
+| ------------------------------------ | ---------------------------------- | ---------------------------------- |
+| -                                    | setup.sh                           | Copy P4 artifacts into the SBI pod |
+| test_functional_bootstrap.py         | run_test_01_bootstrap.sh           | Connect TFS to the P4 switch       |
+| test_functional_rules_provision.py   | run_test_02_rules_provision.sh     | Install rules on the P4 switch     |
+| test_functional_rules_deprovision.py | run_test_03_rules_deprovision.sh   | Uninstall rules from the P4 switch |
+| test_functional_cleanup.py           | run_test_04_cleanup.sh             | Disconnect TFS from the P4 switch  |
+
+Each of the tests above is described in detail below.
+
+### Step 1: Copy the necessary P4 artifacts into the TFS SBI service pod
+
+The setup script copies the necessary artifacts to the SBI service pod.
+It should be run just once, after a fresh install of TFS.
+If you `deploy/all.sh` again, you need to repeat this step.
+
+```shell
+cd ~/tfs-ctrl/
+source my_deploy.sh && source tfs_runtime_env_vars.sh
+bash src/tests/p4-int-routing-acl/setup.sh
+```
+
+### Step 2: Bootstrap topology
+
+The bootstrap script registers the context, topology, links, and devices to TFS.
+
+```shell
+cd ~/tfs-ctrl/
+bash src/tests/p4-int-routing-acl/run_test_01_bootstrap.sh
+```
+
+### Step 3: Provision rules via the SBI API
+
+Implement routing, ACL, and INT functions by installing P4 rules to the Stratum switch via the TFS SBI API.
+
+```shell
+cd ~/tfs-ctrl/
+bash src/tests/p4-int-routing-acl/run_test_02_rules_provision.sh
+```
+
+### Step 4: Deprovision rules via the SBI API
+
+Deprovision the routing, ACL, and INT network functions by removing the previously installed P4 rules (via the TFS SBI API) from the Stratum switch.
+
+```shell
+cd ~/tfs-ctrl/
+bash src/tests/p4-int-routing-acl/run_test_03_rules_deprovision.sh
+```
+
+### Step 4: Deprovision topology
+
+Delete all the objects (context, topology, links, devices) from TFS:
+
+```shell
+cd ~/tfs-ctrl/
+bash src/tests/p4-int-routing-acl/run_test_04_cleanup.sh
+```
diff --git a/src/tests/p4-int-routing-acl/__init__.py b/src/tests/p4-int-routing-acl/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..023830645e0fcb60e3f8583674a954810af222f2
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/__init__.py
@@ -0,0 +1,13 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
diff --git a/src/tests/p4-int-routing-acl/descriptors/rules-insert-acl.json b/src/tests/p4-int-routing-acl/descriptors/rules-insert-acl.json
new file mode 100644
index 0000000000000000000000000000000000000000..97a548983f29c7af8c1da21fda5ab09b45a940aa
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/descriptors/rules-insert-acl.json
@@ -0,0 +1,39 @@
+{
+	"devices": [
+		{
+			"device_id": {
+				"device_uuid": {
+					"uuid": "p4-sw1"
+				}
+			},
+			"name": "p4-sw1",
+			"device_operational_status": "DEVICEOPERATIONALSTATUS_ENABLED",
+			"device_config": {
+				"config_rules": [
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.acl.acl[1]",
+							"resource_value": {
+								"table-name": "FabricIngress.acl.acl",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "1"
+									},
+									{
+										"match-field": "l4_dport",
+										"match-value": "8080"
+									}
+								],
+								"action-name": "FabricIngress.acl.drop",
+								"action-params": [],
+								"priority": 1
+							}
+						}
+					}
+				]
+			}
+		}
+	]
+}
\ No newline at end of file
diff --git a/src/tests/p4-int-routing-acl/descriptors/rules-insert-int-b1.json b/src/tests/p4-int-routing-acl/descriptors/rules-insert-int-b1.json
new file mode 100644
index 0000000000000000000000000000000000000000..3fc9a71732aef424b85c9b91b255083b3e1badbb
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/descriptors/rules-insert-int-b1.json
@@ -0,0 +1,136 @@
+{
+	"devices": [
+		{
+			"device_id": {
+				"device_uuid": {
+					"uuid": "p4-sw1"
+				}
+			},
+			"name": "p4-sw1",
+			"device_operational_status": "DEVICEOPERATIONALSTATUS_ENABLED",
+			"device_config": {
+				"config_rules": [
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.int_watchlist.watchlist[1]",
+							"resource_value": {
+								"table-name": "FabricIngress.int_watchlist.watchlist",
+								"match-fields": [
+									{
+										"match-field": "ipv4_valid",
+										"match-value": "1"
+									}
+								],
+								"action-name": "FabricIngress.int_watchlist.mark_to_report",
+								"action-params": [],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.ingress_port_vlan[1]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.ingress_port_vlan",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "510"
+									},
+									{
+										"match-field": "vlan_is_valid",
+										"match-value": "0"
+									}
+								],
+								"action-name": "FabricIngress.filtering.permit_with_internal_vlan",
+								"action-params": [
+									{
+										"action-param": "vlan_id",
+										"action-value": "4094"
+									},
+									{
+										"action-param": "port_type",
+										"action-value": "3"
+									}
+								],
+								"priority": 10
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.egress_next.egress_vlan[1]",
+							"resource_value": {
+								"table-name": "FabricEgress.egress_next.egress_vlan",
+								"match-fields": [
+									{
+										"match-field": "vlan_id",
+										"match-value": "4094"
+									},
+									{
+										"match-field": "eg_port",
+										"match-value": "510"
+									}
+								],
+								"action-name": "FabricEgress.egress_next.pop_vlan",
+								"action-params": []
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.fwd_classifier[1]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.fwd_classifier",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "510"
+									},
+									{
+										"match-field": "ip_eth_type",
+										"match-value": "0x0800"
+									}
+								],
+								"action-name": "FabricIngress.filtering.set_forwarding_type",
+								"action-params": [
+									{
+										"action-param": "fwd_type",
+										"action-value": "2"
+									}
+								],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.int_watchlist.watchlist[2]",
+							"resource_value": {
+								"table-name": "FabricIngress.int_watchlist.watchlist",
+								"match-fields": [
+									{
+										"match-field": "ipv4_valid",
+										"match-value": "1"
+									},
+									{
+										"match-field": "ipv4_dst",
+										"match-value": "10.10.10.41&&&0xFFFFFFFF"
+									}
+								],
+								"action-name": "FabricIngress.int_watchlist.no_report_collector",
+								"action-params": [],
+								"priority": 10
+							}
+						}
+					}
+				]
+			}
+		}
+	]
+}
diff --git a/src/tests/p4-int-routing-acl/descriptors/rules-insert-int-b2.json b/src/tests/p4-int-routing-acl/descriptors/rules-insert-int-b2.json
new file mode 100644
index 0000000000000000000000000000000000000000..e6b5a8ea8590586b2aeee46eb9b736b1e27ba35e
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/descriptors/rules-insert-int-b2.json
@@ -0,0 +1,269 @@
+{
+	"devices": [
+		{
+			"device_id": {
+				"device_uuid": {
+					"uuid": "p4-sw1"
+				}
+			},
+			"name": "p4-sw1",
+			"device_operational_status": "DEVICEOPERATIONALSTATUS_ENABLED",
+			"device_config": {
+				"config_rules": [
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.int_egress.report[1]",
+							"resource_value": {
+								"table-name": "FabricEgress.int_egress.report",
+								"match-fields": [
+									{
+										"match-field": "bmd_type",
+										"match-value": "4"
+									},
+									{
+										"match-field": "mirror_type",
+										"match-value": "0"
+									},
+									{
+										"match-field": "int_report_type",
+										"match-value": "4"
+									}
+								],
+								"action-name": "FabricEgress.int_egress.do_drop_report_encap",
+								"action-params": [
+									{
+										"action-param": "src_ip",
+										"action-value": "10.10.10.120"
+									},
+									{
+										"action-param": "mon_ip",
+										"action-value": "10.10.10.41"
+									},
+									{
+										"action-param": "mon_port",
+										"action-value": "32766"
+									},
+									{
+										"action-param": "switch_id",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.int_egress.report[2]",
+							"resource_value": {
+								"table-name": "FabricEgress.int_egress.report",
+								"match-fields": [
+									{
+										"match-field": "bmd_type",
+										"match-value": "2"
+									},
+									{
+										"match-field": "mirror_type",
+										"match-value": "1"
+									},
+									{
+										"match-field": "int_report_type",
+										"match-value": "4"
+									}
+								],
+								"action-name": "FabricEgress.int_egress.do_drop_report_encap",
+								"action-params": [
+									{
+										"action-param": "src_ip",
+										"action-value": "10.10.10.120"
+									},
+									{
+										"action-param": "mon_ip",
+										"action-value": "10.10.10.41"
+									},
+									{
+										"action-param": "mon_port",
+										"action-value": "32766"
+									},
+									{
+										"action-param": "switch_id",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.int_egress.report[3]",
+							"resource_value": {
+								"table-name": "FabricEgress.int_egress.report",
+								"match-fields": [
+									{
+										"match-field": "bmd_type",
+										"match-value": "2"
+									},
+									{
+										"match-field": "mirror_type",
+										"match-value": "1"
+									},
+									{
+										"match-field": "int_report_type",
+										"match-value": "1"
+									}
+								],
+								"action-name": "FabricEgress.int_egress.do_local_report_encap",
+								"action-params": [
+									{
+										"action-param": "src_ip",
+										"action-value": "10.10.10.120"
+									},
+									{
+										"action-param": "mon_ip",
+										"action-value": "10.10.10.41"
+									},
+									{
+										"action-param": "mon_port",
+										"action-value": "32766"
+									},
+									{
+										"action-param": "switch_id",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.int_egress.report[4]",
+							"resource_value": {
+								"table-name": "FabricEgress.int_egress.report",
+								"match-fields": [
+									{
+										"match-field": "bmd_type",
+										"match-value": "5"
+									},
+									{
+										"match-field": "mirror_type",
+										"match-value": "0"
+									},
+									{
+										"match-field": "int_report_type",
+										"match-value": "4"
+									}
+								],
+								"action-name": "FabricEgress.int_egress.do_drop_report_encap",
+								"action-params": [
+									{
+										"action-param": "src_ip",
+										"action-value": "10.10.10.120"
+									},
+									{
+										"action-param": "mon_ip",
+										"action-value": "10.10.10.41"
+									},
+									{
+										"action-param": "mon_port",
+										"action-value": "32766"
+									},
+									{
+										"action-param": "switch_id",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.int_egress.report[5]",
+							"resource_value": {
+								"table-name": "FabricEgress.int_egress.report",
+								"match-fields": [
+									{
+										"match-field": "bmd_type",
+										"match-value": "2"
+									},
+									{
+										"match-field": "mirror_type",
+										"match-value": "1"
+									},
+									{
+										"match-field": "int_report_type",
+										"match-value": "2"
+									}
+								],
+								"action-name": "FabricEgress.int_egress.do_local_report_encap",
+								"action-params": [
+									{
+										"action-param": "src_ip",
+										"action-value": "10.10.10.120"
+									},
+									{
+										"action-param": "mon_ip",
+										"action-value": "10.10.10.41"
+									},
+									{
+										"action-param": "mon_port",
+										"action-value": "32766"
+									},
+									{
+										"action-param": "switch_id",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.int_egress.report[6]",
+							"resource_value": {
+								"table-name": "FabricEgress.int_egress.report",
+								"match-fields": [
+									{
+										"match-field": "bmd_type",
+										"match-value": "2"
+									},
+									{
+										"match-field": "mirror_type",
+										"match-value": "1"
+									},
+									{
+										"match-field": "int_report_type",
+										"match-value": "3"
+									}
+								],
+								"action-name": "FabricEgress.int_egress.do_local_report_encap",
+								"action-params": [
+									{
+										"action-param": "src_ip",
+										"action-value": "10.10.10.120"
+									},
+									{
+										"action-param": "mon_ip",
+										"action-value": "10.10.10.41"
+									},
+									{
+										"action-param": "mon_port",
+										"action-value": "32766"
+									},
+									{
+										"action-param": "switch_id",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					}
+				]
+			}
+		}
+	]
+}
diff --git a/src/tests/p4-int-routing-acl/descriptors/rules-insert-int-b3.json b/src/tests/p4-int-routing-acl/descriptors/rules-insert-int-b3.json
new file mode 100644
index 0000000000000000000000000000000000000000..f8d2c71830d3ef55ea8ffd97e3557fc9d8cc6315
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/descriptors/rules-insert-int-b3.json
@@ -0,0 +1,212 @@
+{
+	"devices": [
+		{
+			"device_id": {
+				"device_uuid": {
+					"uuid": "p4-sw1"
+				}
+			},
+			"name": "p4-sw1",
+			"device_operational_status": "DEVICEOPERATIONALSTATUS_ENABLED",
+			"device_config": {
+				"config_rules": [
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.ingress_port_vlan[2]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.ingress_port_vlan",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "3"
+									},
+									{
+										"match-field": "vlan_is_valid",
+										"match-value": "0"
+									}
+								],
+								"action-name": "FabricIngress.filtering.permit_with_internal_vlan",
+								"action-params": [
+									{
+										"action-param": "vlan_id",
+										"action-value": "4094"
+									},
+									{
+										"action-param": "port_type",
+										"action-value": "1"
+									}
+								],
+								"priority": 10
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.fwd_classifier[2]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.fwd_classifier",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "3"
+									},
+									{
+										"match-field": "ip_eth_type",
+										"match-value": "0x0800"
+									}
+								],
+								"action-name": "FabricIngress.filtering.set_forwarding_type",
+								"action-params": [
+									{
+										"action-param": "fwd_type",
+										"action-value": "0"
+									}
+								],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.egress_next.egress_vlan[2]",
+							"resource_value": {
+								"table-name": "FabricEgress.egress_next.egress_vlan",
+								"match-fields": [
+									{
+										"match-field": "vlan_id",
+										"match-value": "4094"
+									},
+									{
+										"match-field": "eg_port",
+										"match-value": "3"
+									}
+								],
+								"action-name": "FabricEgress.egress_next.pop_vlan",
+								"action-params": []
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.forwarding.bridging[1]",
+							"resource_value": {
+								"table-name": "FabricIngress.forwarding.bridging",
+								"match-fields": [
+									{
+										"match-field": "vlan_id",
+										"match-value": "4094"
+									},
+									{
+										"match-field": "eth_dst",
+										"match-value": "fa:16:3e:fb:cf:96"
+									}
+								],
+								"action-name": "FabricIngress.forwarding.set_next_id_bridging",
+								"action-params": [
+									{
+										"action-param": "next_id",
+										"action-value": "3"
+									}
+								],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.next.simple[1]",
+							"resource_value": {
+								"table-name": "FabricIngress.next.simple",
+								"match-fields": [
+									{
+										"match-field": "next_id",
+										"match-value": "3"
+									}
+								],
+								"action-name": "FabricIngress.next.output_simple",
+								"action-params": [
+									{
+										"action-param": "port_num",
+										"action-value": "3"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.forwarding.routing_v4[1]",
+							"resource_value": {
+								"table-name": "FabricIngress.forwarding.routing_v4",
+								"match-fields": [
+									{
+										"match-field": "ipv4_dst",
+										"match-value": "10.10.10.41/32"
+									}
+								],
+								"action-name": "FabricIngress.forwarding.set_next_id_routing_v4",
+								"action-params": [
+									{
+										"action-param": "next_id",
+										"action-value": "3"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.next.simple[2]",
+							"resource_value": {
+								"table-name": "FabricIngress.next.simple",
+								"match-fields": [
+									{
+										"match-field": "next_id",
+										"match-value": "3"
+									}
+								],
+								"action-name": "FabricIngress.next.routing_simple",
+								"action-params": [
+									{
+										"action-param": "port_num",
+										"action-value": "3"
+									},
+									{
+										"action-param": "smac",
+										"action-value": "fa:16:3e:93:8c:c0"
+									},
+									{
+										"action-param": "dmac",
+										"action-value": "fa:16:3e:fb:cf:96"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/clone_sessions/clone_session[1]",
+							"resource_value": {
+								"session-id": 506,
+								"replicas": [
+									{
+										"egress-port": 510,
+										"instance": 0
+									}
+								]
+							}
+						}
+					}
+				]
+			}
+		}
+	]
+}
diff --git a/src/tests/p4-int-routing-acl/descriptors/rules-insert-routing-corp.json b/src/tests/p4-int-routing-acl/descriptors/rules-insert-routing-corp.json
new file mode 100644
index 0000000000000000000000000000000000000000..0fe8b5036f8446f65e8fca85ddeea97cd6ed8cd0
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/descriptors/rules-insert-routing-corp.json
@@ -0,0 +1,197 @@
+{
+	"devices": [
+		{
+			"device_id": {
+				"device_uuid": {
+					"uuid": "p4-sw1"
+				}
+			},
+			"name": "p4-sw1",
+			"device_operational_status": "DEVICEOPERATIONALSTATUS_ENABLED",
+			"device_config": {
+				"config_rules": [
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.ingress_port_vlan[4]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.ingress_port_vlan",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "2"
+									},
+									{
+										"match-field": "vlan_is_valid",
+										"match-value": "0"
+									}
+								],
+								"action-name": "FabricIngress.filtering.permit_with_internal_vlan",
+								"action-params": [
+									{
+										"action-param": "vlan_id",
+										"action-value": "4094"
+									},
+									{
+										"action-param": "port_type",
+										"action-value": "1"
+									}
+								],
+								"priority": 10
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.fwd_classifier[4]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.fwd_classifier",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "2"
+									},
+									{
+										"match-field": "ip_eth_type",
+										"match-value": "0x0800"
+									}
+								],
+								"action-name": "FabricIngress.filtering.set_forwarding_type",
+								"action-params": [
+									{
+										"action-param": "fwd_type",
+										"action-value": "0"
+									}
+								],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.egress_next.egress_vlan[4]",
+							"resource_value": {
+								"table-name": "FabricEgress.egress_next.egress_vlan",
+								"match-fields": [
+									{
+										"match-field": "vlan_id",
+										"match-value": "4094"
+									},
+									{
+										"match-field": "eg_port",
+										"match-value": "2"
+									}
+								],
+								"action-name": "FabricEgress.egress_next.pop_vlan",
+								"action-params": []
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.forwarding.bridging[3]",
+							"resource_value": {
+								"table-name": "FabricIngress.forwarding.bridging",
+								"match-fields": [
+									{
+										"match-field": "vlan_id",
+										"match-value": "4094"
+									},
+									{
+										"match-field": "eth_dst",
+										"match-value": "fa:16:3e:e2:af:28"
+									}
+								],
+								"action-name": "FabricIngress.forwarding.set_next_id_bridging",
+								"action-params": [
+									{
+										"action-param": "next_id",
+										"action-value": "2"
+									}
+								],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.next.simple[5]",
+							"resource_value": {
+								"table-name": "FabricIngress.next.simple",
+								"match-fields": [
+									{
+										"match-field": "next_id",
+										"match-value": "2"
+									}
+								],
+								"action-name": "FabricIngress.next.output_simple",
+								"action-params": [
+									{
+										"action-param": "port_num",
+										"action-value": "2"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.forwarding.routing_v4[3]",
+							"resource_value": {
+								"table-name": "FabricIngress.forwarding.routing_v4",
+								"match-fields": [
+									{
+										"match-field": "ipv4_dst",
+										"match-value": "172.16.10.9/32"
+									}
+								],
+								"action-name": "FabricIngress.forwarding.set_next_id_routing_v4",
+								"action-params": [
+									{
+										"action-param": "next_id",
+										"action-value": "2"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.next.simple[6]",
+							"resource_value": {
+								"table-name": "FabricIngress.next.simple",
+								"match-fields": [
+									{
+										"match-field": "next_id",
+										"match-value": "2"
+									}
+								],
+								"action-name": "FabricIngress.next.routing_simple",
+								"action-params": [
+									{
+										"action-param": "port_num",
+										"action-value": "2"
+									},
+									{
+										"action-param": "smac",
+										"action-value": "fa:16:3e:9b:cb:a1"
+									},
+									{
+										"action-param": "dmac",
+										"action-value": "fa:16:3e:e2:af:28"
+									}
+								]
+							}
+						}
+					}
+				]
+			}
+		}
+	]
+}
diff --git a/src/tests/p4-int-routing-acl/descriptors/rules-insert-routing-edge.json b/src/tests/p4-int-routing-acl/descriptors/rules-insert-routing-edge.json
new file mode 100644
index 0000000000000000000000000000000000000000..c48d9d31e2b36dd1710ab53d51280759e82cca1c
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/descriptors/rules-insert-routing-edge.json
@@ -0,0 +1,197 @@
+{
+	"devices": [
+		{
+			"device_id": {
+				"device_uuid": {
+					"uuid": "p4-sw1"
+				}
+			},
+			"name": "p4-sw1",
+			"device_operational_status": "DEVICEOPERATIONALSTATUS_ENABLED",
+			"device_config": {
+				"config_rules": [
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.ingress_port_vlan[3]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.ingress_port_vlan",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "1"
+									},
+									{
+										"match-field": "vlan_is_valid",
+										"match-value": "0"
+									}
+								],
+								"action-name": "FabricIngress.filtering.permit_with_internal_vlan",
+								"action-params": [
+									{
+										"action-param": "vlan_id",
+										"action-value": "4094"
+									},
+									{
+										"action-param": "port_type",
+										"action-value": "1"
+									}
+								],
+								"priority": 10
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.fwd_classifier[3]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.fwd_classifier",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "1"
+									},
+									{
+										"match-field": "ip_eth_type",
+										"match-value": "0x0800"
+									}
+								],
+								"action-name": "FabricIngress.filtering.set_forwarding_type",
+								"action-params": [
+									{
+										"action-param": "fwd_type",
+										"action-value": "0"
+									}
+								],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.egress_next.egress_vlan[3]",
+							"resource_value": {
+								"table-name": "FabricEgress.egress_next.egress_vlan",
+								"match-fields": [
+									{
+										"match-field": "vlan_id",
+										"match-value": "4094"
+									},
+									{
+										"match-field": "eg_port",
+										"match-value": "1"
+									}
+								],
+								"action-name": "FabricEgress.egress_next.pop_vlan",
+								"action-params": []
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.forwarding.bridging[2]",
+							"resource_value": {
+								"table-name": "FabricIngress.forwarding.bridging",
+								"match-fields": [
+									{
+										"match-field": "vlan_id",
+										"match-value": "4094"
+									},
+									{
+										"match-field": "eth_dst",
+										"match-value": "fa:16:3e:58:92:ba"
+									}
+								],
+								"action-name": "FabricIngress.forwarding.set_next_id_bridging",
+								"action-params": [
+									{
+										"action-param": "next_id",
+										"action-value": "1"
+									}
+								],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.next.simple[3]",
+							"resource_value": {
+								"table-name": "FabricIngress.next.simple",
+								"match-fields": [
+									{
+										"match-field": "next_id",
+										"match-value": "1"
+									}
+								],
+								"action-name": "FabricIngress.next.output_simple",
+								"action-params": [
+									{
+										"action-param": "port_num",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.forwarding.routing_v4[2]",
+							"resource_value": {
+								"table-name": "FabricIngress.forwarding.routing_v4",
+								"match-fields": [
+									{
+										"match-field": "ipv4_dst",
+										"match-value": "10.158.72.25/32"
+									}
+								],
+								"action-name": "FabricIngress.forwarding.set_next_id_routing_v4",
+								"action-params": [
+									{
+										"action-param": "next_id",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_SET",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.next.simple[4]",
+							"resource_value": {
+								"table-name": "FabricIngress.next.simple",
+								"match-fields": [
+									{
+										"match-field": "next_id",
+										"match-value": "1"
+									}
+								],
+								"action-name": "FabricIngress.next.routing_simple",
+								"action-params": [
+									{
+										"action-param": "port_num",
+										"action-value": "1"
+									},
+									{
+										"action-param": "smac",
+										"action-value": "fa:16:3e:e2:af:28"
+									},
+									{
+										"action-param": "dmac",
+										"action-value": "fa:16:3e:58:92:ba"
+									}
+								]
+							}
+						}
+					}
+				]
+			}
+		}
+	]
+}
diff --git a/src/tests/p4-int-routing-acl/descriptors/rules-remove.json b/src/tests/p4-int-routing-acl/descriptors/rules-remove.json
new file mode 100644
index 0000000000000000000000000000000000000000..68132e9e6ec09435cfcbaae16a9c2287e9c649b5
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/descriptors/rules-remove.json
@@ -0,0 +1,965 @@
+{
+	"devices": [
+		{
+			"device_id": {
+				"device_uuid": {
+					"uuid": "p4-sw1"
+				}
+			},
+			"name": "p4-sw1",
+			"device_operational_status": "DEVICEOPERATIONALSTATUS_ENABLED",
+			"device_config": {
+				"config_rules": [
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.int_watchlist.watchlist[1]",
+							"resource_value": {
+								"table-name": "FabricIngress.int_watchlist.watchlist",
+								"match-fields": [
+									{
+										"match-field": "ipv4_valid",
+										"match-value": "1"
+									}
+								],
+								"action-name": "FabricIngress.int_watchlist.mark_to_report",
+								"action-params": [],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.ingress_port_vlan[1]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.ingress_port_vlan",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "510"
+									},
+									{
+										"match-field": "vlan_is_valid",
+										"match-value": "0"
+									}
+								],
+								"action-name": "FabricIngress.filtering.permit_with_internal_vlan",
+								"action-params": [
+									{
+										"action-param": "vlan_id",
+										"action-value": "4094"
+									},
+									{
+										"action-param": "port_type",
+										"action-value": "3"
+									}
+								],
+								"priority": 10
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.egress_next.egress_vlan[1]",
+							"resource_value": {
+								"table-name": "FabricEgress.egress_next.egress_vlan",
+								"match-fields": [
+									{
+										"match-field": "vlan_id",
+										"match-value": "4094"
+									},
+									{
+										"match-field": "eg_port",
+										"match-value": "510"
+									}
+								],
+								"action-name": "FabricEgress.egress_next.pop_vlan",
+								"action-params": []
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.fwd_classifier[1]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.fwd_classifier",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "510"
+									},
+									{
+										"match-field": "ip_eth_type",
+										"match-value": "0x0800"
+									}
+								],
+								"action-name": "FabricIngress.filtering.set_forwarding_type",
+								"action-params": [
+									{
+										"action-param": "fwd_type",
+										"action-value": "2"
+									}
+								],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.int_egress.report[1]",
+							"resource_value": {
+								"table-name": "FabricEgress.int_egress.report",
+								"match-fields": [
+									{
+										"match-field": "bmd_type",
+										"match-value": "4"
+									},
+									{
+										"match-field": "mirror_type",
+										"match-value": "0"
+									},
+									{
+										"match-field": "int_report_type",
+										"match-value": "4"
+									}
+								],
+								"action-name": "FabricEgress.int_egress.do_drop_report_encap",
+								"action-params": [
+									{
+										"action-param": "src_ip",
+										"action-value": "10.10.10.120"
+									},
+									{
+										"action-param": "mon_ip",
+										"action-value": "10.10.10.41"
+									},
+									{
+										"action-param": "mon_port",
+										"action-value": "32766"
+									},
+									{
+										"action-param": "switch_id",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.int_egress.report[2]",
+							"resource_value": {
+								"table-name": "FabricEgress.int_egress.report",
+								"match-fields": [
+									{
+										"match-field": "bmd_type",
+										"match-value": "2"
+									},
+									{
+										"match-field": "mirror_type",
+										"match-value": "1"
+									},
+									{
+										"match-field": "int_report_type",
+										"match-value": "4"
+									}
+								],
+								"action-name": "FabricEgress.int_egress.do_drop_report_encap",
+								"action-params": [
+									{
+										"action-param": "src_ip",
+										"action-value": "10.10.10.120"
+									},
+									{
+										"action-param": "mon_ip",
+										"action-value": "10.10.10.41"
+									},
+									{
+										"action-param": "mon_port",
+										"action-value": "32766"
+									},
+									{
+										"action-param": "switch_id",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.int_egress.report[3]",
+							"resource_value": {
+								"table-name": "FabricEgress.int_egress.report",
+								"match-fields": [
+									{
+										"match-field": "bmd_type",
+										"match-value": "2"
+									},
+									{
+										"match-field": "mirror_type",
+										"match-value": "1"
+									},
+									{
+										"match-field": "int_report_type",
+										"match-value": "1"
+									}
+								],
+								"action-name": "FabricEgress.int_egress.do_local_report_encap",
+								"action-params": [
+									{
+										"action-param": "src_ip",
+										"action-value": "10.10.10.120"
+									},
+									{
+										"action-param": "mon_ip",
+										"action-value": "10.10.10.41"
+									},
+									{
+										"action-param": "mon_port",
+										"action-value": "32766"
+									},
+									{
+										"action-param": "switch_id",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.int_egress.report[4]",
+							"resource_value": {
+								"table-name": "FabricEgress.int_egress.report",
+								"match-fields": [
+									{
+										"match-field": "bmd_type",
+										"match-value": "5"
+									},
+									{
+										"match-field": "mirror_type",
+										"match-value": "0"
+									},
+									{
+										"match-field": "int_report_type",
+										"match-value": "4"
+									}
+								],
+								"action-name": "FabricEgress.int_egress.do_drop_report_encap",
+								"action-params": [
+									{
+										"action-param": "src_ip",
+										"action-value": "10.10.10.120"
+									},
+									{
+										"action-param": "mon_ip",
+										"action-value": "10.10.10.41"
+									},
+									{
+										"action-param": "mon_port",
+										"action-value": "32766"
+									},
+									{
+										"action-param": "switch_id",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.int_egress.report[5]",
+							"resource_value": {
+								"table-name": "FabricEgress.int_egress.report",
+								"match-fields": [
+									{
+										"match-field": "bmd_type",
+										"match-value": "2"
+									},
+									{
+										"match-field": "mirror_type",
+										"match-value": "1"
+									},
+									{
+										"match-field": "int_report_type",
+										"match-value": "2"
+									}
+								],
+								"action-name": "FabricEgress.int_egress.do_local_report_encap",
+								"action-params": [
+									{
+										"action-param": "src_ip",
+										"action-value": "10.10.10.120"
+									},
+									{
+										"action-param": "mon_ip",
+										"action-value": "10.10.10.41"
+									},
+									{
+										"action-param": "mon_port",
+										"action-value": "32766"
+									},
+									{
+										"action-param": "switch_id",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.int_egress.report[6]",
+							"resource_value": {
+								"table-name": "FabricEgress.int_egress.report",
+								"match-fields": [
+									{
+										"match-field": "bmd_type",
+										"match-value": "2"
+									},
+									{
+										"match-field": "mirror_type",
+										"match-value": "1"
+									},
+									{
+										"match-field": "int_report_type",
+										"match-value": "3"
+									}
+								],
+								"action-name": "FabricEgress.int_egress.do_local_report_encap",
+								"action-params": [
+									{
+										"action-param": "src_ip",
+										"action-value": "10.10.10.120"
+									},
+									{
+										"action-param": "mon_ip",
+										"action-value": "10.10.10.41"
+									},
+									{
+										"action-param": "mon_port",
+										"action-value": "32766"
+									},
+									{
+										"action-param": "switch_id",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.int_watchlist.watchlist[2]",
+							"resource_value": {
+								"table-name": "FabricIngress.int_watchlist.watchlist",
+								"match-fields": [
+									{
+										"match-field": "ipv4_valid",
+										"match-value": "1"
+									},
+									{
+										"match-field": "ipv4_dst",
+										"match-value": "10.10.10.41&&&0xFFFFFFFF"
+									}
+								],
+								"action-name": "FabricIngress.int_watchlist.no_report_collector",
+								"action-params": [],
+								"priority": 10
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.ingress_port_vlan[2]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.ingress_port_vlan",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "3"
+									},
+									{
+										"match-field": "vlan_is_valid",
+										"match-value": "0"
+									}
+								],
+								"action-name": "FabricIngress.filtering.permit_with_internal_vlan",
+								"action-params": [
+									{
+										"action-param": "vlan_id",
+										"action-value": "4094"
+									},
+									{
+										"action-param": "port_type",
+										"action-value": "1"
+									}
+								],
+								"priority": 10
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.fwd_classifier[2]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.fwd_classifier",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "3"
+									},
+									{
+										"match-field": "ip_eth_type",
+										"match-value": "0x0800"
+									}
+								],
+								"action-name": "FabricIngress.filtering.set_forwarding_type",
+								"action-params": [
+									{
+										"action-param": "fwd_type",
+										"action-value": "0"
+									}
+								],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.egress_next.egress_vlan[2]",
+							"resource_value": {
+								"table-name": "FabricEgress.egress_next.egress_vlan",
+								"match-fields": [
+									{
+										"match-field": "vlan_id",
+										"match-value": "4094"
+									},
+									{
+										"match-field": "eg_port",
+										"match-value": "3"
+									}
+								],
+								"action-name": "FabricEgress.egress_next.pop_vlan",
+								"action-params": []
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.forwarding.bridging[1]",
+							"resource_value": {
+								"table-name": "FabricIngress.forwarding.bridging",
+								"match-fields": [
+									{
+										"match-field": "vlan_id",
+										"match-value": "4094"
+									},
+									{
+										"match-field": "eth_dst",
+										"match-value": "fa:16:3e:fb:cf:96"
+									}
+								],
+								"action-name": "FabricIngress.forwarding.set_next_id_bridging",
+								"action-params": [
+									{
+										"action-param": "next_id",
+										"action-value": "3"
+									}
+								],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.next.simple[1]",
+							"resource_value": {
+								"table-name": "FabricIngress.next.simple",
+								"match-fields": [
+									{
+										"match-field": "next_id",
+										"match-value": "3"
+									}
+								],
+								"action-name": "FabricIngress.next.output_simple",
+								"action-params": [
+									{
+										"action-param": "port_num",
+										"action-value": "3"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.forwarding.routing_v4[1]",
+							"resource_value": {
+								"table-name": "FabricIngress.forwarding.routing_v4",
+								"match-fields": [
+									{
+										"match-field": "ipv4_dst",
+										"match-value": "10.10.10.41/32"
+									}
+								],
+								"action-name": "FabricIngress.forwarding.set_next_id_routing_v4",
+								"action-params": [
+									{
+										"action-param": "next_id",
+										"action-value": "3"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.next.simple[2]",
+							"resource_value": {
+								"table-name": "FabricIngress.next.simple",
+								"match-fields": [
+									{
+										"match-field": "next_id",
+										"match-value": "3"
+									}
+								],
+								"action-name": "FabricIngress.next.routing_simple",
+								"action-params": [
+									{
+										"action-param": "port_num",
+										"action-value": "3"
+									},
+									{
+										"action-param": "smac",
+										"action-value": "fa:16:3e:93:8c:c0"
+									},
+									{
+										"action-param": "dmac",
+										"action-value": "fa:16:3e:fb:cf:96"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/clone_sessions/clone_session[1]",
+							"resource_value": {
+								"session-id": 506,
+								"replicas": [
+									{
+										"egress-port": 510,
+										"instance": 0
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.ingress_port_vlan[3]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.ingress_port_vlan",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "1"
+									},
+									{
+										"match-field": "vlan_is_valid",
+										"match-value": "0"
+									}
+								],
+								"action-name": "FabricIngress.filtering.permit_with_internal_vlan",
+								"action-params": [
+									{
+										"action-param": "vlan_id",
+										"action-value": "4094"
+									},
+									{
+										"action-param": "port_type",
+										"action-value": "1"
+									}
+								],
+								"priority": 10
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.fwd_classifier[3]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.fwd_classifier",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "1"
+									},
+									{
+										"match-field": "ip_eth_type",
+										"match-value": "0x0800"
+									}
+								],
+								"action-name": "FabricIngress.filtering.set_forwarding_type",
+								"action-params": [
+									{
+										"action-param": "fwd_type",
+										"action-value": "0"
+									}
+								],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.egress_next.egress_vlan[3]",
+							"resource_value": {
+								"table-name": "FabricEgress.egress_next.egress_vlan",
+								"match-fields": [
+									{
+										"match-field": "vlan_id",
+										"match-value": "4094"
+									},
+									{
+										"match-field": "eg_port",
+										"match-value": "1"
+									}
+								],
+								"action-name": "FabricEgress.egress_next.pop_vlan",
+								"action-params": []
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.forwarding.bridging[2]",
+							"resource_value": {
+								"table-name": "FabricIngress.forwarding.bridging",
+								"match-fields": [
+									{
+										"match-field": "vlan_id",
+										"match-value": "4094"
+									},
+									{
+										"match-field": "eth_dst",
+										"match-value": "fa:16:3e:58:92:ba"
+									}
+								],
+								"action-name": "FabricIngress.forwarding.set_next_id_bridging",
+								"action-params": [
+									{
+										"action-param": "next_id",
+										"action-value": "1"
+									}
+								],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.next.simple[3]",
+							"resource_value": {
+								"table-name": "FabricIngress.next.simple",
+								"match-fields": [
+									{
+										"match-field": "next_id",
+										"match-value": "1"
+									}
+								],
+								"action-name": "FabricIngress.next.output_simple",
+								"action-params": [
+									{
+										"action-param": "port_num",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.forwarding.routing_v4[2]",
+							"resource_value": {
+								"table-name": "FabricIngress.forwarding.routing_v4",
+								"match-fields": [
+									{
+										"match-field": "ipv4_dst",
+										"match-value": "10.158.72.25/32"
+									}
+								],
+								"action-name": "FabricIngress.forwarding.set_next_id_routing_v4",
+								"action-params": [
+									{
+										"action-param": "next_id",
+										"action-value": "1"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.next.simple[4]",
+							"resource_value": {
+								"table-name": "FabricIngress.next.simple",
+								"match-fields": [
+									{
+										"match-field": "next_id",
+										"match-value": "1"
+									}
+								],
+								"action-name": "FabricIngress.next.routing_simple",
+								"action-params": [
+									{
+										"action-param": "port_num",
+										"action-value": "1"
+									},
+									{
+										"action-param": "smac",
+										"action-value": "fa:16:3e:e2:af:28"
+									},
+									{
+										"action-param": "dmac",
+										"action-value": "fa:16:3e:58:92:ba"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.ingress_port_vlan[4]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.ingress_port_vlan",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "2"
+									},
+									{
+										"match-field": "vlan_is_valid",
+										"match-value": "0"
+									}
+								],
+								"action-name": "FabricIngress.filtering.permit_with_internal_vlan",
+								"action-params": [
+									{
+										"action-param": "vlan_id",
+										"action-value": "4094"
+									},
+									{
+										"action-param": "port_type",
+										"action-value": "1"
+									}
+								],
+								"priority": 10
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.filtering.fwd_classifier[4]",
+							"resource_value": {
+								"table-name": "FabricIngress.filtering.fwd_classifier",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "2"
+									},
+									{
+										"match-field": "ip_eth_type",
+										"match-value": "0x0800"
+									}
+								],
+								"action-name": "FabricIngress.filtering.set_forwarding_type",
+								"action-params": [
+									{
+										"action-param": "fwd_type",
+										"action-value": "0"
+									}
+								],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricEgress.egress_next.egress_vlan[4]",
+							"resource_value": {
+								"table-name": "FabricEgress.egress_next.egress_vlan",
+								"match-fields": [
+									{
+										"match-field": "vlan_id",
+										"match-value": "4094"
+									},
+									{
+										"match-field": "eg_port",
+										"match-value": "2"
+									}
+								],
+								"action-name": "FabricEgress.egress_next.pop_vlan",
+								"action-params": []
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.forwarding.bridging[3]",
+							"resource_value": {
+								"table-name": "FabricIngress.forwarding.bridging",
+								"match-fields": [
+									{
+										"match-field": "vlan_id",
+										"match-value": "4094"
+									},
+									{
+										"match-field": "eth_dst",
+										"match-value": "fa:16:3e:e2:af:28"
+									}
+								],
+								"action-name": "FabricIngress.forwarding.set_next_id_bridging",
+								"action-params": [
+									{
+										"action-param": "next_id",
+										"action-value": "2"
+									}
+								],
+								"priority": 1
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.next.simple[5]",
+							"resource_value": {
+								"table-name": "FabricIngress.next.simple",
+								"match-fields": [
+									{
+										"match-field": "next_id",
+										"match-value": "2"
+									}
+								],
+								"action-name": "FabricIngress.next.output_simple",
+								"action-params": [
+									{
+										"action-param": "port_num",
+										"action-value": "2"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.forwarding.routing_v4[3]",
+							"resource_value": {
+								"table-name": "FabricIngress.forwarding.routing_v4",
+								"match-fields": [
+									{
+										"match-field": "ipv4_dst",
+										"match-value": "172.16.10.9/32"
+									}
+								],
+								"action-name": "FabricIngress.forwarding.set_next_id_routing_v4",
+								"action-params": [
+									{
+										"action-param": "next_id",
+										"action-value": "2"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.next.simple[6]",
+							"resource_value": {
+								"table-name": "FabricIngress.next.simple",
+								"match-fields": [
+									{
+										"match-field": "next_id",
+										"match-value": "2"
+									}
+								],
+								"action-name": "FabricIngress.next.routing_simple",
+								"action-params": [
+									{
+										"action-param": "port_num",
+										"action-value": "2"
+									},
+									{
+										"action-param": "smac",
+										"action-value": "fa:16:3e:9b:cb:a1"
+									},
+									{
+										"action-param": "dmac",
+										"action-value": "fa:16:3e:e2:af:28"
+									}
+								]
+							}
+						}
+					},
+					{
+						"action": "CONFIGACTION_DELETE",
+						"custom": {
+							"resource_key": "/tables/table/FabricIngress.acl.acl[1]",
+							"resource_value": {
+								"table-name": "FabricIngress.acl.acl",
+								"match-fields": [
+									{
+										"match-field": "ig_port",
+										"match-value": "1"
+									},
+									{
+										"match-field": "l4_dport",
+										"match-value": "8080"
+									}
+								],
+								"action-name": "FabricIngress.acl.drop",
+								"action-params": [],
+								"priority": 1
+							}
+						}
+					}
+				]
+			}
+		}
+	]
+}
\ No newline at end of file
diff --git a/src/tests/p4-int-routing-acl/descriptors/topology.json b/src/tests/p4-int-routing-acl/descriptors/topology.json
new file mode 100644
index 0000000000000000000000000000000000000000..3b1f6e410cc5a2adc1c99b6208523fd9a9971fe7
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/descriptors/topology.json
@@ -0,0 +1,288 @@
+{
+    "contexts": [
+        {
+            "context_id": {
+                "context_uuid": {
+                    "uuid": "admin"
+                }
+            }
+        }
+    ],
+    "topologies": [
+        {
+            "topology_id": {
+                "context_id": {
+                    "context_uuid": {
+                        "uuid": "admin"
+                    }
+                },
+                "topology_uuid": {
+                    "uuid": "admin"
+                }
+            }
+        }
+    ],
+    "devices": [
+        {
+            "device_id": {
+                "device_uuid": {
+                    "uuid": "edge-net"
+                }
+            },
+            "device_type": "network",
+            "device_drivers": [
+                "DEVICEDRIVER_UNDEFINED"
+            ],
+            "device_config": {
+                "config_rules": [
+                    {
+                        "action": "CONFIGACTION_SET",
+                        "custom": {
+                            "resource_key": "_connect/address",
+                            "resource_value": "127.0.0.1"
+                        }
+                    },
+                    {
+                        "action": "CONFIGACTION_SET",
+                        "custom": {
+                            "resource_key": "_connect/port",
+                            "resource_value": "0"
+                        }
+                    },
+                    {
+                        "action": "CONFIGACTION_SET",
+                        "custom": {
+                            "resource_key": "_connect/settings",
+                            "resource_value": {
+                                "endpoints": [
+                                    {
+                                        "uuid": "eth1",
+                                        "type": "copper"
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "device_id": {
+                "device_uuid": {
+                    "uuid": "corporate-net"
+                }
+            },
+            "device_type": "network",
+            "device_drivers": [
+                "DEVICEDRIVER_UNDEFINED"
+            ],
+            "device_config": {
+                "config_rules": [
+                    {
+                        "action": "CONFIGACTION_SET",
+                        "custom": {
+                            "resource_key": "_connect/address",
+                            "resource_value": "127.0.0.1"
+                        }
+                    },
+                    {
+                        "action": "CONFIGACTION_SET",
+                        "custom": {
+                            "resource_key": "_connect/port",
+                            "resource_value": "0"
+                        }
+                    },
+                    {
+                        "action": "CONFIGACTION_SET",
+                        "custom": {
+                            "resource_key": "_connect/settings",
+                            "resource_value": {
+                                "endpoints": [
+                                    {
+                                        "uuid": "eth1",
+                                        "type": "copper"
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                ]
+            }
+        },
+        {
+            "device_id": {
+                "device_uuid": {
+                    "uuid": "p4-sw1"
+                }
+            },
+            "device_type": "p4-switch",
+            "device_drivers": [
+                "DEVICEDRIVER_P4"
+            ],
+            "device_operational_status": "DEVICEOPERATIONALSTATUS_DISABLED",
+            "name": "p4-sw1",
+            "device_config": {
+                "config_rules": [
+                    {
+                        "action": "CONFIGACTION_SET",
+                        "custom": {
+                            "resource_key": "_connect/address",
+                            "resource_value": "10.10.10.120"
+                        }
+                    },
+                    {
+                        "action": "CONFIGACTION_SET",
+                        "custom": {
+                            "resource_key": "_connect/port",
+                            "resource_value": "50001"
+                        }
+                    },
+                    {
+                        "action": "CONFIGACTION_SET",
+                        "custom": {
+                            "resource_key": "_connect/settings",
+                            "resource_value": {
+                                "id": 1,
+                                "name": "p4-sw1",
+                                "vendor": "Open Networking Foundation",
+                                "hw_ver": "BMv2 simple_switch",
+                                "sw_ver": "Stratum",
+                                "p4bin": "/root/p4/bmv2.json",
+                                "p4info": "/root/p4/p4info.txt",
+                                "timeout": 60,
+                                "endpoints": [
+                                    {
+                                        "uuid": "1",
+                                        "type": "port"
+                                    },
+                                    {
+                                        "uuid": "2",
+                                        "type": "port"
+                                    }
+                                ]
+                            }
+                        }
+                    }
+                ]
+            }
+        }
+    ],
+    "links": [
+        {
+            "link_id": {
+                "link_uuid": {
+                    "uuid": "p4-sw1/1==edge-net/eth1"
+                }
+            },
+            "link_endpoint_ids": [
+                {
+                    "device_id": {
+                        "device_uuid": {
+                            "uuid": "p4-sw1"
+                        }
+                    },
+                    "endpoint_uuid": {
+                        "uuid": "1"
+                    }
+                },
+                {
+                    "device_id": {
+                        "device_uuid": {
+                            "uuid": "edge-net"
+                        }
+                    },
+                    "endpoint_uuid": {
+                        "uuid": "eth1"
+                    }
+                }
+            ]
+        },
+        {
+            "link_id": {
+                "link_uuid": {
+                    "uuid": "edge-net/eth1==p4-sw1/1"
+                }
+            },
+            "link_endpoint_ids": [
+                {
+                    "device_id": {
+                        "device_uuid": {
+                            "uuid": "edge-net"
+                        }
+                    },
+                    "endpoint_uuid": {
+                        "uuid": "eth1"
+                    }
+                },
+                {
+                    "device_id": {
+                        "device_uuid": {
+                            "uuid": "p4-sw1"
+                        }
+                    },
+                    "endpoint_uuid": {
+                        "uuid": "1"
+                    }
+                }
+            ]
+        },
+        {
+            "link_id": {
+                "link_uuid": {
+                    "uuid": "p4-sw1/2==corporate-net/eth1"
+                }
+            },
+            "link_endpoint_ids": [
+                {
+                    "device_id": {
+                        "device_uuid": {
+                            "uuid": "p4-sw1"
+                        }
+                    },
+                    "endpoint_uuid": {
+                        "uuid": "2"
+                    }
+                },
+                {
+                    "device_id": {
+                        "device_uuid": {
+                            "uuid": "corporate-net"
+                        }
+                    },
+                    "endpoint_uuid": {
+                        "uuid": "eth1"
+                    }
+                }
+            ]
+        },
+        {
+            "link_id": {
+                "link_uuid": {
+                    "uuid": "corporate-net/eth1==p4-sw1/2"
+                }
+            },
+            "link_endpoint_ids": [
+                {
+                    "device_id": {
+                        "device_uuid": {
+                            "uuid": "corporate-net"
+                        }
+                    },
+                    "endpoint_uuid": {
+                        "uuid": "eth1"
+                    }
+                },
+                {
+                    "device_id": {
+                        "device_uuid": {
+                            "uuid": "p4-sw1"
+                        }
+                    },
+                    "endpoint_uuid": {
+                        "uuid": "2"
+                    }
+                }
+            ]
+        }
+    ]
+}
diff --git a/src/tests/p4-int-routing-acl/p4src/README.md b/src/tests/p4-int-routing-acl/p4src/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..07e34066fbc19fb3f1778a64c65723513b8081df
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/p4src/README.md
@@ -0,0 +1,24 @@
+# P4 Sources
+
+We employ the P4 sources from the [fabric-tna](https://github.com/stratum/fabric-tna/tree/main) project.
+
+To compile a relevant P4 target binary and P4 info file, do:
+
+```shell
+git clone https://github.com/stratum/fabric-tna.git
+
+cd ./fabric-tna
+
+make fabric-int-v1model
+```
+
+At this point, a relevant `build.sh` script is being run and a P4 program is being compiled.
+
+After a successful compilation, some artifacts (p4info.txt, bmv2.json) will be generated and placed into `build` sub-folder.
+
+```shell
+ls build/fabric-int/bmv2 
+_pp.p4     bmv2.json  p4info.txt
+```
+
+These artefacts are now moved into this repository.
diff --git a/src/tests/p4-int-routing-acl/p4src/_pp.p4 b/src/tests/p4-int-routing-acl/p4src/_pp.p4
new file mode 100644
index 0000000000000000000000000000000000000000..1b2b718a1e96f807e1da6139ababf9e71a881cd0
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/p4src/_pp.p4
@@ -0,0 +1,2037 @@
+error {
+    PacketRejectedByParser
+}
+#include <core.p4>
+#define V1MODEL_VERSION 20180101
+#include <v1model.p4>
+
+typedef bit<9> PortId_t;
+typedef bit<16> MulticastGroupId_t;
+typedef bit<5> QueueId_t;
+typedef bit<10> MirrorId_t;
+typedef bit<16> ReplicationId_t;
+enum bit<2> MeterColor_t {
+    GREEN = 0,
+    YELLOW = 1,
+    RED = 2
+}
+
+typedef bit<1> BOOL;
+typedef bit<8> FieldListIndex_t;
+const PortId_t BMV2_DROP_PORT = 511;
+const PortId_t FAKE_V1MODEL_RECIRC_PORT = 510;
+const FieldListIndex_t PRESERVE_INT_MD = 241;
+const FieldListIndex_t PRESERVE_INGRESS_PORT = 231;
+const FieldListIndex_t NO_PRESERVATION = 0;
+typedef bit<3> fwd_type_t;
+typedef bit<32> next_id_t;
+typedef bit<20> mpls_label_t;
+typedef bit<48> mac_addr_t;
+typedef bit<12> vlan_id_t;
+typedef bit<32> ipv4_addr_t;
+typedef bit<16> l4_port_t;
+typedef bit<32> flow_hash_t;
+typedef bit<4> slice_id_t;
+typedef bit<2> tc_t;
+typedef bit<(4 + 2)> slice_tc_t;
+type bit<9> FabricPortId_t;
+const bit<8> DEFAULT_APP_ID = 0;
+const slice_id_t DEFAULT_SLICE_ID = 0;
+const tc_t DEFAULT_TC = 0;
+const QueueId_t QUEUE_ID_BEST_EFFORT = 0;
+typedef bit<32> teid_t;
+typedef bit<12> upf_ctr_idx_t;
+typedef bit<8> tun_peer_id_t;
+typedef bit<32> ue_session_id_t;
+typedef bit<15> session_meter_idx_t;
+typedef bit<15> app_meter_idx_t;
+const session_meter_idx_t DEFAULT_SESSION_METER_IDX = 0;
+const app_meter_idx_t DEFAULT_APP_METER_IDX = 0;
+enum bit<2> EncapPresence {
+    NONE = 0x0,
+    GTPU_ONLY = 0x1,
+    GTPU_WITH_PSC = 0x2,
+    VXLAN = 0x3
+}
+
+const bit<16> GTPU_UDP_PORT = 2152;
+const bit<3> GTP_V1 = 3w1;
+const bit<8> GTPU_GPDU = 0xff;
+const bit<1> GTP_PROTOCOL_TYPE_GTP = 1w1;
+const bit<8> GTPU_NEXT_EXT_NONE = 0x0;
+const bit<8> GTPU_NEXT_EXT_PSC = 0x85;
+const bit<4> GTPU_EXT_PSC_TYPE_DL = 4w0;
+const bit<4> GTPU_EXT_PSC_TYPE_UL = 4w1;
+const bit<8> GTPU_EXT_PSC_LEN = 8w1;
+enum bit<2> PortType_t {
+    UNKNOWN = 0x0,
+    EDGE = 0x1,
+    INFRA = 0x2,
+    INTERNAL = 0x3
+}
+
+const bit<16> ETHERTYPE_QINQ = 0x88a8;
+const bit<16> ETHERTYPE_QINQ_NON_STD = 0x9100;
+const bit<16> ETHERTYPE_VLAN = 0x8100;
+const bit<16> ETHERTYPE_MPLS = 0x8847;
+const bit<16> ETHERTYPE_MPLS_MULTICAST = 0x8848;
+const bit<16> ETHERTYPE_IPV4 = 0x800;
+const bit<16> ETHERTYPE_IPV6 = 0x86dd;
+const bit<16> ETHERTYPE_ARP = 0x806;
+const bit<16> ETHERTYPE_PPPOED = 0x8863;
+const bit<16> ETHERTYPE_PPPOES = 0x8864;
+const bit<16> ETHERTYPE_PACKET_OUT = 0xbf01;
+const bit<16> ETHERTYPE_CPU_LOOPBACK_INGRESS = 0xbf02;
+const bit<16> ETHERTYPE_CPU_LOOPBACK_EGRESS = 0xbf03;
+const bit<16> ETHERTYPE_INT_WIP_IPV4 = 0xbf04;
+const bit<16> ETHERTYPE_INT_WIP_MPLS = 0xbf05;
+const bit<16> PPPOE_PROTOCOL_IP4 = 0x21;
+const bit<16> PPPOE_PROTOCOL_IP6 = 0x57;
+const bit<16> PPPOE_PROTOCOL_MPLS = 0x281;
+const bit<8> PROTO_ICMP = 1;
+const bit<8> PROTO_TCP = 6;
+const bit<8> PROTO_UDP = 17;
+const bit<8> PROTO_ICMPV6 = 58;
+const bit<4> IPV4_MIN_IHL = 5;
+const fwd_type_t FWD_BRIDGING = 0;
+const fwd_type_t FWD_MPLS = 1;
+const fwd_type_t FWD_IPV4_UNICAST = 2;
+const fwd_type_t FWD_IPV4_MULTICAST = 3;
+const fwd_type_t FWD_IPV6_UNICAST = 4;
+const fwd_type_t FWD_IPV6_MULTICAST = 5;
+const fwd_type_t FWD_UNKNOWN = 7;
+const vlan_id_t DEFAULT_VLAN_ID = 12w4094;
+const bit<8> DEFAULT_MPLS_TTL = 64;
+const bit<8> DEFAULT_IPV4_TTL = 64;
+const bit<16> VXLAN_UDP_PORT = 4789;
+const bit<7> RECIRC_PORT_NUMBER = 7w68;
+action nop() {
+    NoAction();
+}
+enum bit<8> BridgedMdType_t {
+    INVALID = 0,
+    INGRESS_TO_EGRESS = 1,
+    EGRESS_MIRROR = 2,
+    INGRESS_MIRROR = 3,
+    INT_INGRESS_DROP = 4,
+    DEFLECTED = 5
+}
+
+enum bit<3> FabricMirrorType_t {
+    INVALID = 0,
+    INT_REPORT = 1,
+    PACKET_IN = 2
+}
+
+const MirrorId_t PACKET_IN_MIRROR_SESSION_ID = 0x1ff;
+enum bit<2> CpuLoopbackMode_t {
+    DISABLED = 0,
+    DIRECT = 1,
+    INGRESS = 2
+}
+
+const bit<4> NPROTO_ETHERNET = 0;
+const bit<4> NPROTO_TELEMETRY_DROP_HEADER = 1;
+const bit<4> NPROTO_TELEMETRY_SWITCH_LOCAL_HEADER = 2;
+const bit<16> REPORT_FIXED_HEADER_BYTES = 12;
+const bit<16> DROP_REPORT_HEADER_BYTES = 12;
+const bit<16> LOCAL_REPORT_HEADER_BYTES = 16;
+const bit<8> INT_MIRROR_SESSION_BASE = 0x80;
+const bit<10> V1MODEL_INT_MIRROR_SESSION = 0x1fa;
+typedef bit<16> flow_report_filter_index_t;
+typedef bit<16> drop_report_filter_index_t;
+typedef bit<12> queue_report_filter_index_t;
+typedef bit<16> queue_report_quota_t;
+typedef bit<3> IntReportType_t;
+const IntReportType_t INT_REPORT_TYPE_NO_REPORT = 0;
+const IntReportType_t INT_REPORT_TYPE_DROP = 4;
+const IntReportType_t INT_REPORT_TYPE_QUEUE = 2;
+const IntReportType_t INT_REPORT_TYPE_FLOW = 1;
+typedef bit<8> IntWipType_t;
+const IntWipType_t INT_IS_NOT_WIP = 0;
+const IntWipType_t INT_IS_WIP = 1;
+const IntWipType_t INT_IS_WIP_WITH_MPLS = 2;
+const bit<16> INT_WIP_ADJUST_IP_BYTES = 14 - 1 ^ 0xffff;
+const bit<16> INT_WIP_ADJUST_UDP_BYTES = INT_WIP_ADJUST_IP_BYTES - 20;
+const bit<16> INT_WIP_ADJUST_IP_MPLS_BYTES = INT_WIP_ADJUST_IP_BYTES - 4;
+const bit<16> INT_WIP_ADJUST_UDP_MPLS_BYTES = INT_WIP_ADJUST_UDP_BYTES - 4;
+enum bit<8> IntDropReason_t {
+    DROP_REASON_UNKNOWN = 0,
+    DROP_REASON_IP_TTL_ZERO = 26,
+    DROP_REASON_ROUTING_V4_MISS = 29,
+    DROP_REASON_ROUTING_V6_MISS = 29,
+    DROP_REASON_PORT_VLAN_MAPPING_MISS = 55,
+    DROP_REASON_TRAFFIC_MANAGER = 71,
+    DROP_REASON_ACL_DENY = 80,
+    DROP_REASON_BRIDGING_MISS = 89,
+    DROP_REASON_NEXT_ID_MISS = 128,
+    DROP_REASON_MPLS_MISS = 129,
+    DROP_REASON_EGRESS_NEXT_MISS = 130,
+    DROP_REASON_MPLS_TTL_ZERO = 131,
+    DROP_REASON_UPF_DL_SESSION_MISS = 132,
+    DROP_REASON_UPF_DL_SESSION_DROP = 133,
+    DROP_REASON_UPF_UL_SESSION_MISS = 134,
+    DROP_REASON_UPF_UL_SESSION_DROP = 135,
+    DROP_REASON_UPF_DL_SESSION_DROP_BUFF = 136,
+    DROP_REASON_UPF_DL_TERMINATION_MISS = 137,
+    DROP_REASON_UPF_DL_TERMINATION_DROP = 138,
+    DROP_REASON_UPF_UL_TERMINATION_MISS = 139,
+    DROP_REASON_UPF_UL_TERMINATION_DROP = 140,
+    DROP_REASON_UPF_UPLINK_RECIRC_DENY = 150,
+    DROP_REASON_INGRESS_QOS_METER = 160,
+    DROP_REASON_ROUTING_V4_DROP = 170,
+    DROP_REASON_ROUTING_V6_DROP = 171
+}
+
+@controller_header("packet_in") header packet_in_header_t {
+    FabricPortId_t ingress_port;
+    bit<7>         _pad0;
+}
+
+@controller_header("packet_out") header packet_out_header_t {
+    @padding 
+    bit<7>            pad0;
+    FabricPortId_t    egress_port;
+    @padding 
+    bit<3>            pad1;
+    QueueId_t         queue_id;
+    @padding 
+    bit<5>            pad2;
+    CpuLoopbackMode_t cpu_loopback_mode;
+    bit<1>            do_forwarding;
+    @padding 
+    bit<16>           pad3;
+    @padding 
+    bit<48>           pad4;
+    bit<16>           ether_type;
+}
+
+header ethernet_t {
+    mac_addr_t dst_addr;
+    mac_addr_t src_addr;
+}
+
+header eth_type_t {
+    bit<16> value;
+}
+
+header vlan_tag_t {
+    bit<16>   eth_type;
+    bit<3>    pri;
+    bit<1>    cfi;
+    vlan_id_t vlan_id;
+}
+
+header mpls_t {
+    mpls_label_t label;
+    bit<3>       tc;
+    bit<1>       bos;
+    bit<8>       ttl;
+}
+
+header pppoe_t {
+    bit<4>  version;
+    bit<4>  type_id;
+    bit<8>  code;
+    bit<16> session_id;
+    bit<16> length;
+    bit<16> protocol;
+}
+
+header ipv4_t {
+    bit<4>  version;
+    bit<4>  ihl;
+    bit<6>  dscp;
+    bit<2>  ecn;
+    bit<16> total_len;
+    bit<16> identification;
+    bit<3>  flags;
+    bit<13> frag_offset;
+    bit<8>  ttl;
+    bit<8>  protocol;
+    bit<16> hdr_checksum;
+    bit<32> src_addr;
+    bit<32> dst_addr;
+}
+
+header ipv6_t {
+    bit<4>   version;
+    bit<8>   traffic_class;
+    bit<20>  flow_label;
+    bit<16>  payload_len;
+    bit<8>   next_hdr;
+    bit<8>   hop_limit;
+    bit<128> src_addr;
+    bit<128> dst_addr;
+}
+
+header tcp_t {
+    bit<16> sport;
+    bit<16> dport;
+}
+
+header udp_t {
+    bit<16> sport;
+    bit<16> dport;
+    bit<16> len;
+    bit<16> checksum;
+}
+
+header icmp_t {
+    bit<8> icmp_type;
+    bit<8> icmp_code;
+}
+
+header vxlan_t {
+    bit<8>  flags;
+    bit<24> reserved;
+    bit<24> vni;
+    bit<8>  reserved_2;
+}
+
+header gtpu_t {
+    bit<3>  version;
+    bit<1>  pt;
+    bit<1>  spare;
+    bit<1>  ex_flag;
+    bit<1>  seq_flag;
+    bit<1>  npdu_flag;
+    bit<8>  msgtype;
+    bit<16> msglen;
+    teid_t  teid;
+}
+
+header gtpu_options_t {
+    bit<16> seq_num;
+    bit<8>  n_pdu_num;
+    bit<8>  next_ext;
+}
+
+header gtpu_ext_psc_t {
+    bit<8> len;
+    bit<4> type;
+    bit<4> spare0;
+    bit<1> ppp;
+    bit<1> rqi;
+    bit<6> qfi;
+    bit<8> next_ext;
+}
+
+@flexible struct upf_bridged_metadata_t {
+    tun_peer_id_t tun_peer_id;
+    upf_ctr_idx_t upf_ctr_id;
+    bit<6>        qfi;
+    bool          needs_gtpu_encap;
+    bool          skip_upf;
+    bool          skip_egress_upf_ctr;
+    teid_t        teid;
+    bit<4>        _pad;
+}
+
+@pa_no_overlay("egress" , "hdr.report_fixed_header.rsvd") header report_fixed_header_t {
+    bit<4>  ver;
+    bit<4>  nproto;
+    bit<3>  dqf;
+    bit<15> rsvd;
+    bit<6>  hw_id;
+    bit<32> seq_no;
+    bit<32> ig_tstamp;
+}
+
+@pa_container_size("egress" , "hdr.common_report_header.queue_id" , 8) @pa_container_size("egress" , "hdr.common_report_header.ig_port" , 16) @pa_container_size("egress" , "hdr.common_report_header.eg_port" , 16) @pa_no_overlay("egress" , "hdr.common_report_header.queue_id") @pa_no_overlay("egress" , "hdr.common_report_header.eg_port") header common_report_header_t {
+    bit<32> switch_id;
+    bit<7>  pad1;
+    bit<9>  ig_port;
+    bit<7>  pad2;
+    bit<9>  eg_port;
+    bit<3>  pad3;
+    bit<5>  queue_id;
+}
+
+header drop_report_header_t {
+    bit<8>  drop_reason;
+    @padding 
+    bit<16> pad;
+}
+
+header local_report_header_t {
+    bit<5>  pad1;
+    bit<19> queue_occupancy;
+    bit<32> eg_tstamp;
+}
+
+@pa_no_overlay("egress" , "fabric_md.int_report_md.bmd_type") @pa_no_overlay("egress" , "fabric_md.int_report_md.mirror_type") @pa_no_overlay("egress" , "fabric_md.int_report_md.ig_port") @pa_no_overlay("egress" , "fabric_md.int_report_md.eg_port") @pa_no_overlay("egress" , "fabric_md.int_report_md.queue_id") @pa_no_overlay("egress" , "fabric_md.int_report_md.queue_occupancy") @pa_no_overlay("egress" , "fabric_md.int_report_md.ig_tstamp") @pa_no_overlay("egress" , "fabric_md.int_report_md.eg_tstamp") @pa_no_overlay("egress" , "fabric_md.int_report_md.drop_reason") @pa_no_overlay("egress" , "fabric_md.int_report_md.ip_eth_type") @pa_no_overlay("egress" , "fabric_md.int_report_md.report_type") @pa_no_overlay("egress" , "fabric_md.int_report_md.flow_hash") @pa_no_overlay("egress" , "fabric_md.int_report_md.encap_presence") header int_report_metadata_t {
+    BridgedMdType_t    bmd_type;
+    @padding 
+    bit<5>             _pad0;
+    FabricMirrorType_t mirror_type;
+    @padding 
+    bit<7>             _pad1;
+    bit<9>             ig_port;
+    @padding 
+    bit<7>             _pad2;
+    bit<9>             eg_port;
+    @padding 
+    bit<3>             _pad3;
+    bit<5>             queue_id;
+    @padding 
+    bit<5>             _pad4;
+    bit<19>            queue_occupancy;
+    bit<32>            ig_tstamp;
+    bit<32>            eg_tstamp;
+    bit<8>             drop_reason;
+    bit<16>            ip_eth_type;
+    @padding 
+    bit<6>             _pad5;
+    EncapPresence      encap_presence;
+    bit<3>             report_type;
+    @padding 
+    bit<5>             _pad6;
+    flow_hash_t        flow_hash;
+}
+
+@flexible struct int_bridged_metadata_t {
+    bit<3>          report_type;
+    MirrorId_t      mirror_session_id;
+    IntDropReason_t drop_reason;
+    QueueId_t       queue_id;
+    PortId_t        egress_port;
+    IntWipType_t    wip_type;
+}
+
+struct int_metadata_t {
+    bit<32> hop_latency;
+    bit<48> timestamp;
+    bool    vlan_stripped;
+    bool    queue_report;
+}
+
+@flexible struct bridged_metadata_base_t {
+    flow_hash_t   inner_hash;
+    mpls_label_t  mpls_label;
+    PortId_t      ig_port;
+    bool          is_multicast;
+    fwd_type_t    fwd_type;
+    vlan_id_t     vlan_id;
+    EncapPresence encap_presence;
+    bit<8>        mpls_ttl;
+    bit<48>       ig_tstamp;
+    bit<16>       ip_eth_type;
+    bit<10>       stats_flow_id;
+    slice_tc_t    slice_tc;
+}
+
+header bridged_metadata_t {
+    BridgedMdType_t         bmd_type;
+    bridged_metadata_base_t base;
+    int_bridged_metadata_t  int_bmd;
+    bit<1>                  _pad0;
+    bit<5>                  _pad2;
+}
+
+struct lookup_metadata_t {
+    mac_addr_t eth_dst;
+    mac_addr_t eth_src;
+    bit<16>    eth_type;
+    vlan_id_t  vlan_id;
+    bool       is_ipv4;
+    bit<32>    ipv4_src;
+    bit<32>    ipv4_dst;
+    bit<8>     ip_proto;
+    l4_port_t  l4_sport;
+    l4_port_t  l4_dport;
+    bit<8>     icmp_type;
+    bit<8>     icmp_code;
+}
+
+struct common_mirror_metadata_t {
+    MirrorId_t      mirror_session_id;
+    BridgedMdType_t bmd_type;
+}
+
+@pa_auto_init_metadata struct fabric_ingress_metadata_t {
+    bridged_metadata_t       bridged;
+    flow_hash_t              ecmp_hash;
+    lookup_metadata_t        lkp;
+    bit<32>                  routing_ipv4_dst;
+    bool                     skip_forwarding;
+    bool                     skip_next;
+    next_id_t                next_id;
+    bool                     egress_port_set;
+    bool                     punt_to_cpu;
+    bool                     ipv4_checksum_err;
+    bool                     inner_ipv4_checksum_err;
+    slice_id_t               slice_id;
+    tc_t                     tc;
+    bool                     tc_unknown;
+    bool                     is_upf_hit;
+    slice_id_t               upf_slice_id;
+    tc_t                     upf_tc;
+    MeterColor_t             upf_meter_color;
+    PortType_t               ig_port_type;
+    common_mirror_metadata_t mirror;
+}
+
+header common_egress_metadata_t {
+    BridgedMdType_t    bmd_type;
+    @padding 
+    bit<5>             _pad;
+    FabricMirrorType_t mirror_type;
+}
+
+header packet_in_mirror_metadata_t {
+    BridgedMdType_t    bmd_type;
+    @padding 
+    bit<5>             _pad0;
+    FabricMirrorType_t mirror_type;
+    @padding 
+    bit<7>             _pad1;
+    PortId_t           ingress_port;
+}
+
+@pa_auto_init_metadata struct fabric_egress_metadata_t {
+    bridged_metadata_t    bridged;
+    PortId_t              cpu_port;
+    int_report_metadata_t int_report_md;
+    int_metadata_t        int_md;
+    bit<16>               int_ipv4_len;
+    bool                  is_int_recirc;
+    bit<16>               pkt_length;
+}
+
+header fake_ethernet_t {
+    @padding 
+    bit<48> _pad0;
+    @padding 
+    bit<48> _pad1;
+    bit<16> ether_type;
+}
+
+struct ingress_headers_t {
+    packet_out_header_t packet_out;
+    packet_in_header_t  packet_in;
+    fake_ethernet_t     fake_ethernet;
+    ethernet_t          ethernet;
+    vlan_tag_t          vlan_tag;
+    eth_type_t          eth_type;
+    mpls_t              mpls;
+    ipv4_t              ipv4;
+    ipv6_t              ipv6;
+    tcp_t               tcp;
+    udp_t               udp;
+    icmp_t              icmp;
+    gtpu_t              gtpu;
+    gtpu_options_t      gtpu_options;
+    gtpu_ext_psc_t      gtpu_ext_psc;
+    vxlan_t             vxlan;
+    ethernet_t          inner_ethernet;
+    eth_type_t          inner_eth_type;
+    ipv4_t              inner_ipv4;
+    tcp_t               inner_tcp;
+    udp_t               inner_udp;
+    icmp_t              inner_icmp;
+}
+
+struct egress_headers_t {
+    packet_in_header_t     packet_in;
+    fake_ethernet_t        fake_ethernet;
+    ethernet_t             report_ethernet;
+    eth_type_t             report_eth_type;
+    mpls_t                 report_mpls;
+    ipv4_t                 report_ipv4;
+    udp_t                  report_udp;
+    report_fixed_header_t  report_fixed_header;
+    common_report_header_t common_report_header;
+    local_report_header_t  local_report_header;
+    drop_report_header_t   drop_report_header;
+    ethernet_t             ethernet;
+    vlan_tag_t             vlan_tag;
+    eth_type_t             eth_type;
+    mpls_t                 mpls;
+    ipv4_t                 ipv4;
+    ipv6_t                 ipv6;
+    udp_t                  udp;
+}
+
+struct fabric_v1model_metadata_t {
+    bool                      skip_egress;
+    bool                      do_upf_uplink_recirc;
+    bit<1>                    drop_ctl;
+    IntReportType_t           int_mirror_type;
+    fabric_ingress_metadata_t ingress;
+    fabric_egress_metadata_t  egress;
+    @field_list(PRESERVE_INT_MD) 
+    IntReportType_t           recirc_preserved_report_type;
+    @field_list(PRESERVE_INT_MD) 
+    FabricPortId_t            recirc_preserved_egress_port;
+    @field_list(PRESERVE_INT_MD) 
+    IntDropReason_t           recirc_preserved_drop_reason;
+    @field_list(PRESERVE_INGRESS_PORT) 
+    FabricPortId_t            recirc_preserved_ingress_port;
+}
+
+struct v1model_header_t {
+    ingress_headers_t ingress;
+    egress_headers_t  egress;
+}
+
+parser FabricParser(packet_in packet, out v1model_header_t hdr, inout fabric_v1model_metadata_t fabric_md, inout standard_metadata_t standard_md) {
+    state start {
+        fabric_md.egress.pkt_length = (bit<16>)standard_md.packet_length;
+        fabric_md.ingress.bridged.setValid();
+        fabric_md.ingress.bridged.bmd_type = BridgedMdType_t.INGRESS_TO_EGRESS;
+        fabric_md.ingress.bridged.base.ig_port = standard_md.ingress_port;
+        fabric_md.recirc_preserved_ingress_port = (FabricPortId_t)standard_md.ingress_port;
+        fabric_md.ingress.bridged.base.ig_tstamp = standard_md.ingress_global_timestamp;
+        fabric_md.ingress.egress_port_set = false;
+        fabric_md.ingress.punt_to_cpu = false;
+        fabric_md.ingress.bridged.base.ip_eth_type = 0;
+        fabric_md.ingress.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UNKNOWN;
+        fabric_md.ingress.bridged.int_bmd.wip_type = INT_IS_NOT_WIP;
+        fabric_md.ingress.bridged.base.encap_presence = EncapPresence.NONE;
+        fabric_md.ingress.upf_meter_color = MeterColor_t.GREEN;
+        transition check_ethernet;
+    }
+    state check_ethernet {
+        fake_ethernet_t tmp = packet.lookahead<fake_ethernet_t>();
+        transition select(tmp.ether_type) {
+            ETHERTYPE_CPU_LOOPBACK_INGRESS: parse_fake_ethernet;
+            ETHERTYPE_CPU_LOOPBACK_EGRESS: parse_fake_ethernet_and_accept;
+            ETHERTYPE_PACKET_OUT: check_packet_out;
+            ETHERTYPE_INT_WIP_IPV4: parse_int_wip_ipv4;
+            ETHERTYPE_INT_WIP_MPLS: parse_int_wip_mpls;
+            default: parse_ethernet;
+        }
+    }
+    state check_packet_out {
+        packet_out_header_t tmp = packet.lookahead<packet_out_header_t>();
+        transition select(tmp.do_forwarding) {
+            0: parse_packet_out_and_accept;
+            default: strip_packet_out;
+        }
+    }
+    state parse_int_wip_ipv4 {
+        hdr.ingress.ethernet.setValid();
+        hdr.ingress.eth_type.setValid();
+        hdr.ingress.eth_type.value = ETHERTYPE_IPV4;
+        fabric_md.ingress.bridged.int_bmd.wip_type = INT_IS_WIP;
+        fabric_md.ingress.bridged.base.mpls_label = 0;
+        fabric_md.ingress.bridged.base.mpls_ttl = DEFAULT_MPLS_TTL + 1;
+        packet.advance(14 * 8);
+        transition parse_ipv4;
+    }
+    state parse_int_wip_mpls {
+        hdr.ingress.ethernet.setValid();
+        hdr.ingress.eth_type.setValid();
+        hdr.ingress.eth_type.value = ETHERTYPE_MPLS;
+        fabric_md.ingress.bridged.int_bmd.wip_type = INT_IS_WIP_WITH_MPLS;
+        packet.advance(14 * 8);
+        transition parse_mpls;
+    }
+    state parse_packet_out_and_accept {
+        packet.extract(hdr.ingress.packet_out);
+        transition accept;
+    }
+    state strip_packet_out {
+        packet.advance(14 * 8);
+        transition parse_ethernet;
+    }
+    state parse_fake_ethernet {
+        packet.extract(hdr.ingress.fake_ethernet);
+        fake_ethernet_t tmp = packet.lookahead<fake_ethernet_t>();
+        transition select(tmp.ether_type) {
+            ETHERTYPE_INT_WIP_IPV4: parse_int_wip_ipv4;
+            ETHERTYPE_INT_WIP_MPLS: parse_int_wip_mpls;
+            default: parse_ethernet;
+        }
+    }
+    state parse_fake_ethernet_and_accept {
+        packet.extract(hdr.ingress.fake_ethernet);
+        transition accept;
+    }
+    state parse_ethernet {
+        packet.extract(hdr.ingress.ethernet);
+        transition select(packet.lookahead<bit<16>>()) {
+            ETHERTYPE_QINQ: parse_vlan_tag;
+            ETHERTYPE_VLAN &&& 0xefff: parse_vlan_tag;
+            default: parse_untagged;
+        }
+    }
+    state parse_vlan_tag {
+        packet.extract(hdr.ingress.vlan_tag);
+        fabric_md.ingress.bridged.base.vlan_id = hdr.ingress.vlan_tag.vlan_id;
+        transition select(packet.lookahead<bit<16>>()) {
+            default: parse_eth_type;
+        }
+    }
+    state parse_untagged {
+        fabric_md.ingress.bridged.base.vlan_id = DEFAULT_VLAN_ID;
+        transition parse_eth_type;
+    }
+    state parse_eth_type {
+        packet.extract(hdr.ingress.eth_type);
+        transition select(hdr.ingress.eth_type.value) {
+            ETHERTYPE_MPLS: parse_mpls;
+            ETHERTYPE_IPV4: parse_non_mpls;
+            ETHERTYPE_IPV6: parse_non_mpls;
+            default: accept;
+        }
+    }
+    state parse_mpls {
+        packet.extract(hdr.ingress.mpls);
+        fabric_md.ingress.bridged.base.mpls_label = hdr.ingress.mpls.label;
+        fabric_md.ingress.bridged.base.mpls_ttl = hdr.ingress.mpls.ttl;
+        transition select(packet.lookahead<bit<4>>()) {
+            4: parse_ipv4;
+            6: parse_ipv6;
+            default: reject_packet;
+        }
+    }
+    state reject_packet {
+        verify(false, error.PacketRejectedByParser);
+        transition accept;
+    }
+    state parse_non_mpls {
+        fabric_md.ingress.bridged.base.mpls_label = 0;
+        fabric_md.ingress.bridged.base.mpls_ttl = DEFAULT_MPLS_TTL + 1;
+        transition select(hdr.ingress.eth_type.value) {
+            ETHERTYPE_IPV4: parse_ipv4;
+            ETHERTYPE_IPV6: parse_ipv6;
+            default: accept;
+        }
+    }
+    state parse_ipv4 {
+        packet.extract(hdr.ingress.ipv4);
+        fabric_md.ingress.routing_ipv4_dst = hdr.ingress.ipv4.dst_addr;
+        fabric_md.ingress.bridged.base.ip_eth_type = ETHERTYPE_IPV4;
+        transition select(hdr.ingress.ipv4.protocol) {
+            PROTO_TCP: parse_tcp;
+            PROTO_UDP: parse_udp;
+            PROTO_ICMP: parse_icmp;
+            default: accept;
+        }
+    }
+    state parse_ipv6 {
+        packet.extract(hdr.ingress.ipv6);
+        fabric_md.ingress.bridged.base.ip_eth_type = ETHERTYPE_IPV6;
+        transition select(hdr.ingress.ipv6.next_hdr) {
+            PROTO_TCP: parse_tcp;
+            PROTO_UDP: parse_udp;
+            PROTO_ICMPV6: parse_icmp;
+            default: accept;
+        }
+    }
+    state parse_icmp {
+        packet.extract(hdr.ingress.icmp);
+        transition accept;
+    }
+    state parse_tcp {
+        packet.extract(hdr.ingress.tcp);
+        transition accept;
+    }
+    state parse_udp {
+        packet.extract(hdr.ingress.udp);
+        gtpu_t gtpu = packet.lookahead<gtpu_t>();
+        transition select(hdr.ingress.udp.dport, gtpu.version, gtpu.msgtype) {
+            (GTPU_UDP_PORT, GTP_V1, GTPU_GPDU): parse_gtpu;
+            (VXLAN_UDP_PORT, default, default): parse_vxlan;
+            default: accept;
+        }
+    }
+    state parse_gtpu {
+        packet.extract(hdr.ingress.gtpu);
+        transition select(hdr.ingress.gtpu.ex_flag, hdr.ingress.gtpu.seq_flag, hdr.ingress.gtpu.npdu_flag) {
+            (0, 0, 0): set_gtpu_only;
+            default: parse_gtpu_options;
+        }
+    }
+    state set_gtpu_only {
+        fabric_md.ingress.bridged.base.encap_presence = EncapPresence.GTPU_ONLY;
+        transition parse_inner_ipv4;
+    }
+    state parse_gtpu_options {
+        packet.extract(hdr.ingress.gtpu_options);
+        bit<8> gtpu_ext_len = packet.lookahead<bit<8>>();
+        transition select(hdr.ingress.gtpu_options.next_ext, gtpu_ext_len) {
+            (GTPU_NEXT_EXT_PSC, GTPU_EXT_PSC_LEN): parse_gtpu_ext_psc;
+            default: accept;
+        }
+    }
+    state parse_gtpu_ext_psc {
+        packet.extract(hdr.ingress.gtpu_ext_psc);
+        fabric_md.ingress.bridged.base.encap_presence = EncapPresence.GTPU_WITH_PSC;
+        transition select(hdr.ingress.gtpu_ext_psc.next_ext) {
+            GTPU_NEXT_EXT_NONE: parse_inner_ipv4;
+            default: accept;
+        }
+    }
+    state parse_vxlan {
+        packet.extract(hdr.ingress.vxlan);
+        fabric_md.ingress.bridged.base.encap_presence = EncapPresence.VXLAN;
+        transition parse_inner_ethernet;
+    }
+    state parse_inner_ethernet {
+        packet.extract(hdr.ingress.inner_ethernet);
+        packet.extract(hdr.ingress.inner_eth_type);
+        transition select(hdr.ingress.inner_eth_type.value) {
+            ETHERTYPE_IPV4: parse_inner_ipv4;
+            default: accept;
+        }
+    }
+    state parse_inner_ipv4 {
+        packet.extract(hdr.ingress.inner_ipv4);
+        transition select(hdr.ingress.inner_ipv4.protocol) {
+            PROTO_TCP: parse_inner_tcp;
+            PROTO_UDP: parse_inner_udp;
+            PROTO_ICMP: parse_inner_icmp;
+            default: accept;
+        }
+    }
+    state parse_inner_tcp {
+        packet.extract(hdr.ingress.inner_tcp);
+        transition accept;
+    }
+    state parse_inner_udp {
+        packet.extract(hdr.ingress.inner_udp);
+        transition accept;
+    }
+    state parse_inner_icmp {
+        packet.extract(hdr.ingress.inner_icmp);
+        transition accept;
+    }
+}
+
+control FabricDeparser(packet_out packet, in v1model_header_t hdr) {
+    apply {
+        packet.emit(hdr.ingress.fake_ethernet);
+        packet.emit(hdr.ingress.packet_in);
+        packet.emit(hdr.egress.report_ethernet);
+        packet.emit(hdr.egress.report_eth_type);
+        packet.emit(hdr.egress.report_mpls);
+        packet.emit(hdr.egress.report_ipv4);
+        packet.emit(hdr.egress.report_udp);
+        packet.emit(hdr.egress.report_fixed_header);
+        packet.emit(hdr.egress.common_report_header);
+        packet.emit(hdr.egress.local_report_header);
+        packet.emit(hdr.egress.drop_report_header);
+        packet.emit(hdr.ingress.ethernet);
+        packet.emit(hdr.ingress.vlan_tag);
+        packet.emit(hdr.ingress.eth_type);
+        packet.emit(hdr.ingress.mpls);
+        packet.emit(hdr.ingress.ipv4);
+        packet.emit(hdr.ingress.ipv6);
+        packet.emit(hdr.ingress.tcp);
+        packet.emit(hdr.ingress.udp);
+        packet.emit(hdr.ingress.icmp);
+        packet.emit(hdr.ingress.gtpu);
+        packet.emit(hdr.ingress.gtpu_options);
+        packet.emit(hdr.ingress.gtpu_ext_psc);
+        packet.emit(hdr.ingress.vxlan);
+        packet.emit(hdr.ingress.inner_ethernet);
+        packet.emit(hdr.ingress.inner_eth_type);
+        packet.emit(hdr.ingress.inner_ipv4);
+        packet.emit(hdr.ingress.inner_tcp);
+        packet.emit(hdr.ingress.inner_udp);
+        packet.emit(hdr.ingress.inner_icmp);
+    }
+}
+
+control Acl(inout ingress_headers_t hdr, inout fabric_ingress_metadata_t fabric_md, inout standard_metadata_t standard_md, inout FabricPortId_t recirc_preserved_egress_port, inout bit<1> drop_ctl) {
+    direct_counter(CounterType.packets_and_bytes) acl_counter;
+    action set_next_id_acl(next_id_t next_id) {
+        fabric_md.next_id = next_id;
+        acl_counter.count();
+        fabric_md.skip_next = false;
+        drop_ctl = 0;
+    }
+    action copy_to_cpu() {
+        clone_preserving_field_list(CloneType.I2E, (bit<32>)PACKET_IN_MIRROR_SESSION_ID, PRESERVE_INGRESS_PORT);
+        acl_counter.count();
+    }
+    action punt_to_cpu() {
+        copy_to_cpu();
+        fabric_md.skip_next = true;
+        fabric_md.punt_to_cpu = true;
+        drop_ctl = 1;
+    }
+    action drop() {
+        drop_ctl = 1;
+        fabric_md.skip_next = true;
+        fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_ACL_DENY;
+        acl_counter.count();
+    }
+    action set_output_port(FabricPortId_t port_num) {
+        standard_md.egress_spec = (PortId_t)port_num;
+        recirc_preserved_egress_port = port_num;
+        fabric_md.egress_port_set = true;
+        fabric_md.skip_next = true;
+        drop_ctl = 0;
+        acl_counter.count();
+    }
+    action nop_acl() {
+        acl_counter.count();
+    }
+    table acl {
+        key = {
+            fabric_md.bridged.base.ig_port: ternary @name("ig_port") ;
+            fabric_md.lkp.eth_dst         : ternary @name("eth_dst") ;
+            fabric_md.lkp.eth_src         : ternary @name("eth_src") ;
+            fabric_md.lkp.vlan_id         : ternary @name("vlan_id") ;
+            fabric_md.lkp.eth_type        : ternary @name("eth_type") ;
+            fabric_md.lkp.ipv4_src        : ternary @name("ipv4_src") ;
+            fabric_md.lkp.ipv4_dst        : ternary @name("ipv4_dst") ;
+            fabric_md.lkp.ip_proto        : ternary @name("ip_proto") ;
+            fabric_md.lkp.icmp_type       : ternary @name("icmp_type") ;
+            fabric_md.lkp.icmp_code       : ternary @name("icmp_code") ;
+            fabric_md.lkp.l4_sport        : ternary @name("l4_sport") ;
+            fabric_md.lkp.l4_dport        : ternary @name("l4_dport") ;
+            fabric_md.ig_port_type        : ternary @name("ig_port_type") ;
+        }
+        actions = {
+            set_next_id_acl;
+            punt_to_cpu;
+            copy_to_cpu;
+            drop;
+            set_output_port;
+            nop_acl;
+        }
+        const default_action = nop_acl();
+        size = 1024;
+        counters = acl_counter;
+    }
+    apply {
+        acl.apply();
+    }
+}
+
+control Next(inout ingress_headers_t hdr, inout fabric_ingress_metadata_t fabric_md, inout standard_metadata_t standard_md, inout FabricPortId_t recirc_preserved_egress_port) {
+    @hidden action output(FabricPortId_t port_num) {
+        standard_md.egress_spec = (PortId_t)port_num;
+        recirc_preserved_egress_port = port_num;
+        fabric_md.egress_port_set = true;
+    }
+    @hidden action rewrite_smac(mac_addr_t smac) {
+        hdr.ethernet.src_addr = smac;
+    }
+    @hidden action rewrite_dmac(mac_addr_t dmac) {
+        hdr.ethernet.dst_addr = dmac;
+    }
+    @hidden action routing(FabricPortId_t port_num, mac_addr_t smac, mac_addr_t dmac) {
+        rewrite_smac(smac);
+        rewrite_dmac(dmac);
+        output(port_num);
+    }
+    direct_counter(CounterType.packets_and_bytes) simple_counter;
+    action output_simple(FabricPortId_t port_num) {
+        output(port_num);
+        simple_counter.count();
+    }
+    action routing_simple(FabricPortId_t port_num, mac_addr_t smac, mac_addr_t dmac) {
+        routing(port_num, smac, dmac);
+        simple_counter.count();
+    }
+    table simple {
+        key = {
+            fabric_md.next_id: exact @name("next_id") ;
+        }
+        actions = {
+            output_simple;
+            routing_simple;
+            @defaultonly nop;
+        }
+        const default_action = nop();
+        counters = simple_counter;
+        size = 1024;
+    }
+    @max_group_size(32w16) action_selector(HashAlgorithm.crc16, 32w16, 32w16) hashed_profile;
+    direct_counter(CounterType.packets_and_bytes) hashed_counter;
+    action output_hashed(FabricPortId_t port_num) {
+        output(port_num);
+        hashed_counter.count();
+    }
+    action routing_hashed(FabricPortId_t port_num, mac_addr_t smac, mac_addr_t dmac) {
+        routing(port_num, smac, dmac);
+        hashed_counter.count();
+    }
+    table hashed {
+        key = {
+            fabric_md.next_id  : exact @name("next_id") ;
+            fabric_md.ecmp_hash: selector;
+        }
+        actions = {
+            output_hashed;
+            routing_hashed;
+            @defaultonly nop;
+        }
+        implementation = hashed_profile;
+        counters = hashed_counter;
+        const default_action = nop();
+        size = 1024;
+    }
+    direct_counter(CounterType.packets_and_bytes) multicast_counter;
+    action set_mcast_group_id(MulticastGroupId_t group_id) {
+        standard_md.mcast_grp = group_id;
+        fabric_md.bridged.base.is_multicast = true;
+        multicast_counter.count();
+    }
+    action reset_mcast_group_id() {
+        standard_md.mcast_grp = 0;
+        fabric_md.bridged.base.is_multicast = false;
+    }
+    table multicast {
+        key = {
+            fabric_md.next_id: exact @name("next_id") ;
+        }
+        actions = {
+            set_mcast_group_id;
+            @defaultonly reset_mcast_group_id;
+        }
+        counters = multicast_counter;
+        const default_action = reset_mcast_group_id();
+        size = 1024;
+    }
+    apply {
+        simple.apply();
+        hashed.apply();
+        multicast.apply();
+    }
+}
+
+control EgressNextControl(inout ingress_headers_t hdr, inout fabric_egress_metadata_t fabric_md, inout standard_metadata_t standard_md, inout IntDropReason_t recirc_preserved_drop_reason, inout bit<1> drop_ctl) {
+    @hidden action pop_mpls_if_present() {
+        hdr.mpls.setInvalid();
+        hdr.eth_type.value = fabric_md.bridged.base.ip_eth_type;
+    }
+    @hidden action set_mpls() {
+        hdr.mpls.setValid();
+        hdr.mpls.label = fabric_md.bridged.base.mpls_label;
+        hdr.mpls.tc = 3w0;
+        hdr.mpls.bos = 1w1;
+        hdr.mpls.ttl = fabric_md.bridged.base.mpls_ttl;
+        hdr.eth_type.value = ETHERTYPE_MPLS;
+    }
+    @hidden action push_outer_vlan() {
+        hdr.vlan_tag.setValid();
+        hdr.vlan_tag.eth_type = ETHERTYPE_VLAN;
+        hdr.vlan_tag.vlan_id = fabric_md.bridged.base.vlan_id;
+    }
+    direct_counter(CounterType.packets_and_bytes) egress_vlan_counter;
+    action push_vlan() {
+        push_outer_vlan();
+        egress_vlan_counter.count();
+    }
+    action pop_vlan() {
+        hdr.vlan_tag.setInvalid();
+        egress_vlan_counter.count();
+    }
+    action drop() {
+        drop_ctl = 1;
+        egress_vlan_counter.count();
+        recirc_preserved_drop_reason = IntDropReason_t.DROP_REASON_EGRESS_NEXT_MISS;
+    }
+    table egress_vlan {
+        key = {
+            fabric_md.bridged.base.vlan_id: exact @name("vlan_id") ;
+            standard_md.egress_port       : exact @name("eg_port") ;
+        }
+        actions = {
+            push_vlan;
+            pop_vlan;
+            @defaultonly drop;
+        }
+        const default_action = drop();
+        counters = egress_vlan_counter;
+        size = 1024;
+    }
+    apply {
+        if (fabric_md.bridged.base.is_multicast && fabric_md.bridged.base.ig_port == standard_md.egress_port) {
+            fabric_md.bridged.int_bmd.report_type = INT_REPORT_TYPE_NO_REPORT;
+            drop_ctl = 1;
+        }
+        if (fabric_md.bridged.base.mpls_label == 0) {
+            if (hdr.mpls.isValid()) {
+                pop_mpls_if_present();
+            }
+        } else {
+            set_mpls();
+        }
+        if (!fabric_md.is_int_recirc) {
+            egress_vlan.apply();
+        }
+        bool regular_packet = true;
+        regular_packet = !(fabric_md.bridged.bmd_type == BridgedMdType_t.INT_INGRESS_DROP || fabric_md.bridged.bmd_type == BridgedMdType_t.EGRESS_MIRROR);
+        if (hdr.mpls.isValid()) {
+            hdr.mpls.ttl = hdr.mpls.ttl - 1;
+            if (hdr.mpls.ttl == 0) {
+                drop_ctl = 1;
+                recirc_preserved_drop_reason = IntDropReason_t.DROP_REASON_MPLS_TTL_ZERO;
+            }
+        } else {
+            if (hdr.ipv4.isValid() && fabric_md.bridged.base.fwd_type != FWD_BRIDGING) {
+                if (regular_packet) {
+                    hdr.ipv4.ttl = hdr.ipv4.ttl - 1;
+                }
+                if (hdr.ipv4.ttl == 0) {
+                    drop_ctl = 1;
+                    recirc_preserved_drop_reason = IntDropReason_t.DROP_REASON_IP_TTL_ZERO;
+                }
+            } else if (hdr.ipv6.isValid() && fabric_md.bridged.base.fwd_type != FWD_BRIDGING) {
+                if (regular_packet) {
+                    hdr.ipv6.hop_limit = hdr.ipv6.hop_limit - 1;
+                }
+                if (hdr.ipv6.hop_limit == 0) {
+                    drop_ctl = 1;
+                    recirc_preserved_drop_reason = IntDropReason_t.DROP_REASON_IP_TTL_ZERO;
+                }
+            }
+        }
+    }
+}
+
+const bit<10> UNSET_FLOW_ID = 0;
+control StatsIngress(in lookup_metadata_t lkp, in PortId_t ig_port, out bit<10> stats_flow_id) {
+    direct_counter(CounterType.packets_and_bytes) flow_counter;
+    action count(bit<10> flow_id) {
+        stats_flow_id = flow_id;
+        flow_counter.count();
+    }
+    table flows {
+        key = {
+            lkp.ipv4_src: ternary @name("ipv4_src") ;
+            lkp.ipv4_dst: ternary @name("ipv4_dst") ;
+            lkp.ip_proto: ternary @name("ip_proto") ;
+            lkp.l4_sport: ternary @name("l4_sport") ;
+            lkp.l4_dport: ternary @name("l4_dport") ;
+            ig_port     : exact @name("ig_port") ;
+        }
+        actions = {
+            count;
+        }
+        const default_action = count(UNSET_FLOW_ID);
+        const size = 1 << 10;
+        counters = flow_counter;
+    }
+    apply {
+        flows.apply();
+    }
+}
+
+control StatsEgress(in bit<10> stats_flow_id, in PortId_t eg_port, in BridgedMdType_t bmd_type) {
+    direct_counter(CounterType.packets_and_bytes) flow_counter;
+    action count() {
+        flow_counter.count();
+    }
+    table flows {
+        key = {
+            stats_flow_id: exact @name("stats_flow_id") ;
+            eg_port      : exact @name("eg_port") ;
+        }
+        actions = {
+            count;
+        }
+        const default_action = count;
+        const size = 1 << 10;
+        counters = flow_counter;
+    }
+    apply {
+        if (bmd_type == BridgedMdType_t.INGRESS_TO_EGRESS) {
+            flows.apply();
+        }
+    }
+}
+
+control Hasher(inout ingress_headers_t hdr, inout fabric_ingress_metadata_t fabric_md) {
+    flow_hash_t max = 0xffffffff;
+    flow_hash_t base = 0;
+    apply {
+        hash(fabric_md.bridged.base.inner_hash, HashAlgorithm.crc32, base, { fabric_md.lkp.ipv4_src, fabric_md.lkp.ipv4_dst, fabric_md.lkp.ip_proto, fabric_md.lkp.l4_sport, fabric_md.lkp.l4_dport }, max);
+        if (hdr.gtpu.isValid()) {
+            hash(fabric_md.ecmp_hash, HashAlgorithm.crc32, base, { hdr.ipv4.src_addr, hdr.ipv4.dst_addr, hdr.gtpu.teid }, max);
+        } else if (fabric_md.lkp.is_ipv4) {
+            fabric_md.ecmp_hash = fabric_md.bridged.base.inner_hash;
+        } else {
+            fabric_md.bridged.base.inner_hash = 0;
+            hash(fabric_md.ecmp_hash, HashAlgorithm.crc32, base, { hdr.ethernet.dst_addr, hdr.ethernet.src_addr, hdr.eth_type.value }, max);
+        }
+    }
+}
+
+control IngressSliceTcClassifier(inout ingress_headers_t hdr, inout standard_metadata_t standard_md, inout fabric_ingress_metadata_t fabric_md) {
+    direct_counter(CounterType.packets) classifier_stats;
+    action set_slice_id_tc(slice_id_t slice_id, tc_t tc) {
+        fabric_md.slice_id = slice_id;
+        fabric_md.tc = tc;
+        fabric_md.tc_unknown = false;
+        classifier_stats.count();
+    }
+    action no_classification() {
+        set_slice_id_tc(DEFAULT_SLICE_ID, DEFAULT_TC);
+        fabric_md.tc_unknown = true;
+    }
+    action trust_dscp() {
+        fabric_md.slice_id = hdr.ipv4.dscp[4 + 2 - 1:2];
+        fabric_md.tc = hdr.ipv4.dscp[2 - 1:0];
+        fabric_md.tc_unknown = false;
+        classifier_stats.count();
+    }
+    table classifier {
+        key = {
+            fabric_md.bridged.base.ig_port: ternary @name("ig_port") ;
+            fabric_md.lkp.ipv4_src        : ternary @name("ipv4_src") ;
+            fabric_md.lkp.ipv4_dst        : ternary @name("ipv4_dst") ;
+            fabric_md.lkp.ip_proto        : ternary @name("ip_proto") ;
+            fabric_md.lkp.l4_sport        : ternary @name("l4_sport") ;
+            fabric_md.lkp.l4_dport        : ternary @name("l4_dport") ;
+        }
+        actions = {
+            set_slice_id_tc;
+            trust_dscp;
+            @defaultonly no_classification;
+        }
+        const default_action = no_classification();
+        counters = classifier_stats;
+        size = 512;
+    }
+    apply {
+        classifier.apply();
+    }
+}
+
+control IngressQos(inout fabric_ingress_metadata_t fabric_md, inout standard_metadata_t standard_md, inout bit<1> drop_ctl) {
+    bit<2> packet_color = 2w0;
+    @hidden action use_upf() {
+        fabric_md.bridged.base.slice_tc = fabric_md.upf_slice_id ++ fabric_md.upf_tc;
+    }
+    @hidden action use_default() {
+        fabric_md.bridged.base.slice_tc = fabric_md.slice_id ++ fabric_md.tc;
+    }
+    @hidden table set_slice_tc {
+        key = {
+            fabric_md.is_upf_hit: exact;
+        }
+        actions = {
+            use_upf;
+            use_default;
+        }
+        const size = 2;
+        const entries = {
+                        true : use_upf;
+                        false : use_default;
+        }
+    }
+    meter(1 << 4 + 2, MeterType.bytes) slice_tc_meter;
+    direct_counter(CounterType.packets) queues_stats;
+    action set_queue(QueueId_t qid) {
+        queues_stats.count();
+    }
+    action meter_drop() {
+        drop_ctl = 1;
+        fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_INGRESS_QOS_METER;
+        queues_stats.count();
+    }
+    table queues {
+        key = {
+            fabric_md.bridged.base.slice_tc: exact @name("slice_tc") ;
+            packet_color                   : ternary @name("color") ;
+        }
+        actions = {
+            set_queue;
+            meter_drop;
+        }
+        const default_action = set_queue(QUEUE_ID_BEST_EFFORT);
+        counters = queues_stats;
+        size = 1 << 4 + 2 + 1;
+    }
+    action set_default_tc(tc_t tc) {
+        fabric_md.bridged.base.slice_tc = fabric_md.bridged.base.slice_tc[4 + 2 - 1:2] ++ tc;
+    }
+    table default_tc {
+        key = {
+            fabric_md.bridged.base.slice_tc: ternary @name("slice_tc") ;
+            fabric_md.tc_unknown           : exact @name("tc_unknown") ;
+        }
+        actions = {
+            set_default_tc;
+            @defaultonly nop;
+        }
+        const default_action = nop;
+        size = 1 << 4;
+    }
+    apply {
+        set_slice_tc.apply();
+        default_tc.apply();
+        if (fabric_md.upf_meter_color != MeterColor_t.RED) {
+            slice_tc_meter.execute_meter((bit<32>)fabric_md.bridged.base.slice_tc, packet_color);
+        } else {
+            packet_color = MeterColor_t.RED;
+        }
+        queues.apply();
+    }
+}
+
+control EgressDscpRewriter(inout fabric_egress_metadata_t fabric_md, inout standard_metadata_t standard_md, inout ingress_headers_t hdr) {
+    bit<6> tmp_dscp = fabric_md.bridged.base.slice_tc;
+    action rewrite() {
+    }
+    action clear() {
+        tmp_dscp = 0;
+    }
+    table rewriter {
+        key = {
+            standard_md.egress_port: exact @name("eg_port") ;
+        }
+        actions = {
+            rewrite;
+            clear;
+            @defaultonly nop;
+        }
+        const default_action = nop;
+        size = 512;
+    }
+    apply {
+        if (rewriter.apply().hit) {
+            if (hdr.ipv4.isValid()) {
+                hdr.ipv4.dscp = tmp_dscp;
+            }
+        }
+    }
+}
+
+control FabricVerifyChecksum(inout v1model_header_t hdr, inout fabric_v1model_metadata_t meta) {
+    apply {
+        verify_checksum(hdr.ingress.ipv4.isValid(), { hdr.ingress.ipv4.version, hdr.ingress.ipv4.ihl, hdr.ingress.ipv4.dscp, hdr.ingress.ipv4.ecn, hdr.ingress.ipv4.total_len, hdr.ingress.ipv4.identification, hdr.ingress.ipv4.flags, hdr.ingress.ipv4.frag_offset, hdr.ingress.ipv4.ttl, hdr.ingress.ipv4.protocol, hdr.ingress.ipv4.src_addr, hdr.ingress.ipv4.dst_addr }, hdr.ingress.ipv4.hdr_checksum, HashAlgorithm.csum16);
+        verify_checksum(hdr.ingress.inner_ipv4.isValid(), { hdr.ingress.inner_ipv4.version, hdr.ingress.inner_ipv4.ihl, hdr.ingress.inner_ipv4.dscp, hdr.ingress.inner_ipv4.ecn, hdr.ingress.inner_ipv4.total_len, hdr.ingress.inner_ipv4.identification, hdr.ingress.inner_ipv4.flags, hdr.ingress.inner_ipv4.frag_offset, hdr.ingress.inner_ipv4.ttl, hdr.ingress.inner_ipv4.protocol, hdr.ingress.inner_ipv4.src_addr, hdr.ingress.inner_ipv4.dst_addr }, hdr.ingress.inner_ipv4.hdr_checksum, HashAlgorithm.csum16);
+    }
+}
+
+control FabricComputeChecksum(inout v1model_header_t hdr, inout fabric_v1model_metadata_t fabric_md) {
+    apply {
+        update_checksum(hdr.ingress.ipv4.isValid(), { hdr.ingress.ipv4.version, hdr.ingress.ipv4.ihl, hdr.ingress.ipv4.dscp, hdr.ingress.ipv4.ecn, hdr.ingress.ipv4.total_len, hdr.ingress.ipv4.identification, hdr.ingress.ipv4.flags, hdr.ingress.ipv4.frag_offset, hdr.ingress.ipv4.ttl, hdr.ingress.ipv4.protocol, hdr.ingress.ipv4.src_addr, hdr.ingress.ipv4.dst_addr }, hdr.ingress.ipv4.hdr_checksum, HashAlgorithm.csum16);
+        update_checksum(hdr.ingress.inner_ipv4.isValid(), { hdr.ingress.inner_ipv4.version, hdr.ingress.inner_ipv4.ihl, hdr.ingress.inner_ipv4.dscp, hdr.ingress.inner_ipv4.ecn, hdr.ingress.inner_ipv4.total_len, hdr.ingress.inner_ipv4.identification, hdr.ingress.inner_ipv4.flags, hdr.ingress.inner_ipv4.frag_offset, hdr.ingress.inner_ipv4.ttl, hdr.ingress.inner_ipv4.protocol, hdr.ingress.inner_ipv4.src_addr, hdr.ingress.inner_ipv4.dst_addr }, hdr.ingress.inner_ipv4.hdr_checksum, HashAlgorithm.csum16);
+        update_checksum(hdr.egress.report_ipv4.isValid(), { hdr.egress.report_ipv4.version, hdr.egress.report_ipv4.ihl, hdr.egress.report_ipv4.dscp, hdr.egress.report_ipv4.ecn, hdr.egress.report_ipv4.total_len, hdr.egress.report_ipv4.identification, hdr.egress.report_ipv4.flags, hdr.egress.report_ipv4.frag_offset, hdr.egress.report_ipv4.ttl, hdr.egress.report_ipv4.protocol, hdr.egress.report_ipv4.src_addr, hdr.egress.report_ipv4.dst_addr }, hdr.egress.report_ipv4.hdr_checksum, HashAlgorithm.csum16);
+    }
+}
+
+control PacketIoIngress(inout ingress_headers_t hdr, inout fabric_ingress_metadata_t fabric_md, inout bool skip_egress, inout standard_metadata_t standard_md, inout FabricPortId_t recirc_preserved_egress_port) {
+    @hidden action do_packet_out() {
+        standard_md.egress_spec = (PortId_t)hdr.packet_out.egress_port;
+        recirc_preserved_egress_port = hdr.packet_out.egress_port;
+        fabric_md.egress_port_set = true;
+        hdr.packet_out.setInvalid();
+        skip_egress = true;
+        fabric_md.bridged.setInvalid();
+        exit;
+    }
+    apply {
+        if (hdr.packet_out.isValid()) {
+            do_packet_out();
+        }
+    }
+}
+
+control PacketIoEgress(inout ingress_headers_t hdr, inout fabric_egress_metadata_t fabric_md, inout standard_metadata_t standard_md, in FabricPortId_t preserved_ig_port) {
+    action set_switch_info(FabricPortId_t cpu_port) {
+        fabric_md.cpu_port = (PortId_t)cpu_port;
+    }
+    table switch_info {
+        actions = {
+            set_switch_info;
+            @defaultonly nop;
+        }
+        default_action = nop;
+        const size = 1;
+    }
+    apply {
+        switch_info.apply();
+        if (standard_md.egress_port == fabric_md.cpu_port) {
+            hdr.packet_in.setValid();
+            hdr.packet_in.ingress_port = preserved_ig_port;
+            hdr.fake_ethernet.setInvalid();
+            exit;
+        }
+        if (hdr.fake_ethernet.isValid() && hdr.fake_ethernet.ether_type == ETHERTYPE_CPU_LOOPBACK_EGRESS) {
+            fabric_md.pkt_length = (bit<16>)standard_md.packet_length - 14;
+        }
+    }
+}
+
+control PreNext(inout ingress_headers_t hdr, inout fabric_ingress_metadata_t fabric_md) {
+    direct_counter(CounterType.packets_and_bytes) next_mpls_counter;
+    action set_mpls_label(mpls_label_t label) {
+        fabric_md.bridged.base.mpls_label = label;
+        next_mpls_counter.count();
+    }
+    table next_mpls {
+        key = {
+            fabric_md.next_id: exact @name("next_id") ;
+        }
+        actions = {
+            set_mpls_label;
+            @defaultonly nop;
+        }
+        const default_action = nop();
+        counters = next_mpls_counter;
+        size = 1024;
+    }
+    direct_counter(CounterType.packets_and_bytes) next_vlan_counter;
+    action set_vlan(vlan_id_t vlan_id) {
+        fabric_md.bridged.base.vlan_id = vlan_id;
+        next_vlan_counter.count();
+    }
+    table next_vlan {
+        key = {
+            fabric_md.next_id: exact @name("next_id") ;
+        }
+        actions = {
+            set_vlan;
+            @defaultonly nop;
+        }
+        const default_action = nop();
+        counters = next_vlan_counter;
+        size = 1024;
+    }
+    apply {
+        next_mpls.apply();
+        next_vlan.apply();
+    }
+}
+
+control Filtering(inout ingress_headers_t hdr, inout fabric_ingress_metadata_t fabric_md, inout standard_metadata_t standard_md) {
+    direct_counter(CounterType.packets_and_bytes) ingress_port_vlan_counter;
+    action deny() {
+        fabric_md.skip_forwarding = true;
+        fabric_md.skip_next = true;
+        fabric_md.ig_port_type = PortType_t.UNKNOWN;
+        fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_PORT_VLAN_MAPPING_MISS;
+        ingress_port_vlan_counter.count();
+    }
+    action permit(PortType_t port_type) {
+        fabric_md.ig_port_type = port_type;
+        ingress_port_vlan_counter.count();
+    }
+    action permit_with_internal_vlan(vlan_id_t vlan_id, PortType_t port_type) {
+        fabric_md.bridged.base.vlan_id = vlan_id;
+        permit(port_type);
+    }
+    table ingress_port_vlan {
+        key = {
+            fabric_md.bridged.base.ig_port: exact @name("ig_port") ;
+            hdr.vlan_tag.isValid()        : exact @name("vlan_is_valid") ;
+            hdr.vlan_tag.vlan_id          : ternary @name("vlan_id") ;
+        }
+        actions = {
+            deny();
+            permit();
+            permit_with_internal_vlan();
+        }
+        const default_action = deny();
+        counters = ingress_port_vlan_counter;
+        size = 1024;
+    }
+    direct_counter(CounterType.packets_and_bytes) fwd_classifier_counter;
+    action set_forwarding_type(fwd_type_t fwd_type) {
+        fabric_md.bridged.base.fwd_type = fwd_type;
+        fwd_classifier_counter.count();
+    }
+    counter(8, CounterType.packets_and_bytes) fwd_type_counter;
+    table fwd_classifier {
+        key = {
+            fabric_md.bridged.base.ig_port    : exact @name("ig_port") ;
+            fabric_md.lkp.eth_dst             : ternary @name("eth_dst") ;
+            fabric_md.lkp.eth_type            : ternary @name("eth_type") ;
+            fabric_md.bridged.base.ip_eth_type: exact @name("ip_eth_type") ;
+        }
+        actions = {
+            set_forwarding_type;
+        }
+        const default_action = set_forwarding_type(FWD_BRIDGING);
+        counters = fwd_classifier_counter;
+        size = 1024;
+    }
+    apply {
+        ingress_port_vlan.apply();
+        fwd_classifier.apply();
+        fwd_type_counter.count((bit<32>)fabric_md.bridged.base.fwd_type);
+    }
+}
+
+control Forwarding(inout ingress_headers_t hdr, inout fabric_ingress_metadata_t fabric_md, inout standard_metadata_t standard_md, inout bit<1> drop_ctl) {
+    action set_int_drop_reason(bit<8> drop_reason) {
+        fabric_md.bridged.int_bmd.drop_reason = (IntDropReason_t)drop_reason;
+    }
+    @hidden action set_next_id(next_id_t next_id) {
+        fabric_md.next_id = next_id;
+    }
+    direct_counter(CounterType.packets_and_bytes) bridging_counter;
+    action set_next_id_bridging(next_id_t next_id) {
+        set_next_id(next_id);
+        bridging_counter.count();
+    }
+    table bridging {
+        key = {
+            fabric_md.bridged.base.vlan_id: exact @name("vlan_id") ;
+            hdr.ethernet.dst_addr         : ternary @name("eth_dst") ;
+        }
+        actions = {
+            set_next_id_bridging;
+            @defaultonly set_int_drop_reason;
+        }
+        const default_action = set_int_drop_reason(IntDropReason_t.DROP_REASON_BRIDGING_MISS);
+        counters = bridging_counter;
+        size = 1024;
+    }
+    direct_counter(CounterType.packets_and_bytes) mpls_counter;
+    action pop_mpls_and_next(next_id_t next_id) {
+        hdr.mpls.setInvalid();
+        hdr.eth_type.value = fabric_md.bridged.base.ip_eth_type;
+        fabric_md.bridged.base.mpls_label = 0;
+        set_next_id(next_id);
+        mpls_counter.count();
+    }
+    table mpls {
+        key = {
+            fabric_md.bridged.base.mpls_label: exact @name("mpls_label") ;
+        }
+        actions = {
+            pop_mpls_and_next;
+            @defaultonly set_int_drop_reason;
+        }
+        const default_action = set_int_drop_reason(IntDropReason_t.DROP_REASON_MPLS_MISS);
+        counters = mpls_counter;
+        size = 1024;
+    }
+    direct_counter(CounterType.packets_and_bytes) routing_v4_counter;
+    action set_next_id_routing_v4(next_id_t next_id) {
+        set_next_id(next_id);
+        routing_v4_counter.count();
+    }
+    action nop_routing_v4() {
+        routing_v4_counter.count();
+    }
+    action drop_routing_v4() {
+        fabric_md.skip_next = true;
+        routing_v4_counter.count();
+        drop_ctl = 1;
+    }
+    table routing_v4 {
+        key = {
+            fabric_md.routing_ipv4_dst: lpm @name("ipv4_dst") ;
+        }
+        actions = {
+            set_next_id_routing_v4;
+            nop_routing_v4;
+            drop_routing_v4;
+            @defaultonly set_int_drop_reason;
+        }
+        default_action = set_int_drop_reason(IntDropReason_t.DROP_REASON_ROUTING_V4_MISS);
+        counters = routing_v4_counter;
+        size = 1024;
+    }
+    direct_counter(CounterType.packets_and_bytes) routing_v6_counter;
+    action set_next_id_routing_v6(next_id_t next_id) {
+        set_next_id(next_id);
+        routing_v6_counter.count();
+    }
+    action drop_routing_v6() {
+        fabric_md.skip_next = true;
+        routing_v6_counter.count();
+        drop_ctl = 1;
+    }
+    table routing_v6 {
+        key = {
+            hdr.ipv6.dst_addr: lpm @name("ipv6_dst") ;
+        }
+        actions = {
+            set_next_id_routing_v6;
+            drop_routing_v6;
+            @defaultonly set_int_drop_reason;
+        }
+        default_action = set_int_drop_reason(IntDropReason_t.DROP_REASON_ROUTING_V6_MISS);
+        counters = routing_v6_counter;
+        size = 1024;
+    }
+    apply {
+        if (hdr.ethernet.isValid() && fabric_md.bridged.base.fwd_type == FWD_BRIDGING) {
+            bridging.apply();
+        } else if (hdr.mpls.isValid() && fabric_md.bridged.base.fwd_type == FWD_MPLS) {
+            mpls.apply();
+        } else if (fabric_md.lkp.is_ipv4 && (fabric_md.bridged.base.fwd_type == FWD_IPV4_UNICAST || fabric_md.bridged.base.fwd_type == FWD_IPV4_MULTICAST)) {
+            routing_v4.apply();
+        } else if (hdr.ipv6.isValid() && fabric_md.bridged.base.fwd_type == FWD_IPV6_UNICAST) {
+            routing_v6.apply();
+        }
+    }
+}
+
+control LookupMdInit(in ingress_headers_t hdr, out lookup_metadata_t lkp_md) {
+    apply {
+        lkp_md.eth_dst = hdr.ethernet.dst_addr;
+        lkp_md.eth_src = hdr.ethernet.src_addr;
+        lkp_md.eth_type = hdr.eth_type.value;
+        lkp_md.vlan_id = 0;
+        if (hdr.vlan_tag.isValid()) {
+            lkp_md.vlan_id = hdr.vlan_tag.vlan_id;
+        }
+        lkp_md.is_ipv4 = false;
+        lkp_md.ipv4_src = 0;
+        lkp_md.ipv4_dst = 0;
+        lkp_md.ip_proto = 0;
+        lkp_md.l4_sport = 0;
+        lkp_md.l4_dport = 0;
+        lkp_md.icmp_type = 0;
+        lkp_md.icmp_code = 0;
+        if (hdr.inner_ipv4.isValid()) {
+            lkp_md.is_ipv4 = true;
+            lkp_md.ipv4_src = hdr.inner_ipv4.src_addr;
+            lkp_md.ipv4_dst = hdr.inner_ipv4.dst_addr;
+            lkp_md.ip_proto = hdr.inner_ipv4.protocol;
+            if (hdr.inner_tcp.isValid()) {
+                lkp_md.l4_sport = hdr.inner_tcp.sport;
+                lkp_md.l4_dport = hdr.inner_tcp.dport;
+            } else if (hdr.inner_udp.isValid()) {
+                lkp_md.l4_sport = hdr.inner_udp.sport;
+                lkp_md.l4_dport = hdr.inner_udp.dport;
+            } else if (hdr.inner_icmp.isValid()) {
+                lkp_md.icmp_type = hdr.inner_icmp.icmp_type;
+                lkp_md.icmp_code = hdr.inner_icmp.icmp_code;
+            }
+        } else if (hdr.ipv4.isValid()) {
+            lkp_md.is_ipv4 = true;
+            lkp_md.ipv4_src = hdr.ipv4.src_addr;
+            lkp_md.ipv4_dst = hdr.ipv4.dst_addr;
+            lkp_md.ip_proto = hdr.ipv4.protocol;
+            if (hdr.tcp.isValid()) {
+                lkp_md.l4_sport = hdr.tcp.sport;
+                lkp_md.l4_dport = hdr.tcp.dport;
+            } else if (hdr.udp.isValid()) {
+                lkp_md.l4_sport = hdr.udp.sport;
+                lkp_md.l4_dport = hdr.udp.dport;
+            } else if (hdr.icmp.isValid()) {
+                lkp_md.icmp_type = hdr.icmp.icmp_type;
+                lkp_md.icmp_code = hdr.icmp.icmp_code;
+            }
+        }
+    }
+}
+
+control IntWatchlist(inout ingress_headers_t hdr, inout fabric_ingress_metadata_t fabric_md, inout standard_metadata_t standard_md, inout IntReportType_t recirc_preserved_report_type) {
+    direct_counter(CounterType.packets_and_bytes) watchlist_counter;
+    action mark_to_report() {
+        fabric_md.bridged.int_bmd.report_type = INT_REPORT_TYPE_FLOW;
+        recirc_preserved_report_type = INT_REPORT_TYPE_FLOW;
+        watchlist_counter.count();
+    }
+    action no_report() {
+        fabric_md.bridged.int_bmd.report_type = INT_REPORT_TYPE_NO_REPORT;
+        recirc_preserved_report_type = INT_REPORT_TYPE_NO_REPORT;
+    }
+    action no_report_collector() {
+        fabric_md.bridged.int_bmd.report_type = INT_REPORT_TYPE_NO_REPORT;
+    }
+    table watchlist {
+        key = {
+            fabric_md.lkp.is_ipv4 : exact @name("ipv4_valid") ;
+            fabric_md.lkp.ipv4_src: ternary @name("ipv4_src") ;
+            fabric_md.lkp.ipv4_dst: ternary @name("ipv4_dst") ;
+            fabric_md.lkp.ip_proto: ternary @name("ip_proto") ;
+            fabric_md.lkp.l4_sport: range @name("l4_sport") ;
+            fabric_md.lkp.l4_dport: range @name("l4_dport") ;
+        }
+        actions = {
+            mark_to_report;
+            no_report_collector;
+            @defaultonly no_report();
+        }
+        const default_action = no_report();
+        const size = 64;
+        counters = watchlist_counter;
+    }
+    apply {
+        watchlist.apply();
+    }
+}
+
+control IntIngress(inout ingress_headers_t hdr, inout fabric_ingress_metadata_t fabric_md, inout standard_metadata_t standard_md, inout bit<1> drop_ctl) {
+    direct_counter(CounterType.packets_and_bytes) drop_report_counter;
+    @hidden action report_drop() {
+        fabric_md.bridged.bmd_type = BridgedMdType_t.INT_INGRESS_DROP;
+        fabric_md.bridged.int_bmd.report_type = INT_REPORT_TYPE_DROP;
+        fabric_md.bridged.base.vlan_id = DEFAULT_VLAN_ID;
+        fabric_md.bridged.base.mpls_label = 0;
+        drop_ctl = 0;
+        standard_md.egress_spec = FAKE_V1MODEL_RECIRC_PORT;
+        drop_report_counter.count();
+    }
+    @hidden table drop_report {
+        key = {
+            fabric_md.bridged.int_bmd.report_type: exact @name("int_report_type") ;
+            drop_ctl                             : exact @name("drop_ctl") ;
+            fabric_md.punt_to_cpu                : exact @name("punt_to_cpu") ;
+            fabric_md.egress_port_set            : exact @name("egress_port_set") ;
+            standard_md.mcast_grp                : ternary @name("mcast_group_id") ;
+        }
+        actions = {
+            report_drop;
+            @defaultonly nop;
+        }
+        const entries = {
+                        (INT_REPORT_TYPE_FLOW, 1, false, false, default) : report_drop();
+                        (INT_REPORT_TYPE_FLOW, 1, false, true, default) : report_drop();
+                        (INT_REPORT_TYPE_FLOW, 0, false, false, 0) : report_drop();
+        }
+        const default_action = nop();
+        counters = drop_report_counter;
+    }
+    apply {
+        fabric_md.bridged.int_bmd.egress_port = standard_md.egress_spec;
+        fabric_md.bridged.int_bmd.queue_id = 0;
+        drop_report.apply();
+    }
+}
+
+control IntEgress(inout v1model_header_t hdr_v1model, inout fabric_v1model_metadata_t fabric_v1model, inout standard_metadata_t standard_md) {
+    const bit<48> DEFAULT_TIMESTAMP_MASK = 0xffffc0000000;
+    const bit<32> DEFAULT_HOP_LATENCY_MASK = 0xffffff00;
+    egress_headers_t hdr = hdr_v1model.egress;
+    fabric_egress_metadata_t fabric_md = fabric_v1model.egress;
+    direct_counter(CounterType.packets_and_bytes) report_counter;
+    direct_counter(CounterType.packets_and_bytes) int_metadata_counter;
+    QueueId_t egress_qid = 0;
+    @hidden register<bit<32>>(1024) seq_number;
+    @hidden action get_seq_number(in bit<32> seq_number_idx, out bit<32> result) {
+        bit<32> reg = 0;
+        seq_number.read(reg, seq_number_idx);
+        reg = reg + 1;
+        result = reg;
+        seq_number.write(seq_number_idx, reg);
+    }
+    action check_quota() {
+    }
+    action reset_quota() {
+    }
+    table queue_latency_thresholds {
+        key = {
+            egress_qid                         : exact @name("egress_qid") ;
+            fabric_md.int_md.hop_latency[31:16]: range @name("hop_latency_upper") ;
+            fabric_md.int_md.hop_latency[15:0] : range @name("hop_latency_lower") ;
+        }
+        actions = {
+            check_quota;
+            reset_quota;
+            @defaultonly nop;
+        }
+        default_action = nop();
+        const size = 32 * 4;
+    }
+    action set_config(bit<32> hop_latency_mask, bit<48> timestamp_mask) {
+        fabric_md.int_md.hop_latency = fabric_md.int_md.hop_latency & hop_latency_mask;
+        fabric_md.int_md.timestamp = fabric_md.int_md.timestamp & timestamp_mask;
+    }
+    table config {
+        actions = {
+            @defaultonly set_config;
+        }
+        default_action = set_config(DEFAULT_HOP_LATENCY_MASK, DEFAULT_TIMESTAMP_MASK);
+        const size = 1;
+    }
+    @hidden action _report_encap_common(ipv4_addr_t src_ip, ipv4_addr_t mon_ip, l4_port_t mon_port, bit<32> switch_id) {
+        random(hdr.report_ipv4.identification, 0, 0xffff);
+        hdr.report_ipv4.src_addr = src_ip;
+        hdr.report_ipv4.dst_addr = mon_ip;
+        hdr.report_udp.dport = mon_port;
+        get_seq_number((bit<32>)hdr.report_fixed_header.hw_id, hdr.report_fixed_header.seq_no);
+        hdr.report_fixed_header.dqf = fabric_md.int_report_md.report_type;
+        hdr.common_report_header.switch_id = switch_id;
+        hdr.common_report_header.pad1 = 0;
+        hdr.common_report_header.pad2 = 0;
+        hdr.common_report_header.pad3 = 0;
+        hdr.eth_type.value = fabric_md.int_report_md.ip_eth_type;
+        fabric_v1model.int_mirror_type = (bit<3>)FabricMirrorType_t.INVALID;
+        report_counter.count();
+    }
+    action do_local_report_encap(ipv4_addr_t src_ip, ipv4_addr_t mon_ip, l4_port_t mon_port, bit<32> switch_id) {
+        _report_encap_common(src_ip, mon_ip, mon_port, switch_id);
+        hdr.report_eth_type.value = ETHERTYPE_INT_WIP_IPV4;
+        hdr.report_fixed_header.nproto = NPROTO_TELEMETRY_SWITCH_LOCAL_HEADER;
+        hdr.local_report_header.setValid();
+    }
+    action do_local_report_encap_mpls(ipv4_addr_t src_ip, ipv4_addr_t mon_ip, l4_port_t mon_port, mpls_label_t mon_label, bit<32> switch_id) {
+        do_local_report_encap(src_ip, mon_ip, mon_port, switch_id);
+        hdr.report_eth_type.value = ETHERTYPE_INT_WIP_MPLS;
+        hdr.report_mpls.setValid();
+        hdr.report_mpls.tc = 0;
+        hdr.report_mpls.bos = 0;
+        hdr.report_mpls.ttl = DEFAULT_MPLS_TTL;
+        hdr.report_mpls.label = mon_label;
+    }
+    action do_drop_report_encap(ipv4_addr_t src_ip, ipv4_addr_t mon_ip, l4_port_t mon_port, bit<32> switch_id) {
+        _report_encap_common(src_ip, mon_ip, mon_port, switch_id);
+        hdr.report_eth_type.value = ETHERTYPE_INT_WIP_IPV4;
+        hdr.report_fixed_header.nproto = NPROTO_TELEMETRY_DROP_HEADER;
+        hdr.drop_report_header.setValid();
+        hdr.local_report_header.setInvalid();
+        hdr.drop_report_header.drop_reason = fabric_md.bridged.int_bmd.drop_reason;
+    }
+    action do_drop_report_encap_mpls(ipv4_addr_t src_ip, ipv4_addr_t mon_ip, l4_port_t mon_port, mpls_label_t mon_label, bit<32> switch_id) {
+        do_drop_report_encap(src_ip, mon_ip, mon_port, switch_id);
+        hdr.report_eth_type.value = ETHERTYPE_INT_WIP_MPLS;
+        hdr.report_mpls.setValid();
+        hdr.report_mpls.tc = 0;
+        hdr.report_mpls.bos = 0;
+        hdr.report_mpls.ttl = DEFAULT_MPLS_TTL;
+        hdr.report_mpls.label = mon_label;
+        hdr.report_mpls.label = mon_label;
+    }
+    table report {
+        key = {
+            fabric_md.int_report_md.bmd_type   : exact @name("bmd_type") ;
+            fabric_md.int_report_md.mirror_type: exact @name("mirror_type") ;
+            fabric_md.int_report_md.report_type: exact @name("int_report_type") ;
+        }
+        actions = {
+            do_local_report_encap;
+            do_local_report_encap_mpls;
+            do_drop_report_encap;
+            do_drop_report_encap_mpls;
+            @defaultonly nop();
+        }
+        default_action = nop;
+        const size = 6;
+        counters = report_counter;
+    }
+    @hidden action init_int_metadata(bit<3> report_type) {
+        fabric_md.bridged.int_bmd.mirror_session_id = V1MODEL_INT_MIRROR_SESSION;
+        fabric_md.int_report_md.setValid();
+        fabric_v1model.int_mirror_type = (bit<3>)FabricMirrorType_t.INT_REPORT;
+        fabric_md.int_report_md.bmd_type = BridgedMdType_t.EGRESS_MIRROR;
+        fabric_md.int_report_md.mirror_type = FabricMirrorType_t.INT_REPORT;
+        fabric_md.int_report_md.report_type = fabric_md.bridged.int_bmd.report_type;
+        fabric_md.int_report_md.ig_port = fabric_md.bridged.base.ig_port;
+        fabric_md.int_report_md.eg_port = (PortId_t)standard_md.egress_port;
+        fabric_md.int_report_md.queue_id = egress_qid;
+        fabric_md.int_report_md.queue_occupancy = standard_md.deq_qdepth;
+        fabric_md.int_report_md.ig_tstamp = fabric_md.bridged.base.ig_tstamp[31:0];
+        fabric_md.int_report_md.eg_tstamp = standard_md.egress_global_timestamp[31:0];
+        fabric_md.int_report_md.ip_eth_type = fabric_md.bridged.base.ip_eth_type;
+        fabric_md.int_report_md.flow_hash = fabric_md.bridged.base.inner_hash;
+        fabric_md.int_report_md.report_type = report_type;
+        int_metadata_counter.count();
+    }
+    @hidden table int_metadata {
+        key = {
+            fabric_md.bridged.int_bmd.report_type: exact @name("int_report_type") ;
+            fabric_v1model.drop_ctl              : exact @name("drop_ctl") ;
+            fabric_md.int_md.queue_report        : exact @name("queue_report") ;
+        }
+        actions = {
+            init_int_metadata;
+            @defaultonly nop();
+        }
+        const default_action = nop();
+        const entries = {
+                        (INT_REPORT_TYPE_FLOW, 0, false) : init_int_metadata(INT_REPORT_TYPE_FLOW);
+                        (INT_REPORT_TYPE_FLOW, 1, false) : init_int_metadata(INT_REPORT_TYPE_DROP);
+        }
+        counters = int_metadata_counter;
+    }
+    @hidden action adjust_ip_udp_len(bit<16> adjust_ip, bit<16> adjust_udp) {
+        hdr_v1model.ingress.ipv4.total_len = fabric_md.pkt_length + adjust_ip;
+        hdr_v1model.ingress.udp.len = fabric_md.pkt_length + adjust_udp;
+    }
+    @hidden table adjust_int_report_hdr_length {
+        key = {
+            fabric_md.bridged.int_bmd.wip_type: exact @name("is_int_wip") ;
+        }
+        actions = {
+            @defaultonly nop();
+            adjust_ip_udp_len;
+        }
+        const default_action = nop();
+        const entries = {
+                        INT_IS_WIP : adjust_ip_udp_len(INT_WIP_ADJUST_IP_BYTES, INT_WIP_ADJUST_UDP_BYTES);
+                        INT_IS_WIP_WITH_MPLS : adjust_ip_udp_len(INT_WIP_ADJUST_IP_MPLS_BYTES, INT_WIP_ADJUST_UDP_MPLS_BYTES);
+        }
+    }
+    apply {
+        fabric_md.int_md.hop_latency = standard_md.egress_global_timestamp[31:0] - fabric_md.bridged.base.ig_tstamp[31:0];
+        fabric_md.int_md.timestamp = standard_md.egress_global_timestamp;
+        queue_latency_thresholds.apply();
+        config.apply();
+        hdr.report_fixed_header.hw_id = 4w0 ++ standard_md.egress_spec[8:7];
+        if (fabric_md.int_report_md.isValid()) {
+            report.apply();
+        } else {
+            if (int_metadata.apply().hit) {
+                clone_preserving_field_list(CloneType.E2E, (bit<32>)fabric_md.bridged.int_bmd.mirror_session_id, PRESERVE_INT_MD);
+            }
+        }
+        adjust_int_report_hdr_length.apply();
+        fabric_v1model.egress = fabric_md;
+        hdr_v1model.egress = hdr;
+    }
+}
+
+control IntTnaEgressParserEmulator(inout v1model_header_t hdr_v1model, inout fabric_egress_metadata_t fabric_md, inout standard_metadata_t standard_md) {
+    egress_headers_t hdr = hdr_v1model.egress;
+    @hidden action set_common_int_headers() {
+        hdr.report_ethernet.setValid();
+        hdr.report_eth_type.setValid();
+        hdr.report_ipv4.setValid();
+        hdr.report_ipv4.version = 4w4;
+        hdr.report_ipv4.ihl = 4w5;
+        hdr.report_ipv4.dscp = 0;
+        hdr.report_ipv4.ecn = 2w0;
+        hdr.report_ipv4.flags = 0;
+        hdr.report_ipv4.frag_offset = 0;
+        hdr.report_ipv4.ttl = DEFAULT_IPV4_TTL;
+        hdr.report_ipv4.protocol = PROTO_UDP;
+        hdr.report_udp.setValid();
+        hdr.report_udp.sport = 0;
+        hdr.report_fixed_header.setValid();
+        hdr.report_fixed_header.ver = 0;
+        hdr.report_fixed_header.nproto = NPROTO_TELEMETRY_SWITCH_LOCAL_HEADER;
+        hdr.report_fixed_header.rsvd = 0;
+        hdr.common_report_header.setValid();
+    }
+    @hidden action set_common_int_drop_headers() {
+        set_common_int_headers();
+        fabric_md.int_report_md.setValid();
+        fabric_md.int_report_md.ip_eth_type = ETHERTYPE_IPV4;
+        fabric_md.int_report_md.report_type = INT_REPORT_TYPE_DROP;
+        fabric_md.int_report_md.mirror_type = FabricMirrorType_t.INVALID;
+        hdr.drop_report_header.setValid();
+    }
+    @hidden action parse_int_ingress_drop() {
+        set_common_int_drop_headers();
+        fabric_md.int_report_md.bmd_type = BridgedMdType_t.INT_INGRESS_DROP;
+        fabric_md.int_report_md.encap_presence = fabric_md.bridged.base.encap_presence;
+        fabric_md.int_report_md.flow_hash = fabric_md.bridged.base.inner_hash;
+        hdr.drop_report_header.drop_reason = fabric_md.bridged.int_bmd.drop_reason;
+        hdr.report_fixed_header.ig_tstamp = fabric_md.bridged.base.ig_tstamp[31:0];
+        hdr.common_report_header.ig_port = fabric_md.bridged.base.ig_port;
+        hdr.common_report_header.eg_port = 0;
+        hdr.common_report_header.queue_id = 0;
+    }
+    @hidden action parse_int_report_mirror() {
+        set_common_int_headers();
+        fabric_md.bridged.bmd_type = fabric_md.int_report_md.bmd_type;
+        fabric_md.bridged.base.vlan_id = DEFAULT_VLAN_ID;
+        fabric_md.bridged.base.mpls_label = 0;
+        hdr.report_fixed_header.ig_tstamp = fabric_md.int_report_md.ig_tstamp;
+        hdr.common_report_header.ig_port = fabric_md.int_report_md.ig_port;
+        hdr.common_report_header.eg_port = fabric_md.int_report_md.eg_port;
+        hdr.common_report_header.queue_id = fabric_md.int_report_md.queue_id;
+        hdr.local_report_header.setValid();
+        hdr.local_report_header.queue_occupancy = fabric_md.int_report_md.queue_occupancy;
+        hdr.local_report_header.eg_tstamp = fabric_md.int_report_md.eg_tstamp;
+    }
+    apply {
+        fabric_md.is_int_recirc = true;
+        hdr_v1model.ingress.vlan_tag.setInvalid();
+        if (hdr_v1model.ingress.gtpu.isValid() || hdr_v1model.ingress.vxlan.isValid()) {
+            hdr_v1model.ingress.ipv4.setInvalid();
+            hdr_v1model.ingress.tcp.setInvalid();
+            hdr_v1model.ingress.udp.setInvalid();
+            hdr_v1model.ingress.icmp.setInvalid();
+            hdr_v1model.ingress.vxlan.setInvalid();
+            hdr_v1model.ingress.inner_ethernet.setInvalid();
+            hdr_v1model.ingress.inner_eth_type.setInvalid();
+            hdr_v1model.ingress.gtpu.setInvalid();
+            hdr_v1model.ingress.gtpu_options.setInvalid();
+            hdr_v1model.ingress.gtpu_ext_psc.setInvalid();
+        }
+        if ((bit<8>)fabric_md.bridged.int_bmd.report_type == BridgedMdType_t.INT_INGRESS_DROP) {
+            parse_int_ingress_drop();
+            recirculate_preserving_field_list(NO_PRESERVATION);
+        } else {
+            parse_int_report_mirror();
+            recirculate_preserving_field_list(PRESERVE_INT_MD);
+        }
+        hdr_v1model.egress = hdr;
+    }
+}
+
+control FabricIngress(inout v1model_header_t hdr, inout fabric_v1model_metadata_t fabric_md, inout standard_metadata_t standard_md) {
+    LookupMdInit() lkp_md_init;
+    StatsIngress() stats;
+    PacketIoIngress() pkt_io;
+    Filtering() filtering;
+    Forwarding() forwarding;
+    PreNext() pre_next;
+    Acl() acl;
+    Next() next;
+    Hasher() hasher;
+    IngressSliceTcClassifier() slice_tc_classifier;
+    IngressQos() qos;
+    IntWatchlist() int_watchlist;
+    IntIngress() int_ingress;
+    apply {
+        mark_to_drop(standard_md);
+        if (standard_md.parser_error == error.PacketRejectedByParser) {
+            exit;
+        }
+        if (standard_md.instance_type == 4) {
+            fabric_md.ingress.bridged.base.ig_port = FAKE_V1MODEL_RECIRC_PORT;
+        }
+        lkp_md_init.apply(hdr.ingress, fabric_md.ingress.lkp);
+        pkt_io.apply(hdr.ingress, fabric_md.ingress, fabric_md.skip_egress, standard_md, fabric_md.recirc_preserved_egress_port);
+        int_watchlist.apply(hdr.ingress, fabric_md.ingress, standard_md, fabric_md.recirc_preserved_report_type);
+        stats.apply(fabric_md.ingress.lkp, fabric_md.ingress.bridged.base.ig_port, fabric_md.ingress.bridged.base.stats_flow_id);
+        slice_tc_classifier.apply(hdr.ingress, standard_md, fabric_md.ingress);
+        filtering.apply(hdr.ingress, fabric_md.ingress, standard_md);
+        if (!fabric_md.ingress.skip_forwarding) {
+            forwarding.apply(hdr.ingress, fabric_md.ingress, standard_md, fabric_md.drop_ctl);
+        }
+        hasher.apply(hdr.ingress, fabric_md.ingress);
+        if (!fabric_md.ingress.skip_next) {
+            pre_next.apply(hdr.ingress, fabric_md.ingress);
+        }
+        acl.apply(hdr.ingress, fabric_md.ingress, standard_md, fabric_md.recirc_preserved_egress_port, fabric_md.drop_ctl);
+        if (!fabric_md.ingress.skip_next) {
+            next.apply(hdr.ingress, fabric_md.ingress, standard_md, fabric_md.recirc_preserved_egress_port);
+        }
+        qos.apply(fabric_md.ingress, standard_md, fabric_md.drop_ctl);
+        int_ingress.apply(hdr.ingress, fabric_md.ingress, standard_md, fabric_md.drop_ctl);
+        fabric_md.egress.bridged = fabric_md.ingress.bridged;
+        if (fabric_md.drop_ctl == 1) {
+            mark_to_drop(standard_md);
+        }
+    }
+}
+
+control FabricEgress(inout v1model_header_t hdr, inout fabric_v1model_metadata_t fabric_md, inout standard_metadata_t standard_md) {
+    StatsEgress() stats;
+    PacketIoEgress() pkt_io_egress;
+    EgressNextControl() egress_next;
+    EgressDscpRewriter() dscp_rewriter;
+    IntTnaEgressParserEmulator() parser_emulator;
+    IntEgress() int_egress;
+    apply {
+        fabric_md.egress.cpu_port = 0;
+        if (fabric_md.skip_egress) {
+            exit;
+        }
+        if (standard_md.instance_type == 2) {
+            fabric_md.egress.bridged.int_bmd.drop_reason = fabric_md.recirc_preserved_drop_reason;
+            fabric_md.egress.bridged.int_bmd.report_type = fabric_md.recirc_preserved_report_type;
+            parser_emulator.apply(hdr, fabric_md.egress, standard_md);
+        }
+        if ((bit<8>)fabric_md.egress.bridged.int_bmd.report_type == BridgedMdType_t.INT_INGRESS_DROP) {
+            parser_emulator.apply(hdr, fabric_md.egress, standard_md);
+        }
+        pkt_io_egress.apply(hdr.ingress, fabric_md.egress, standard_md, fabric_md.recirc_preserved_ingress_port);
+        stats.apply(fabric_md.egress.bridged.base.stats_flow_id, standard_md.egress_port, fabric_md.egress.bridged.bmd_type);
+        egress_next.apply(hdr.ingress, fabric_md.egress, standard_md, fabric_md.recirc_preserved_drop_reason, fabric_md.drop_ctl);
+        int_egress.apply(hdr, fabric_md, standard_md);
+        dscp_rewriter.apply(fabric_md.egress, standard_md, hdr.ingress);
+        if (fabric_md.do_upf_uplink_recirc) {
+            recirculate_preserving_field_list(NO_PRESERVATION);
+        }
+        if (fabric_md.drop_ctl == 1) {
+            mark_to_drop(standard_md);
+        }
+    }
+}
+
+V1Switch(FabricParser(), FabricVerifyChecksum(), FabricIngress(), FabricEgress(), FabricComputeChecksum(), FabricDeparser()) main;
+
diff --git a/src/tests/p4-int-routing-acl/p4src/bmv2.json b/src/tests/p4-int-routing-acl/p4src/bmv2.json
new file mode 100644
index 0000000000000000000000000000000000000000..80136b953ec822618243c8d325fbfbca201ab7cc
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/p4src/bmv2.json
@@ -0,0 +1,21728 @@
+{
+  "header_types" : [
+    {
+      "name" : "scalars_0",
+      "id" : 0,
+      "fields" : [
+        ["tmp_2", 16, false],
+        ["tmp_4", 1, false],
+        ["tmp_6", 16, false],
+        ["tmp_12", 3, false],
+        ["tmp_13", 8, false],
+        ["gtpu_ext_len_0", 8, false],
+        ["tmp_3", 16, false],
+        ["tmp_5", 16, false],
+        ["tmp_7", 4, false],
+        ["tmp_8", 112, false],
+        ["tmp_9", 112, false],
+        ["tmp_10", 112, false],
+        ["tmp_11", 64, false],
+        ["tmp_14", 32, false],
+        ["tmp_15", 32, false],
+        ["tmp_16", 32, false],
+        ["tmp_17", 32, false],
+        ["tmp_18", 48, false],
+        ["tmp_19", 48, false],
+        ["tmp_20", 16, false],
+        ["tmp_21", 32, false],
+        ["tmp_22", 32, false],
+        ["tmp_23", 8, false],
+        ["tmp_24", 16, false],
+        ["tmp_25", 16, false],
+        ["tmp_26", 32, false],
+        ["qos_packet_color", 2, false],
+        ["tmp_27", 32, false],
+        ["tmp_28", 32, false],
+        ["tmp_29", 32, false],
+        ["tmp_30", 32, false],
+        ["tmp_31", 32, false],
+        ["tmp_32", 32, false],
+        ["tmp_33", 32, false],
+        ["tmp_34", 32, false],
+        ["tmp_35", 32, false],
+        ["dscp_rewriter_tmp_dscp", 6, false],
+        ["int_egress_fabric_md_pkt_length", 16, false],
+        ["int_egress_egress_qid", 5, false],
+        ["int_egress_reg", 32, false],
+        ["key_0", 16, false],
+        ["key_1", 16, false],
+        ["userMetadata._skip_egress0", 1, false],
+        ["userMetadata._do_upf_uplink_recirc1", 1, false],
+        ["userMetadata._drop_ctl2", 1, false],
+        ["userMetadata._int_mirror_type3", 3, false],
+        ["userMetadata._ingress_ecmp_hash5", 32, false],
+        ["userMetadata._ingress_lkp_eth_dst6", 48, false],
+        ["userMetadata._ingress_lkp_eth_src7", 48, false],
+        ["userMetadata._ingress_lkp_eth_type8", 16, false],
+        ["userMetadata._ingress_lkp_vlan_id9", 12, false],
+        ["userMetadata._ingress_lkp_is_ipv410", 1, false],
+        ["userMetadata._ingress_lkp_ipv4_src11", 32, false],
+        ["userMetadata._ingress_lkp_ipv4_dst12", 32, false],
+        ["userMetadata._ingress_lkp_ip_proto13", 8, false],
+        ["userMetadata._ingress_lkp_l4_sport14", 16, false],
+        ["userMetadata._ingress_lkp_l4_dport15", 16, false],
+        ["userMetadata._ingress_lkp_icmp_type16", 8, false],
+        ["userMetadata._ingress_lkp_icmp_code17", 8, false],
+        ["userMetadata._ingress_routing_ipv4_dst18", 32, false],
+        ["userMetadata._ingress_skip_forwarding19", 1, false],
+        ["userMetadata._ingress_skip_next20", 1, false],
+        ["userMetadata._ingress_next_id21", 32, false],
+        ["userMetadata._ingress_egress_port_set22", 1, false],
+        ["userMetadata._ingress_punt_to_cpu23", 1, false],
+        ["userMetadata._ingress_ipv4_checksum_err24", 1, false],
+        ["userMetadata._ingress_inner_ipv4_checksum_err25", 1, false],
+        ["userMetadata._ingress_slice_id26", 4, false],
+        ["userMetadata._ingress_tc27", 2, false],
+        ["userMetadata._ingress_tc_unknown28", 1, false],
+        ["userMetadata._ingress_is_upf_hit29", 1, false],
+        ["userMetadata._ingress_upf_slice_id30", 4, false],
+        ["userMetadata._ingress_upf_tc31", 2, false],
+        ["userMetadata._ingress_upf_meter_color32", 2, false],
+        ["userMetadata._ingress_ig_port_type33", 2, false],
+        ["userMetadata._ingress_mirror_mirror_session_id34", 10, false],
+        ["userMetadata._ingress_mirror_bmd_type35", 8, false],
+        ["userMetadata._egress_cpu_port37", 9, false],
+        ["userMetadata._egress_int_md_hop_latency39", 32, false],
+        ["userMetadata._egress_int_md_timestamp40", 48, false],
+        ["userMetadata._egress_int_md_vlan_stripped41", 1, false],
+        ["userMetadata._egress_int_md_queue_report42", 1, false],
+        ["userMetadata._egress_int_ipv4_len43", 16, false],
+        ["userMetadata._egress_is_int_recirc44", 1, false],
+        ["userMetadata._egress_pkt_length45", 16, false],
+        ["userMetadata._recirc_preserved_report_type46", 3, false],
+        ["userMetadata._recirc_preserved_egress_port47", 9, false],
+        ["userMetadata._recirc_preserved_drop_reason48", 8, false],
+        ["userMetadata._recirc_preserved_ingress_port49", 9, false],
+        ["_padding_1", 5, false]
+      ]
+    },
+    {
+      "name" : "fake_ethernet_t",
+      "id" : 1,
+      "fields" : [
+        ["_pad0", 48, false],
+        ["_pad1", 48, false],
+        ["ether_type", 16, false]
+      ]
+    },
+    {
+      "name" : "packet_out_header_t",
+      "id" : 2,
+      "fields" : [
+        ["pad0", 7, false],
+        ["egress_port", 9, false],
+        ["pad1", 3, false],
+        ["queue_id", 5, false],
+        ["pad2", 5, false],
+        ["cpu_loopback_mode", 2, false],
+        ["do_forwarding", 1, false],
+        ["pad3", 16, false],
+        ["pad4", 48, false],
+        ["ether_type", 16, false]
+      ]
+    },
+    {
+      "name" : "gtpu_t",
+      "id" : 3,
+      "fields" : [
+        ["version", 3, false],
+        ["pt", 1, false],
+        ["spare", 1, false],
+        ["ex_flag", 1, false],
+        ["seq_flag", 1, false],
+        ["npdu_flag", 1, false],
+        ["msgtype", 8, false],
+        ["msglen", 16, false],
+        ["teid", 32, false]
+      ]
+    },
+    {
+      "name" : "ethernet_t",
+      "id" : 4,
+      "fields" : [
+        ["dst_addr", 48, false],
+        ["src_addr", 48, false]
+      ]
+    },
+    {
+      "name" : "eth_type_t",
+      "id" : 5,
+      "fields" : [
+        ["value", 16, false]
+      ]
+    },
+    {
+      "name" : "ipv4_t",
+      "id" : 6,
+      "fields" : [
+        ["version", 4, false],
+        ["ihl", 4, false],
+        ["dscp", 6, false],
+        ["ecn", 2, false],
+        ["total_len", 16, false],
+        ["identification", 16, false],
+        ["flags", 3, false],
+        ["frag_offset", 13, false],
+        ["ttl", 8, false],
+        ["protocol", 8, false],
+        ["hdr_checksum", 16, false],
+        ["src_addr", 32, false],
+        ["dst_addr", 32, false]
+      ]
+    },
+    {
+      "name" : "udp_t",
+      "id" : 7,
+      "fields" : [
+        ["sport", 16, false],
+        ["dport", 16, false],
+        ["len", 16, false],
+        ["checksum", 16, false]
+      ]
+    },
+    {
+      "name" : "report_fixed_header_t",
+      "id" : 8,
+      "fields" : [
+        ["ver", 4, false],
+        ["nproto", 4, false],
+        ["dqf", 3, false],
+        ["rsvd", 15, false],
+        ["hw_id", 6, false],
+        ["seq_no", 32, false],
+        ["ig_tstamp", 32, false]
+      ]
+    },
+    {
+      "name" : "common_report_header_t",
+      "id" : 9,
+      "fields" : [
+        ["switch_id", 32, false],
+        ["pad1", 7, false],
+        ["ig_port", 9, false],
+        ["pad2", 7, false],
+        ["eg_port", 9, false],
+        ["pad3", 3, false],
+        ["queue_id", 5, false]
+      ]
+    },
+    {
+      "name" : "local_report_header_t",
+      "id" : 10,
+      "fields" : [
+        ["pad1", 5, false],
+        ["queue_occupancy", 19, false],
+        ["eg_tstamp", 32, false]
+      ]
+    },
+    {
+      "name" : "drop_report_header_t",
+      "id" : 11,
+      "fields" : [
+        ["drop_reason", 8, false],
+        ["pad", 16, false]
+      ]
+    },
+    {
+      "name" : "mpls_t",
+      "id" : 12,
+      "fields" : [
+        ["label", 20, false],
+        ["tc", 3, false],
+        ["bos", 1, false],
+        ["ttl", 8, false]
+      ]
+    },
+    {
+      "name" : "bridged_metadata_t",
+      "id" : 13,
+      "fields" : [
+        ["_bmd_type0", 8, false],
+        ["_base_inner_hash1", 32, false],
+        ["_base_mpls_label2", 20, false],
+        ["_base_ig_port3", 9, false],
+        ["_base_is_multicast4", 1, 0],
+        ["_base_fwd_type5", 3, false],
+        ["_base_vlan_id6", 12, false],
+        ["_base_encap_presence7", 2, false],
+        ["_base_mpls_ttl8", 8, false],
+        ["_base_ig_tstamp9", 48, false],
+        ["_base_ip_eth_type10", 16, false],
+        ["_base_stats_flow_id11", 10, false],
+        ["_base_slice_tc12", 6, false],
+        ["_int_bmd_report_type13", 3, false],
+        ["_int_bmd_mirror_session_id14", 10, false],
+        ["_int_bmd_drop_reason15", 8, false],
+        ["_int_bmd_queue_id16", 5, false],
+        ["_int_bmd_egress_port17", 9, false],
+        ["_int_bmd_wip_type18", 8, false],
+        ["__pad019", 1, false],
+        ["__pad220", 5, false]
+      ]
+    },
+    {
+      "name" : "int_report_metadata_t",
+      "id" : 14,
+      "fields" : [
+        ["bmd_type", 8, false],
+        ["_pad0", 5, false],
+        ["mirror_type", 3, false],
+        ["_pad1", 7, false],
+        ["ig_port", 9, false],
+        ["_pad2", 7, false],
+        ["eg_port", 9, false],
+        ["_pad3", 3, false],
+        ["queue_id", 5, false],
+        ["_pad4", 5, false],
+        ["queue_occupancy", 19, false],
+        ["ig_tstamp", 32, false],
+        ["eg_tstamp", 32, false],
+        ["drop_reason", 8, false],
+        ["ip_eth_type", 16, false],
+        ["_pad5", 6, false],
+        ["encap_presence", 2, false],
+        ["report_type", 3, false],
+        ["_pad6", 5, false],
+        ["flow_hash", 32, false]
+      ]
+    },
+    {
+      "name" : "int_metadata_t",
+      "id" : 15,
+      "fields" : [
+        ["hop_latency", 32, false],
+        ["timestamp", 48, false],
+        ["vlan_stripped", 1, 0],
+        ["queue_report", 1, 0],
+        ["_padding", 6, false]
+      ]
+    },
+    {
+      "name" : "standard_metadata",
+      "id" : 16,
+      "fields" : [
+        ["ingress_port", 9, false],
+        ["egress_spec", 9, false],
+        ["egress_port", 9, false],
+        ["instance_type", 32, false],
+        ["packet_length", 32, false],
+        ["enq_timestamp", 32, false],
+        ["enq_qdepth", 19, false],
+        ["deq_timedelta", 32, false],
+        ["deq_qdepth", 19, false],
+        ["ingress_global_timestamp", 48, false],
+        ["egress_global_timestamp", 48, false],
+        ["mcast_grp", 16, false],
+        ["egress_rid", 16, false],
+        ["checksum_error", 1, false],
+        ["parser_error", 32, false],
+        ["priority", 3, false],
+        ["_padding_0", 3, false]
+      ]
+    },
+    {
+      "name" : "packet_in_header_t",
+      "id" : 17,
+      "fields" : [
+        ["ingress_port", 9, false],
+        ["_pad0", 7, false]
+      ]
+    },
+    {
+      "name" : "vlan_tag_t",
+      "id" : 18,
+      "fields" : [
+        ["eth_type", 16, false],
+        ["pri", 3, false],
+        ["cfi", 1, false],
+        ["vlan_id", 12, false]
+      ]
+    },
+    {
+      "name" : "ipv6_t",
+      "id" : 19,
+      "fields" : [
+        ["version", 4, false],
+        ["traffic_class", 8, false],
+        ["flow_label", 20, false],
+        ["payload_len", 16, false],
+        ["next_hdr", 8, false],
+        ["hop_limit", 8, false],
+        ["src_addr", 128, false],
+        ["dst_addr", 128, false]
+      ]
+    },
+    {
+      "name" : "tcp_t",
+      "id" : 20,
+      "fields" : [
+        ["sport", 16, false],
+        ["dport", 16, false]
+      ]
+    },
+    {
+      "name" : "icmp_t",
+      "id" : 21,
+      "fields" : [
+        ["icmp_type", 8, false],
+        ["icmp_code", 8, false]
+      ]
+    },
+    {
+      "name" : "gtpu_options_t",
+      "id" : 22,
+      "fields" : [
+        ["seq_num", 16, false],
+        ["n_pdu_num", 8, false],
+        ["next_ext", 8, false]
+      ]
+    },
+    {
+      "name" : "gtpu_ext_psc_t",
+      "id" : 23,
+      "fields" : [
+        ["len", 8, false],
+        ["type", 4, false],
+        ["spare0", 4, false],
+        ["ppp", 1, false],
+        ["rqi", 1, false],
+        ["qfi", 6, false],
+        ["next_ext", 8, false]
+      ]
+    },
+    {
+      "name" : "vxlan_t",
+      "id" : 24,
+      "fields" : [
+        ["flags", 8, false],
+        ["reserved", 24, false],
+        ["vni", 24, false],
+        ["reserved_2", 8, false]
+      ]
+    }
+  ],
+  "headers" : [
+    {
+      "name" : "tmp",
+      "id" : 0,
+      "header_type" : "fake_ethernet_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "tmp_0",
+      "id" : 1,
+      "header_type" : "packet_out_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "tmp_1",
+      "id" : 2,
+      "header_type" : "fake_ethernet_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "gtpu_0",
+      "id" : 3,
+      "header_type" : "gtpu_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "parser_emulator_hdr_report_ethernet",
+      "id" : 4,
+      "header_type" : "ethernet_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "parser_emulator_hdr_report_eth_type",
+      "id" : 5,
+      "header_type" : "eth_type_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "parser_emulator_hdr_report_ipv4",
+      "id" : 6,
+      "header_type" : "ipv4_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "parser_emulator_hdr_report_udp",
+      "id" : 7,
+      "header_type" : "udp_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "parser_emulator_hdr_report_fixed_header",
+      "id" : 8,
+      "header_type" : "report_fixed_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "parser_emulator_hdr_common_report_header",
+      "id" : 9,
+      "header_type" : "common_report_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "parser_emulator_hdr_local_report_header",
+      "id" : 10,
+      "header_type" : "local_report_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "parser_emulator_hdr_drop_report_header",
+      "id" : 11,
+      "header_type" : "drop_report_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "int_egress_hdr_report_eth_type",
+      "id" : 12,
+      "header_type" : "eth_type_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "int_egress_hdr_report_mpls",
+      "id" : 13,
+      "header_type" : "mpls_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "int_egress_hdr_report_ipv4",
+      "id" : 14,
+      "header_type" : "ipv4_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "int_egress_hdr_report_udp",
+      "id" : 15,
+      "header_type" : "udp_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "int_egress_hdr_report_fixed_header",
+      "id" : 16,
+      "header_type" : "report_fixed_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "int_egress_hdr_common_report_header",
+      "id" : 17,
+      "header_type" : "common_report_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "int_egress_hdr_local_report_header",
+      "id" : 18,
+      "header_type" : "local_report_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "int_egress_hdr_drop_report_header",
+      "id" : 19,
+      "header_type" : "drop_report_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "int_egress_hdr_eth_type",
+      "id" : 20,
+      "header_type" : "eth_type_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "int_egress_fabric_md_bridged",
+      "id" : 21,
+      "header_type" : "bridged_metadata_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "int_egress_fabric_md_int_report_md",
+      "id" : 22,
+      "header_type" : "int_report_metadata_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "int_egress_fabric_md_int_md",
+      "id" : 23,
+      "header_type" : "int_metadata_t",
+      "metadata" : true,
+      "pi_omit" : true
+    },
+    {
+      "name" : "scalars",
+      "id" : 24,
+      "header_type" : "scalars_0",
+      "metadata" : true,
+      "pi_omit" : true
+    },
+    {
+      "name" : "standard_metadata",
+      "id" : 25,
+      "header_type" : "standard_metadata",
+      "metadata" : true,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_packet_out0",
+      "id" : 26,
+      "header_type" : "packet_out_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_packet_in1",
+      "id" : 27,
+      "header_type" : "packet_in_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_fake_ethernet2",
+      "id" : 28,
+      "header_type" : "fake_ethernet_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_ethernet3",
+      "id" : 29,
+      "header_type" : "ethernet_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_vlan_tag4",
+      "id" : 30,
+      "header_type" : "vlan_tag_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_eth_type5",
+      "id" : 31,
+      "header_type" : "eth_type_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_mpls6",
+      "id" : 32,
+      "header_type" : "mpls_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_ipv47",
+      "id" : 33,
+      "header_type" : "ipv4_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_ipv68",
+      "id" : 34,
+      "header_type" : "ipv6_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_tcp9",
+      "id" : 35,
+      "header_type" : "tcp_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_udp10",
+      "id" : 36,
+      "header_type" : "udp_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_icmp11",
+      "id" : 37,
+      "header_type" : "icmp_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_gtpu12",
+      "id" : 38,
+      "header_type" : "gtpu_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_gtpu_options13",
+      "id" : 39,
+      "header_type" : "gtpu_options_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_gtpu_ext_psc14",
+      "id" : 40,
+      "header_type" : "gtpu_ext_psc_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_vxlan15",
+      "id" : 41,
+      "header_type" : "vxlan_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_inner_ethernet16",
+      "id" : 42,
+      "header_type" : "ethernet_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_inner_eth_type17",
+      "id" : 43,
+      "header_type" : "eth_type_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_inner_ipv418",
+      "id" : 44,
+      "header_type" : "ipv4_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_inner_tcp19",
+      "id" : 45,
+      "header_type" : "tcp_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_inner_udp20",
+      "id" : 46,
+      "header_type" : "udp_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_inner_icmp21",
+      "id" : 47,
+      "header_type" : "icmp_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_packet_in22",
+      "id" : 48,
+      "header_type" : "packet_in_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_fake_ethernet23",
+      "id" : 49,
+      "header_type" : "fake_ethernet_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_report_ethernet24",
+      "id" : 50,
+      "header_type" : "ethernet_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_report_eth_type25",
+      "id" : 51,
+      "header_type" : "eth_type_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_report_mpls26",
+      "id" : 52,
+      "header_type" : "mpls_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_report_ipv427",
+      "id" : 53,
+      "header_type" : "ipv4_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_report_udp28",
+      "id" : 54,
+      "header_type" : "udp_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_report_fixed_header29",
+      "id" : 55,
+      "header_type" : "report_fixed_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_common_report_header30",
+      "id" : 56,
+      "header_type" : "common_report_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_local_report_header31",
+      "id" : 57,
+      "header_type" : "local_report_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_drop_report_header32",
+      "id" : 58,
+      "header_type" : "drop_report_header_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_ethernet33",
+      "id" : 59,
+      "header_type" : "ethernet_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_vlan_tag34",
+      "id" : 60,
+      "header_type" : "vlan_tag_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_eth_type35",
+      "id" : 61,
+      "header_type" : "eth_type_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_mpls36",
+      "id" : 62,
+      "header_type" : "mpls_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_ipv437",
+      "id" : 63,
+      "header_type" : "ipv4_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_ipv638",
+      "id" : 64,
+      "header_type" : "ipv6_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_udp39",
+      "id" : 65,
+      "header_type" : "udp_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_ingress_bridged4",
+      "id" : 66,
+      "header_type" : "bridged_metadata_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_bridged36",
+      "id" : 67,
+      "header_type" : "bridged_metadata_t",
+      "metadata" : false,
+      "pi_omit" : true
+    },
+    {
+      "name" : "_egress_int_report_md38",
+      "id" : 68,
+      "header_type" : "int_report_metadata_t",
+      "metadata" : false,
+      "pi_omit" : true
+    }
+  ],
+  "header_stacks" : [],
+  "header_union_types" : [],
+  "header_unions" : [],
+  "header_union_stacks" : [],
+  "field_lists" : [
+    {
+      "id" : 1,
+      "name" : "field_list241",
+      "elements" : [
+        {
+          "type" : "field",
+          "value" : ["scalars", "userMetadata._recirc_preserved_report_type46"]
+        },
+        {
+          "type" : "field",
+          "value" : ["scalars", "userMetadata._recirc_preserved_egress_port47"]
+        },
+        {
+          "type" : "field",
+          "value" : ["scalars", "userMetadata._recirc_preserved_drop_reason48"]
+        }
+      ]
+    },
+    {
+      "id" : 2,
+      "name" : "field_list231",
+      "elements" : [
+        {
+          "type" : "field",
+          "value" : ["scalars", "userMetadata._recirc_preserved_ingress_port49"]
+        }
+      ]
+    },
+    {
+      "id" : 3,
+      "name" : "empty",
+      "elements" : []
+    },
+    {
+      "id" : 4,
+      "name" : "empty_0",
+      "elements" : []
+    },
+    {
+      "id" : 5,
+      "name" : "empty_1",
+      "elements" : []
+    }
+  ],
+  "errors" : [
+    ["NoError", 1],
+    ["PacketTooShort", 2],
+    ["NoMatch", 3],
+    ["StackOutOfBounds", 4],
+    ["HeaderTooShort", 5],
+    ["ParserTimeout", 6],
+    ["ParserInvalidArgument", 7],
+    ["PacketRejectedByParser", 8]
+  ],
+  "enums" : [],
+  "parsers" : [
+    {
+      "name" : "parser",
+      "id" : 0,
+      "init_state" : "start",
+      "parse_states" : [
+        {
+          "name" : "start",
+          "id" : 0,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "userMetadata._egress_pkt_length45"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "field",
+                            "value" : ["standard_metadata", "packet_length"]
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0x0000ffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "parameters" : [
+                    {
+                      "type" : "header",
+                      "value" : "_ingress_bridged4"
+                    }
+                  ],
+                  "op" : "add_header"
+                }
+              ],
+              "op" : "primitive"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_bmd_type0"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x01"
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_ig_port3"]
+                },
+                {
+                  "type" : "field",
+                  "value" : ["standard_metadata", "ingress_port"]
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "userMetadata._recirc_preserved_ingress_port49"]
+                },
+                {
+                  "type" : "field",
+                  "value" : ["standard_metadata", "ingress_port"]
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_ig_tstamp9"]
+                },
+                {
+                  "type" : "field",
+                  "value" : ["standard_metadata", "ingress_global_timestamp"]
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "userMetadata._ingress_egress_port_set22"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "b2d",
+                      "left" : null,
+                      "right" : {
+                        "type" : "bool",
+                        "value" : false
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "userMetadata._ingress_punt_to_cpu23"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "b2d",
+                      "left" : null,
+                      "right" : {
+                        "type" : "bool",
+                        "value" : false
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_ip_eth_type10"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x0000"
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_int_bmd_drop_reason15"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x00"
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_int_bmd_wip_type18"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x00"
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_encap_presence7"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x00"
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "userMetadata._ingress_upf_meter_color32"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x00"
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "tmp_8"]
+                },
+                {
+                  "type" : "lookahead",
+                  "value" : [0, 112]
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "parameters" : [
+                    {
+                      "type" : "header",
+                      "value" : "tmp"
+                    }
+                  ],
+                  "op" : "add_header"
+                }
+              ],
+              "op" : "primitive"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp", "_pad0"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_8"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x40"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffffffffffff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp", "_pad1"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_8"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x10"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffffffffffff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp", "ether_type"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["scalars", "tmp_8"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "tmp_2"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["scalars", "tmp_8"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0xbf02",
+              "mask" : null,
+              "next_state" : "parse_fake_ethernet"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xbf03",
+              "mask" : null,
+              "next_state" : "parse_fake_ethernet_and_accept"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xbf01",
+              "mask" : null,
+              "next_state" : "check_packet_out"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xbf04",
+              "mask" : null,
+              "next_state" : "parse_int_wip_ipv4"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xbf05",
+              "mask" : null,
+              "next_state" : "parse_int_wip_mpls"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : "parse_ethernet"
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_2"]
+            }
+          ]
+        },
+        {
+          "name" : "check_packet_out",
+          "id" : 1,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "tmp_9"]
+                },
+                {
+                  "type" : "lookahead",
+                  "value" : [0, 112]
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "parameters" : [
+                    {
+                      "type" : "header",
+                      "value" : "tmp_0"
+                    }
+                  ],
+                  "op" : "add_header"
+                }
+              ],
+              "op" : "primitive"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp_0", "pad0"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_9"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x69"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x7f"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp_0", "egress_port"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_9"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x60"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x01ff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp_0", "pad1"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_9"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x5d"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x07"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp_0", "queue_id"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_9"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x58"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x1f"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp_0", "pad2"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_9"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x53"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x1f"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp_0", "cpu_loopback_mode"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_9"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x51"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x03"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp_0", "do_forwarding"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_9"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x50"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x01"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp_0", "pad3"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_9"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x40"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp_0", "pad4"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_9"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x10"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffffffffffff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp_0", "ether_type"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["scalars", "tmp_9"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "tmp_4"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_9"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x50"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x01"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x00",
+              "mask" : null,
+              "next_state" : "parse_packet_out_and_accept"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : "strip_packet_out"
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_4"]
+            }
+          ]
+        },
+        {
+          "name" : "parse_int_wip_ipv4",
+          "id" : 2,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "parameters" : [
+                    {
+                      "type" : "header",
+                      "value" : "_ingress_ethernet3"
+                    }
+                  ],
+                  "op" : "add_header"
+                }
+              ],
+              "op" : "primitive"
+            },
+            {
+              "parameters" : [
+                {
+                  "parameters" : [
+                    {
+                      "type" : "header",
+                      "value" : "_ingress_eth_type5"
+                    }
+                  ],
+                  "op" : "add_header"
+                }
+              ],
+              "op" : "primitive"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_eth_type5", "value"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x0800"
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_int_bmd_wip_type18"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x01"
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_mpls_label2"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x000000"
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_mpls_ttl8"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x41"
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "hexstr",
+                  "value" : "0x00000070"
+                }
+              ],
+              "op" : "advance"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : "parse_ipv4"
+            }
+          ],
+          "transition_key" : []
+        },
+        {
+          "name" : "parse_int_wip_mpls",
+          "id" : 3,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "parameters" : [
+                    {
+                      "type" : "header",
+                      "value" : "_ingress_ethernet3"
+                    }
+                  ],
+                  "op" : "add_header"
+                }
+              ],
+              "op" : "primitive"
+            },
+            {
+              "parameters" : [
+                {
+                  "parameters" : [
+                    {
+                      "type" : "header",
+                      "value" : "_ingress_eth_type5"
+                    }
+                  ],
+                  "op" : "add_header"
+                }
+              ],
+              "op" : "primitive"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_eth_type5", "value"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x8847"
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_int_bmd_wip_type18"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x02"
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "hexstr",
+                  "value" : "0x00000070"
+                }
+              ],
+              "op" : "advance"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : "parse_mpls"
+            }
+          ],
+          "transition_key" : []
+        },
+        {
+          "name" : "parse_packet_out_and_accept",
+          "id" : 4,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_packet_out0"
+                }
+              ],
+              "op" : "extract"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : []
+        },
+        {
+          "name" : "strip_packet_out",
+          "id" : 5,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "hexstr",
+                  "value" : "0x00000070"
+                }
+              ],
+              "op" : "advance"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : "parse_ethernet"
+            }
+          ],
+          "transition_key" : []
+        },
+        {
+          "name" : "parse_fake_ethernet",
+          "id" : 6,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_fake_ethernet2"
+                }
+              ],
+              "op" : "extract"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "tmp_10"]
+                },
+                {
+                  "type" : "lookahead",
+                  "value" : [0, 112]
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "parameters" : [
+                    {
+                      "type" : "header",
+                      "value" : "tmp_1"
+                    }
+                  ],
+                  "op" : "add_header"
+                }
+              ],
+              "op" : "primitive"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp_1", "_pad0"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_10"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x40"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffffffffffff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp_1", "_pad1"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_10"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x10"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffffffffffff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["tmp_1", "ether_type"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["scalars", "tmp_10"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "tmp_6"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["scalars", "tmp_10"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0xbf04",
+              "mask" : null,
+              "next_state" : "parse_int_wip_ipv4"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xbf05",
+              "mask" : null,
+              "next_state" : "parse_int_wip_mpls"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : "parse_ethernet"
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_6"]
+            }
+          ]
+        },
+        {
+          "name" : "parse_fake_ethernet_and_accept",
+          "id" : 7,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_fake_ethernet2"
+                }
+              ],
+              "op" : "extract"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : []
+        },
+        {
+          "name" : "parse_ethernet",
+          "id" : 8,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_ethernet3"
+                }
+              ],
+              "op" : "extract"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "tmp_3"]
+                },
+                {
+                  "type" : "lookahead",
+                  "value" : [0, 16]
+                }
+              ],
+              "op" : "set"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x88a8",
+              "mask" : null,
+              "next_state" : "parse_vlan_tag"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x8100",
+              "mask" : "0xefff",
+              "next_state" : "parse_vlan_tag"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : "parse_untagged"
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_3"]
+            }
+          ]
+        },
+        {
+          "name" : "parse_vlan_tag",
+          "id" : 9,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_vlan_tag4"
+                }
+              ],
+              "op" : "extract"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_vlan_id6"]
+                },
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_vlan_tag4", "vlan_id"]
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "tmp_5"]
+                },
+                {
+                  "type" : "lookahead",
+                  "value" : [0, 16]
+                }
+              ],
+              "op" : "set"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : "parse_eth_type"
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_5"]
+            }
+          ]
+        },
+        {
+          "name" : "parse_untagged",
+          "id" : 10,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_vlan_id6"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x0ffe"
+                }
+              ],
+              "op" : "set"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : "parse_eth_type"
+            }
+          ],
+          "transition_key" : []
+        },
+        {
+          "name" : "parse_eth_type",
+          "id" : 11,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_eth_type5"
+                }
+              ],
+              "op" : "extract"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x8847",
+              "mask" : null,
+              "next_state" : "parse_mpls"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0800",
+              "mask" : null,
+              "next_state" : "parse_non_mpls"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x86dd",
+              "mask" : null,
+              "next_state" : "parse_non_mpls"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_eth_type5", "value"]
+            }
+          ]
+        },
+        {
+          "name" : "parse_mpls",
+          "id" : 12,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_mpls6"
+                }
+              ],
+              "op" : "extract"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_mpls_label2"]
+                },
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_mpls6", "label"]
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_mpls_ttl8"]
+                },
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_mpls6", "ttl"]
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "tmp_7"]
+                },
+                {
+                  "type" : "lookahead",
+                  "value" : [0, 4]
+                }
+              ],
+              "op" : "set"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x04",
+              "mask" : null,
+              "next_state" : "parse_ipv4"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x06",
+              "mask" : null,
+              "next_state" : "parse_ipv6"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : "reject_packet"
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_7"]
+            }
+          ]
+        },
+        {
+          "name" : "reject_packet",
+          "id" : 13,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "bool",
+                  "value" : false
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x8"
+                }
+              ],
+              "op" : "verify"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : []
+        },
+        {
+          "name" : "parse_non_mpls",
+          "id" : 14,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_mpls_label2"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x000000"
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_mpls_ttl8"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x41"
+                }
+              ],
+              "op" : "set"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x0800",
+              "mask" : null,
+              "next_state" : "parse_ipv4"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x86dd",
+              "mask" : null,
+              "next_state" : "parse_ipv6"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_eth_type5", "value"]
+            }
+          ]
+        },
+        {
+          "name" : "parse_ipv4",
+          "id" : 15,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_ipv47"
+                }
+              ],
+              "op" : "extract"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"]
+                },
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_ipv47", "dst_addr"]
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_ip_eth_type10"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x0800"
+                }
+              ],
+              "op" : "set"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x06",
+              "mask" : null,
+              "next_state" : "parse_tcp"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x11",
+              "mask" : null,
+              "next_state" : "parse_udp"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01",
+              "mask" : null,
+              "next_state" : "parse_icmp"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_ipv47", "protocol"]
+            }
+          ]
+        },
+        {
+          "name" : "parse_ipv6",
+          "id" : 16,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_ipv68"
+                }
+              ],
+              "op" : "extract"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_ip_eth_type10"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x86dd"
+                }
+              ],
+              "op" : "set"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x06",
+              "mask" : null,
+              "next_state" : "parse_tcp"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x11",
+              "mask" : null,
+              "next_state" : "parse_udp"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x3a",
+              "mask" : null,
+              "next_state" : "parse_icmp"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_ipv68", "next_hdr"]
+            }
+          ]
+        },
+        {
+          "name" : "parse_icmp",
+          "id" : 17,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_icmp11"
+                }
+              ],
+              "op" : "extract"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : []
+        },
+        {
+          "name" : "parse_tcp",
+          "id" : 18,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_tcp9"
+                }
+              ],
+              "op" : "extract"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : []
+        },
+        {
+          "name" : "parse_udp",
+          "id" : 19,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_udp10"
+                }
+              ],
+              "op" : "extract"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "tmp_11"]
+                },
+                {
+                  "type" : "lookahead",
+                  "value" : [0, 64]
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "parameters" : [
+                    {
+                      "type" : "header",
+                      "value" : "gtpu_0"
+                    }
+                  ],
+                  "op" : "add_header"
+                }
+              ],
+              "op" : "primitive"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["gtpu_0", "version"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_11"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x3d"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x07"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["gtpu_0", "pt"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_11"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x3c"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x01"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["gtpu_0", "spare"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_11"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x3b"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x01"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["gtpu_0", "ex_flag"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_11"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x3a"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x01"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["gtpu_0", "seq_flag"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_11"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x39"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x01"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["gtpu_0", "npdu_flag"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_11"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x38"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x01"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["gtpu_0", "msgtype"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_11"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x30"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["gtpu_0", "msglen"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_11"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x20"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["gtpu_0", "teid"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["scalars", "tmp_11"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffffffff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "tmp_12"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_11"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x3d"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x07"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "tmp_13"]
+                },
+                {
+                  "type" : "expression",
+                  "value" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : ">>",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "tmp_11"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x30"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffffffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xff"
+                      }
+                    }
+                  }
+                }
+              ],
+              "op" : "set"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x086801ff",
+              "mask" : null,
+              "next_state" : "parse_gtpu"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x12b50000",
+              "mask" : "0xffff0000",
+              "next_state" : "parse_vxlan"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_udp10", "dport"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_12"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_13"]
+            }
+          ]
+        },
+        {
+          "name" : "parse_gtpu",
+          "id" : 20,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_gtpu12"
+                }
+              ],
+              "op" : "extract"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x000000",
+              "mask" : null,
+              "next_state" : "set_gtpu_only"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : "parse_gtpu_options"
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_gtpu12", "ex_flag"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_gtpu12", "seq_flag"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_gtpu12", "npdu_flag"]
+            }
+          ]
+        },
+        {
+          "name" : "set_gtpu_only",
+          "id" : 21,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_encap_presence7"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x01"
+                }
+              ],
+              "op" : "set"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : "parse_inner_ipv4"
+            }
+          ],
+          "transition_key" : []
+        },
+        {
+          "name" : "parse_gtpu_options",
+          "id" : 22,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_gtpu_options13"
+                }
+              ],
+              "op" : "extract"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["scalars", "gtpu_ext_len_0"]
+                },
+                {
+                  "type" : "lookahead",
+                  "value" : [0, 8]
+                }
+              ],
+              "op" : "set"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x8501",
+              "mask" : null,
+              "next_state" : "parse_gtpu_ext_psc"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_gtpu_options13", "next_ext"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "gtpu_ext_len_0"]
+            }
+          ]
+        },
+        {
+          "name" : "parse_gtpu_ext_psc",
+          "id" : 23,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_gtpu_ext_psc14"
+                }
+              ],
+              "op" : "extract"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_encap_presence7"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x02"
+                }
+              ],
+              "op" : "set"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x00",
+              "mask" : null,
+              "next_state" : "parse_inner_ipv4"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_gtpu_ext_psc14", "next_ext"]
+            }
+          ]
+        },
+        {
+          "name" : "parse_vxlan",
+          "id" : 24,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_vxlan15"
+                }
+              ],
+              "op" : "extract"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "field",
+                  "value" : ["_ingress_bridged4", "_base_encap_presence7"]
+                },
+                {
+                  "type" : "hexstr",
+                  "value" : "0x03"
+                }
+              ],
+              "op" : "set"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_inner_ethernet16"
+                }
+              ],
+              "op" : "extract"
+            },
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_inner_eth_type17"
+                }
+              ],
+              "op" : "extract"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x0800",
+              "mask" : null,
+              "next_state" : "parse_inner_ipv4"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_inner_eth_type17", "value"]
+            }
+          ]
+        },
+        {
+          "name" : "parse_inner_ipv4",
+          "id" : 25,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_inner_ipv418"
+                }
+              ],
+              "op" : "extract"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x06",
+              "mask" : null,
+              "next_state" : "parse_inner_tcp"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x11",
+              "mask" : null,
+              "next_state" : "parse_inner_udp"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01",
+              "mask" : null,
+              "next_state" : "parse_inner_icmp"
+            },
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_inner_ipv418", "protocol"]
+            }
+          ]
+        },
+        {
+          "name" : "parse_inner_tcp",
+          "id" : 26,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_inner_tcp19"
+                }
+              ],
+              "op" : "extract"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : []
+        },
+        {
+          "name" : "parse_inner_udp",
+          "id" : 27,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_inner_udp20"
+                }
+              ],
+              "op" : "extract"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : []
+        },
+        {
+          "name" : "parse_inner_icmp",
+          "id" : 28,
+          "parser_ops" : [
+            {
+              "parameters" : [
+                {
+                  "type" : "regular",
+                  "value" : "_ingress_inner_icmp21"
+                }
+              ],
+              "op" : "extract"
+            }
+          ],
+          "transitions" : [
+            {
+              "type" : "default",
+              "value" : null,
+              "mask" : null,
+              "next_state" : null
+            }
+          ],
+          "transition_key" : []
+        }
+      ]
+    }
+  ],
+  "parse_vsets" : [],
+  "deparsers" : [
+    {
+      "name" : "deparser",
+      "id" : 0,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/parser.p4",
+        "line" : 321,
+        "column" : 8,
+        "source_fragment" : "FabricDeparser"
+      },
+      "order" : ["_ingress_fake_ethernet2", "_ingress_packet_in1", "_egress_report_ethernet24", "_egress_report_eth_type25", "_egress_report_mpls26", "_egress_report_ipv427", "_egress_report_udp28", "_egress_report_fixed_header29", "_egress_common_report_header30", "_egress_local_report_header31", "_egress_drop_report_header32", "_ingress_ethernet3", "_ingress_vlan_tag4", "_ingress_eth_type5", "_ingress_mpls6", "_ingress_ipv47", "_ingress_ipv68", "_ingress_tcp9", "_ingress_udp10", "_ingress_icmp11", "_ingress_gtpu12", "_ingress_gtpu_options13", "_ingress_gtpu_ext_psc14", "_ingress_vxlan15", "_ingress_inner_ethernet16", "_ingress_inner_eth_type17", "_ingress_inner_ipv418", "_ingress_inner_tcp19", "_ingress_inner_udp20", "_ingress_inner_icmp21"],
+      "primitives" : []
+    }
+  ],
+  "meter_arrays" : [
+    {
+      "name" : "FabricIngress.qos.slice_tc_meter",
+      "id" : 0,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+        "line" : 104,
+        "column" : 41,
+        "source_fragment" : "slice_tc_meter"
+      },
+      "is_direct" : false,
+      "size" : 64,
+      "rate_count" : 2,
+      "type" : "bytes"
+    }
+  ],
+  "counter_arrays" : [
+    {
+      "name" : "FabricIngress.stats.flow_counter",
+      "id" : 0,
+      "is_direct" : true,
+      "binding" : "FabricIngress.stats.flows",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/stats.p4",
+        "line" : 14,
+        "column" : 50,
+        "source_fragment" : "flow_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.filtering.ingress_port_vlan_counter",
+      "id" : 1,
+      "is_direct" : true,
+      "binding" : "FabricIngress.filtering.ingress_port_vlan",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4",
+        "line" : 17,
+        "column" : 50,
+        "source_fragment" : "ingress_port_vlan_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.filtering.fwd_classifier_counter",
+      "id" : 2,
+      "is_direct" : true,
+      "binding" : "FabricIngress.filtering.fwd_classifier",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4",
+        "line" : 71,
+        "column" : 50,
+        "source_fragment" : "fwd_classifier_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.filtering.fwd_type_counter",
+      "id" : 3,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4",
+        "line" : 78,
+        "column" : 46,
+        "source_fragment" : "fwd_type_counter"
+      },
+      "size" : 8,
+      "is_direct" : false
+    },
+    {
+      "name" : "FabricIngress.forwarding.bridging_counter",
+      "id" : 4,
+      "is_direct" : true,
+      "binding" : "FabricIngress.forwarding.bridging",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+        "line" : 29,
+        "column" : 50,
+        "source_fragment" : "bridging_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.forwarding.mpls_counter",
+      "id" : 5,
+      "is_direct" : true,
+      "binding" : "FabricIngress.forwarding.mpls",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+        "line" : 64,
+        "column" : 50,
+        "source_fragment" : "mpls_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.forwarding.routing_v4_counter",
+      "id" : 6,
+      "is_direct" : true,
+      "binding" : "FabricIngress.forwarding.routing_v4",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+        "line" : 98,
+        "column" : 50,
+        "source_fragment" : "routing_v4_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.forwarding.routing_v6_counter",
+      "id" : 7,
+      "is_direct" : true,
+      "binding" : "FabricIngress.forwarding.routing_v6",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+        "line" : 142,
+        "column" : 50,
+        "source_fragment" : "routing_v6_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.pre_next.next_mpls_counter",
+      "id" : 8,
+      "is_direct" : true,
+      "binding" : "FabricIngress.pre_next.next_mpls",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/pre_next.p4",
+        "line" : 15,
+        "column" : 50,
+        "source_fragment" : "next_mpls_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.pre_next.next_vlan_counter",
+      "id" : 9,
+      "is_direct" : true,
+      "binding" : "FabricIngress.pre_next.next_vlan",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/pre_next.p4",
+        "line" : 39,
+        "column" : 50,
+        "source_fragment" : "next_vlan_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.acl.acl_counter",
+      "id" : 10,
+      "is_direct" : true,
+      "binding" : "FabricIngress.acl.acl",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+        "line" : 19,
+        "column" : 50,
+        "source_fragment" : "acl_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.next.simple_counter",
+      "id" : 11,
+      "is_direct" : true,
+      "binding" : "FabricIngress.next.simple",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+        "line" : 76,
+        "column" : 50,
+        "source_fragment" : "simple_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.next.hashed_counter",
+      "id" : 12,
+      "is_direct" : true,
+      "binding" : "FabricIngress.next.hashed",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+        "line" : 115,
+        "column" : 50,
+        "source_fragment" : "hashed_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.next.multicast_counter",
+      "id" : 13,
+      "is_direct" : true,
+      "binding" : "FabricIngress.next.multicast",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+        "line" : 148,
+        "column" : 50,
+        "source_fragment" : "multicast_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.slice_tc_classifier.classifier_stats",
+      "id" : 14,
+      "is_direct" : true,
+      "binding" : "FabricIngress.slice_tc_classifier.classifier",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+        "line" : 20,
+        "column" : 40,
+        "source_fragment" : "classifier_stats"
+      }
+    },
+    {
+      "name" : "FabricIngress.qos.queues_stats",
+      "id" : 15,
+      "is_direct" : true,
+      "binding" : "FabricIngress.qos.queues",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+        "line" : 106,
+        "column" : 40,
+        "source_fragment" : "queues_stats"
+      }
+    },
+    {
+      "name" : "FabricIngress.int_watchlist.watchlist_counter",
+      "id" : 16,
+      "is_direct" : true,
+      "binding" : "FabricIngress.int_watchlist.watchlist",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+        "line" : 15,
+        "column" : 50,
+        "source_fragment" : "watchlist_counter"
+      }
+    },
+    {
+      "name" : "FabricIngress.int_ingress.drop_report_counter",
+      "id" : 17,
+      "is_direct" : true,
+      "binding" : "FabricIngress.int_ingress.drop_report",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+        "line" : 64,
+        "column" : 50,
+        "source_fragment" : "drop_report_counter"
+      }
+    },
+    {
+      "name" : "FabricEgress.stats.flow_counter",
+      "id" : 18,
+      "is_direct" : true,
+      "binding" : "FabricEgress.stats.flows",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/stats.p4",
+        "line" : 47,
+        "column" : 50,
+        "source_fragment" : "flow_counter"
+      }
+    },
+    {
+      "name" : "FabricEgress.egress_next.egress_vlan_counter",
+      "id" : 19,
+      "is_direct" : true,
+      "binding" : "FabricEgress.egress_next.egress_vlan",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+        "line" : 241,
+        "column" : 50,
+        "source_fragment" : "egress_vlan_counter"
+      }
+    },
+    {
+      "name" : "FabricEgress.int_egress.report_counter",
+      "id" : 20,
+      "is_direct" : true,
+      "binding" : "FabricEgress.int_egress.report",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+        "line" : 131,
+        "column" : 50,
+        "source_fragment" : "report_counter"
+      }
+    },
+    {
+      "name" : "FabricEgress.int_egress.int_metadata_counter",
+      "id" : 21,
+      "is_direct" : true,
+      "binding" : "FabricEgress.int_egress.int_metadata",
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+        "line" : 132,
+        "column" : 50,
+        "source_fragment" : "int_metadata_counter"
+      }
+    }
+  ],
+  "register_arrays" : [
+    {
+      "name" : "FabricEgress.int_egress.seq_number",
+      "id" : 0,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+        "line" : 138,
+        "column" : 28,
+        "source_fragment" : "seq_number"
+      },
+      "size" : 1024,
+      "bitwidth" : 32
+    }
+  ],
+  "calculations" : [
+    {
+      "name" : "calc",
+      "id" : 0,
+      "algo" : "crc32",
+      "input" : [
+        {
+          "type" : "field",
+          "value" : ["scalars", "tmp_15"]
+        },
+        {
+          "type" : "field",
+          "value" : ["scalars", "tmp_16"]
+        },
+        {
+          "type" : "field",
+          "value" : ["scalars", "tmp_17"]
+        }
+      ]
+    },
+    {
+      "name" : "calc_0",
+      "id" : 1,
+      "algo" : "crc32",
+      "input" : [
+        {
+          "type" : "field",
+          "value" : ["scalars", "tmp_18"]
+        },
+        {
+          "type" : "field",
+          "value" : ["scalars", "tmp_19"]
+        },
+        {
+          "type" : "field",
+          "value" : ["scalars", "tmp_20"]
+        }
+      ]
+    },
+    {
+      "name" : "calc_1",
+      "id" : 2,
+      "algo" : "crc32",
+      "input" : [
+        {
+          "type" : "field",
+          "value" : ["scalars", "tmp_21"]
+        },
+        {
+          "type" : "field",
+          "value" : ["scalars", "tmp_22"]
+        },
+        {
+          "type" : "field",
+          "value" : ["scalars", "tmp_23"]
+        },
+        {
+          "type" : "field",
+          "value" : ["scalars", "tmp_24"]
+        },
+        {
+          "type" : "field",
+          "value" : ["scalars", "tmp_25"]
+        }
+      ]
+    },
+    {
+      "name" : "calc_2",
+      "id" : 3,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4",
+        "line" : 55,
+        "column" : 8,
+        "source_fragment" : "update_checksum(hdr.ingress.ipv4.isValid(), ..."
+      },
+      "algo" : "csum16",
+      "input" : [
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "version"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "ihl"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "dscp"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "ecn"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "total_len"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "identification"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "flags"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "frag_offset"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "ttl"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "protocol"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "src_addr"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "dst_addr"]
+        }
+      ]
+    },
+    {
+      "name" : "calc_3",
+      "id" : 4,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4",
+        "line" : 73,
+        "column" : 8,
+        "source_fragment" : "update_checksum(hdr.ingress.inner_ipv4.isValid(), ..."
+      },
+      "algo" : "csum16",
+      "input" : [
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "version"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "ihl"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "dscp"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "ecn"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "total_len"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "identification"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "flags"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "frag_offset"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "ttl"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "protocol"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "src_addr"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "dst_addr"]
+        }
+      ]
+    },
+    {
+      "name" : "calc_4",
+      "id" : 5,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4",
+        "line" : 92,
+        "column" : 8,
+        "source_fragment" : "update_checksum(hdr.egress.report_ipv4.isValid(), ..."
+      },
+      "algo" : "csum16",
+      "input" : [
+        {
+          "type" : "field",
+          "value" : ["_egress_report_ipv427", "version"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_egress_report_ipv427", "ihl"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_egress_report_ipv427", "dscp"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_egress_report_ipv427", "ecn"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_egress_report_ipv427", "total_len"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_egress_report_ipv427", "identification"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_egress_report_ipv427", "flags"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_egress_report_ipv427", "frag_offset"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_egress_report_ipv427", "ttl"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_egress_report_ipv427", "protocol"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_egress_report_ipv427", "src_addr"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_egress_report_ipv427", "dst_addr"]
+        }
+      ]
+    },
+    {
+      "name" : "calc_5",
+      "id" : 6,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4",
+        "line" : 13,
+        "column" : 8,
+        "source_fragment" : "verify_checksum(hdr.ingress.ipv4.isValid(), ..."
+      },
+      "algo" : "csum16",
+      "input" : [
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "version"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "ihl"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "dscp"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "ecn"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "total_len"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "identification"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "flags"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "frag_offset"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "ttl"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "protocol"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "src_addr"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_ipv47", "dst_addr"]
+        }
+      ]
+    },
+    {
+      "name" : "calc_6",
+      "id" : 7,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4",
+        "line" : 31,
+        "column" : 8,
+        "source_fragment" : "verify_checksum(hdr.ingress.inner_ipv4.isValid(), ..."
+      },
+      "algo" : "csum16",
+      "input" : [
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "version"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "ihl"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "dscp"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "ecn"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "total_len"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "identification"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "flags"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "frag_offset"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "ttl"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "protocol"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "src_addr"]
+        },
+        {
+          "type" : "field",
+          "value" : ["_ingress_inner_ipv418", "dst_addr"]
+        }
+      ]
+    }
+  ],
+  "learn_lists" : [],
+  "actions" : [
+    {
+      "name" : "nop",
+      "id" : 0,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "nop",
+      "id" : 1,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "nop",
+      "id" : 2,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "nop",
+      "id" : 3,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "nop",
+      "id" : 4,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "nop",
+      "id" : 5,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "NoAction",
+      "id" : 6,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricIngress.stats.count",
+      "id" : 7,
+      "runtime_data" : [
+        {
+          "name" : "flow_id",
+          "bitwidth" : 10
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_stats_flow_id11"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/stats.p4",
+            "line" : 17,
+            "column" : 22,
+            "source_fragment" : "= flow_id; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.pkt_io.do_packet_out",
+      "id" : 8,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["standard_metadata", "egress_spec"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_ingress_packet_out0", "egress_port"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x01ff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 13,
+            "column" : 8,
+            "source_fragment" : "standard_md.egress_spec = (PortId_t)hdr.packet_out.egress_port"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_egress_port47"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_packet_out0", "egress_port"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 14,
+            "column" : 37,
+            "source_fragment" : "= hdr.packet_out.egress_port; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_egress_port_set22"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 15,
+            "column" : 34,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_packet_out0"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 16,
+            "column" : 8,
+            "source_fragment" : "hdr.packet_out.setInvalid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._skip_egress0"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 17,
+            "column" : 20,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_bridged4"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 19,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.setInvalid()"
+          }
+        },
+        {
+          "op" : "exit",
+          "parameters" : [],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 20,
+            "column" : 8,
+            "source_fragment" : "exit"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.filtering.deny",
+      "id" : 9,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_skip_forwarding19"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4",
+            "line" : 22,
+            "column" : 34,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_skip_next20"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4",
+            "line" : 23,
+            "column" : 28,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_ig_port_type33"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 100,
+            "column" : 14,
+            "source_fragment" : "0x0, ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_int_bmd_drop_reason15"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x37"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 250,
+            "column" : 41,
+            "source_fragment" : "55, ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.filtering.permit",
+      "id" : 10,
+      "runtime_data" : [
+        {
+          "name" : "port_type",
+          "bitwidth" : 2
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_ig_port_type33"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4",
+            "line" : 33,
+            "column" : 31,
+            "source_fragment" : "= port_type; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.filtering.permit_with_internal_vlan",
+      "id" : 11,
+      "runtime_data" : [
+        {
+          "name" : "vlan_id",
+          "bitwidth" : 12
+        },
+        {
+          "name" : "port_type",
+          "bitwidth" : 2
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_vlan_id6"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4",
+            "line" : 38,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.base.vlan_id = vlan_id"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_ig_port_type33"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4",
+            "line" : 33,
+            "column" : 31,
+            "source_fragment" : "= port_type; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.filtering.set_forwarding_type",
+      "id" : 12,
+      "runtime_data" : [
+        {
+          "name" : "fwd_type",
+          "bitwidth" : 3
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_fwd_type5"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4",
+            "line" : 74,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.base.fwd_type = fwd_type"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.forwarding.set_int_drop_reason",
+      "id" : 13,
+      "runtime_data" : [
+        {
+          "name" : "drop_reason",
+          "bitwidth" : 8
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_int_bmd_drop_reason15"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "local",
+                    "value" : 0
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 17,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.int_bmd.drop_reason = (IntDropReason_t)drop_reason"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.forwarding.set_int_drop_reason",
+      "id" : 14,
+      "runtime_data" : [
+        {
+          "name" : "drop_reason",
+          "bitwidth" : 8
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_int_bmd_drop_reason15"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "local",
+                    "value" : 0
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 17,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.int_bmd.drop_reason = (IntDropReason_t)drop_reason"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.forwarding.set_int_drop_reason",
+      "id" : 15,
+      "runtime_data" : [
+        {
+          "name" : "drop_reason",
+          "bitwidth" : 8
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_int_bmd_drop_reason15"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "local",
+                    "value" : 0
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 17,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.int_bmd.drop_reason = (IntDropReason_t)drop_reason"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.forwarding.set_int_drop_reason",
+      "id" : 16,
+      "runtime_data" : [
+        {
+          "name" : "drop_reason",
+          "bitwidth" : 8
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_int_bmd_drop_reason15"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "local",
+                    "value" : 0
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 17,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.int_bmd.drop_reason = (IntDropReason_t)drop_reason"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.forwarding.set_next_id_bridging",
+      "id" : 17,
+      "runtime_data" : [
+        {
+          "name" : "next_id",
+          "bitwidth" : 32
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_next_id21"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 23,
+            "column" : 26,
+            "source_fragment" : "= next_id; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.forwarding.pop_mpls_and_next",
+      "id" : 18,
+      "runtime_data" : [
+        {
+          "name" : "next_id",
+          "bitwidth" : 32
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_mpls6"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 67,
+            "column" : 8,
+            "source_fragment" : "hdr.mpls.setInvalid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_eth_type5", "value"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_ip_eth_type10"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 68,
+            "column" : 8,
+            "source_fragment" : "hdr.eth_type.value = fabric_md.bridged"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_mpls_label2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x000000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 69,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.base.mpls_label = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_next_id21"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 23,
+            "column" : 26,
+            "source_fragment" : "= next_id; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.forwarding.set_next_id_routing_v4",
+      "id" : 19,
+      "runtime_data" : [
+        {
+          "name" : "next_id",
+          "bitwidth" : 32
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_next_id21"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 23,
+            "column" : 26,
+            "source_fragment" : "= next_id; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.forwarding.nop_routing_v4",
+      "id" : 20,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricIngress.forwarding.drop_routing_v4",
+      "id" : 21,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_skip_next20"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 111,
+            "column" : 28,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._drop_ctl2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 113,
+            "column" : 17,
+            "source_fragment" : "= 1; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.forwarding.set_next_id_routing_v6",
+      "id" : 22,
+      "runtime_data" : [
+        {
+          "name" : "next_id",
+          "bitwidth" : 32
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_next_id21"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 23,
+            "column" : 26,
+            "source_fragment" : "= next_id; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.forwarding.drop_routing_v6",
+      "id" : 23,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_skip_next20"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 150,
+            "column" : 28,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._drop_ctl2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 152,
+            "column" : 17,
+            "source_fragment" : "= 1; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.pre_next.set_mpls_label",
+      "id" : 24,
+      "runtime_data" : [
+        {
+          "name" : "label",
+          "bitwidth" : 20
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_mpls_label2"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/pre_next.p4",
+            "line" : 18,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.base.mpls_label = label"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.pre_next.set_vlan",
+      "id" : 25,
+      "runtime_data" : [
+        {
+          "name" : "vlan_id",
+          "bitwidth" : 12
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_vlan_id6"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/pre_next.p4",
+            "line" : 42,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.base.vlan_id = vlan_id"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.acl.set_next_id_acl",
+      "id" : 26,
+      "runtime_data" : [
+        {
+          "name" : "next_id",
+          "bitwidth" : 32
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_next_id21"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 22,
+            "column" : 26,
+            "source_fragment" : "= next_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_skip_next20"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : false
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 26,
+            "column" : 28,
+            "source_fragment" : "= false; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._drop_ctl2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 27,
+            "column" : 17,
+            "source_fragment" : "= 0; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.acl.copy_to_cpu",
+      "id" : 27,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "clone_ingress_pkt_to_egress",
+          "parameters" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x000001ff"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x2"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 31,
+            "column" : 8,
+            "source_fragment" : "clone_preserving_field_list(CloneType.I2E, ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.acl.punt_to_cpu",
+      "id" : 28,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "clone_ingress_pkt_to_egress",
+          "parameters" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x000001ff"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x2"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 31,
+            "column" : 8,
+            "source_fragment" : "clone_preserving_field_list(CloneType.I2E, ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_skip_next20"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 40,
+            "column" : 28,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_punt_to_cpu23"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 41,
+            "column" : 30,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._drop_ctl2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 42,
+            "column" : 17,
+            "source_fragment" : "= 1; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.acl.drop",
+      "id" : 29,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._drop_ctl2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 46,
+            "column" : 17,
+            "source_fragment" : "= 1; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_skip_next20"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 47,
+            "column" : 28,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_int_bmd_drop_reason15"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x50"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 252,
+            "column" : 27,
+            "source_fragment" : "80, ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.acl.set_output_port",
+      "id" : 30,
+      "runtime_data" : [
+        {
+          "name" : "port_num",
+          "bitwidth" : 9
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["standard_metadata", "egress_spec"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "local",
+                    "value" : 0
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x01ff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 62,
+            "column" : 8,
+            "source_fragment" : "standard_md.egress_spec = (PortId_t) port_num"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_egress_port47"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 63,
+            "column" : 37,
+            "source_fragment" : "= port_num; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_egress_port_set22"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 64,
+            "column" : 34,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_skip_next20"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 65,
+            "column" : 28,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._drop_ctl2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 66,
+            "column" : 17,
+            "source_fragment" : "= 0; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.acl.nop_acl",
+      "id" : 31,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricIngress.next.output_simple",
+      "id" : 32,
+      "runtime_data" : [
+        {
+          "name" : "port_num",
+          "bitwidth" : 9
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["standard_metadata", "egress_spec"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "local",
+                    "value" : 0
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x01ff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 16,
+            "column" : 8,
+            "source_fragment" : "standard_md.egress_spec = (PortId_t)port_num"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_egress_port47"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 17,
+            "column" : 37,
+            "source_fragment" : "= port_num; // Needed by INT. ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_egress_port_set22"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 18,
+            "column" : 34,
+            "source_fragment" : "= true; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.next.routing_simple",
+      "id" : 33,
+      "runtime_data" : [
+        {
+          "name" : "port_num",
+          "bitwidth" : 9
+        },
+        {
+          "name" : "smac",
+          "bitwidth" : 48
+        },
+        {
+          "name" : "dmac",
+          "bitwidth" : 48
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_ethernet3", "src_addr"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 23,
+            "column" : 8,
+            "source_fragment" : "hdr.ethernet.src_addr = smac; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_ethernet3", "dst_addr"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 2
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 28,
+            "column" : 8,
+            "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["standard_metadata", "egress_spec"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "local",
+                    "value" : 0
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x01ff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 16,
+            "column" : 8,
+            "source_fragment" : "standard_md.egress_spec = (PortId_t)port_num"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_egress_port47"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 17,
+            "column" : 37,
+            "source_fragment" : "= port_num; // Needed by INT. ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_egress_port_set22"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 18,
+            "column" : 34,
+            "source_fragment" : "= true; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.next.output_hashed",
+      "id" : 34,
+      "runtime_data" : [
+        {
+          "name" : "port_num",
+          "bitwidth" : 9
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["standard_metadata", "egress_spec"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "local",
+                    "value" : 0
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x01ff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 16,
+            "column" : 8,
+            "source_fragment" : "standard_md.egress_spec = (PortId_t)port_num"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_egress_port47"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 17,
+            "column" : 37,
+            "source_fragment" : "= port_num; // Needed by INT. ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_egress_port_set22"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 18,
+            "column" : 34,
+            "source_fragment" : "= true; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.next.routing_hashed",
+      "id" : 35,
+      "runtime_data" : [
+        {
+          "name" : "port_num",
+          "bitwidth" : 9
+        },
+        {
+          "name" : "smac",
+          "bitwidth" : 48
+        },
+        {
+          "name" : "dmac",
+          "bitwidth" : 48
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_ethernet3", "src_addr"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 23,
+            "column" : 8,
+            "source_fragment" : "hdr.ethernet.src_addr = smac; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_ethernet3", "dst_addr"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 2
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 28,
+            "column" : 8,
+            "source_fragment" : "hdr.ethernet.dst_addr = dmac; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["standard_metadata", "egress_spec"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "local",
+                    "value" : 0
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x01ff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 16,
+            "column" : 8,
+            "source_fragment" : "standard_md.egress_spec = (PortId_t)port_num"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_egress_port47"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 17,
+            "column" : 37,
+            "source_fragment" : "= port_num; // Needed by INT. ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_egress_port_set22"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 18,
+            "column" : 34,
+            "source_fragment" : "= true; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.next.set_mcast_group_id",
+      "id" : 36,
+      "runtime_data" : [
+        {
+          "name" : "group_id",
+          "bitwidth" : 16
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["standard_metadata", "mcast_grp"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 151,
+            "column" : 8,
+            "source_fragment" : "standard_md.mcast_grp = group_id"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_is_multicast4"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 152,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.base.is_multicast = true"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.next.reset_mcast_group_id",
+      "id" : 37,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["standard_metadata", "mcast_grp"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 157,
+            "column" : 8,
+            "source_fragment" : "standard_md.mcast_grp = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_is_multicast4"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : false
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 158,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.base.is_multicast = false"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.slice_tc_classifier.set_slice_id_tc",
+      "id" : 38,
+      "runtime_data" : [
+        {
+          "name" : "slice_id",
+          "bitwidth" : 4
+        },
+        {
+          "name" : "tc",
+          "bitwidth" : 2
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_slice_id26"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 23,
+            "column" : 27,
+            "source_fragment" : "= slice_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_tc27"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 24,
+            "column" : 21,
+            "source_fragment" : "= tc; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_tc_unknown28"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : false
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 25,
+            "column" : 29,
+            "source_fragment" : "= false; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.slice_tc_classifier.no_classification",
+      "id" : 39,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_slice_id26"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 57,
+            "column" : 36,
+            "source_fragment" : "0; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_tc27"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 58,
+            "column" : 24,
+            "source_fragment" : "0; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_tc_unknown28"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : false
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 25,
+            "column" : 29,
+            "source_fragment" : "= false; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_tc_unknown28"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 31,
+            "column" : 29,
+            "source_fragment" : "= true; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.slice_tc_classifier.trust_dscp",
+      "id" : 40,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_slice_id26"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : ">>",
+                          "left" : {
+                            "type" : "field",
+                            "value" : ["_ingress_ipv47", "dscp"]
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0x2"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x3f"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x0f"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 38,
+            "column" : 27,
+            "source_fragment" : "= hdr.ipv4.dscp[4 +2 -1:2]; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_tc27"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_ingress_ipv47", "dscp"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x03"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 39,
+            "column" : 21,
+            "source_fragment" : "= hdr.ipv4.dscp[2 -1:0]; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_tc_unknown28"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : false
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 40,
+            "column" : 29,
+            "source_fragment" : "= false; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.qos.use_upf",
+      "id" : 41,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_slice_tc12"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "|",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "<<",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : "&",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "userMetadata._ingress_upf_slice_id30"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x3f"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0x2"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x3f"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "field",
+                            "value" : ["scalars", "userMetadata._ingress_upf_tc31"]
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0x3f"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x07"
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 81,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.base.slice_tc = fabric_md.upf_slice_id++fabric_md.upf_tc"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.qos.use_default",
+      "id" : 42,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_slice_tc12"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "|",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "<<",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : "&",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["scalars", "userMetadata._ingress_slice_id26"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x3f"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0x2"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x3f"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "field",
+                            "value" : ["scalars", "userMetadata._ingress_tc27"]
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0x3f"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x07"
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 86,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.base.slice_tc = fabric_md.slice_id++fabric_md.tc"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.qos.set_queue",
+      "id" : 43,
+      "runtime_data" : [
+        {
+          "name" : "qid",
+          "bitwidth" : 5
+        }
+      ],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricIngress.qos.meter_drop",
+      "id" : 44,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._drop_ctl2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 115,
+            "column" : 17,
+            "source_fragment" : "= 1; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_int_bmd_drop_reason15"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xa0"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 269,
+            "column" : 36,
+            "source_fragment" : "160, ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.qos.set_default_tc",
+      "id" : 45,
+      "runtime_data" : [
+        {
+          "name" : "tc",
+          "bitwidth" : 2
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_slice_tc12"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "|",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "<<",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : "&",
+                              "left" : {
+                                "type" : "expression",
+                                "value" : {
+                                  "op" : "&",
+                                  "left" : {
+                                    "type" : "expression",
+                                    "value" : {
+                                      "op" : "&",
+                                      "left" : {
+                                        "type" : "expression",
+                                        "value" : {
+                                          "op" : ">>",
+                                          "left" : {
+                                            "type" : "field",
+                                            "value" : ["_ingress_bridged4", "_base_slice_tc12"]
+                                          },
+                                          "right" : {
+                                            "type" : "hexstr",
+                                            "value" : "0x2"
+                                          }
+                                        }
+                                      },
+                                      "right" : {
+                                        "type" : "hexstr",
+                                        "value" : "0x3f"
+                                      }
+                                    }
+                                  },
+                                  "right" : {
+                                    "type" : "hexstr",
+                                    "value" : "0x0f"
+                                  }
+                                }
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x3f"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0x2"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x3f"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "local",
+                            "value" : 0
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0x3f"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x07"
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 146,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.base.slice_tc = fabric_md.bridged.base.slice_tc[4 +2 -1:2]++tc"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.int_watchlist.mark_to_report",
+      "id" : 46,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_int_bmd_report_type13"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 223,
+            "column" : 45,
+            "source_fragment" : "1; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_report_type46"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 223,
+            "column" : 45,
+            "source_fragment" : "1; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.int_watchlist.no_report",
+      "id" : 47,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_int_bmd_report_type13"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 219,
+            "column" : 50,
+            "source_fragment" : "0; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_report_type46"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 219,
+            "column" : 50,
+            "source_fragment" : "0; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.int_watchlist.no_report_collector",
+      "id" : 48,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_int_bmd_report_type13"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 219,
+            "column" : 50,
+            "source_fragment" : "0; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricIngress.int_ingress.report_drop",
+      "id" : 49,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_bmd_type0"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x04"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 169,
+            "column" : 23,
+            "source_fragment" : "4, ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_int_bmd_report_type13"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x04"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 221,
+            "column" : 45,
+            "source_fragment" : "4; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_vlan_id6"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0ffe"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 147,
+            "column" : 34,
+            "source_fragment" : "12w4094; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_mpls_label2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x000000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 71,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.base.mpls_label = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._drop_ctl2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 79,
+            "column" : 17,
+            "source_fragment" : "= 0; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["standard_metadata", "egress_spec"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01fe"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4",
+            "line" : 36,
+            "column" : 42,
+            "source_fragment" : "510; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "fabric_v1model64",
+      "id" : 50,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "exit",
+          "parameters" : [],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 64,
+            "column" : 12,
+            "source_fragment" : "exit"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "fabric_v1model61",
+      "id" : 51,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "mark_to_drop",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "standard_metadata"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 61,
+            "column" : 8,
+            "source_fragment" : "mark_to_drop(standard_md)"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "fabric_v1model70",
+      "id" : 52,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_ig_port3"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01fe"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4",
+            "line" : 36,
+            "column" : 42,
+            "source_fragment" : "510; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "lookup_md_init21",
+      "id" : 53,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_vlan_id9"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_vlan_tag4", "vlan_id"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 21,
+            "column" : 27,
+            "source_fragment" : "= hdr.vlan_tag.vlan_id; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "lookup_md_init15",
+      "id" : 54,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_eth_dst6"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_ethernet3", "dst_addr"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 15,
+            "column" : 23,
+            "source_fragment" : "= hdr.ethernet.dst_addr; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_eth_src7"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_ethernet3", "src_addr"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 16,
+            "column" : 23,
+            "source_fragment" : "= hdr.ethernet.src_addr; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_eth_type8"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_eth_type5", "value"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 17,
+            "column" : 24,
+            "source_fragment" : "= hdr.eth_type.value; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_vlan_id9"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 19,
+            "column" : 23,
+            "source_fragment" : "= 0; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "lookup_md_init38",
+      "id" : 55,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_inner_tcp19", "sport"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 38,
+            "column" : 32,
+            "source_fragment" : "= hdr.inner_tcp.sport; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_l4_dport15"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_inner_tcp19", "dport"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 39,
+            "column" : 32,
+            "source_fragment" : "= hdr.inner_tcp.dport; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "lookup_md_init41",
+      "id" : 56,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_inner_udp20", "sport"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 41,
+            "column" : 32,
+            "source_fragment" : "= hdr.inner_udp.sport; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_l4_dport15"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_inner_udp20", "dport"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 42,
+            "column" : 32,
+            "source_fragment" : "= hdr.inner_udp.dport; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "lookup_md_init44",
+      "id" : 57,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_icmp_type16"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_inner_icmp21", "icmp_type"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 44,
+            "column" : 33,
+            "source_fragment" : "= hdr.inner_icmp.icmp_type; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_icmp_code17"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_inner_icmp21", "icmp_code"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 45,
+            "column" : 33,
+            "source_fragment" : "= hdr.inner_icmp.icmp_code; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "lookup_md_init33",
+      "id" : 58,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_is_ipv410"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 33,
+            "column" : 27,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_inner_ipv418", "src_addr"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 34,
+            "column" : 28,
+            "source_fragment" : "= hdr.inner_ipv4.src_addr; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_dst12"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_inner_ipv418", "dst_addr"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 35,
+            "column" : 28,
+            "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_inner_ipv418", "protocol"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 36,
+            "column" : 28,
+            "source_fragment" : "= hdr.inner_ipv4.protocol; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "lookup_md_init53",
+      "id" : 59,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_tcp9", "sport"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 53,
+            "column" : 32,
+            "source_fragment" : "= hdr.tcp.sport; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_l4_dport15"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_tcp9", "dport"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 54,
+            "column" : 32,
+            "source_fragment" : "= hdr.tcp.dport; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "lookup_md_init56",
+      "id" : 60,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_udp10", "sport"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 56,
+            "column" : 32,
+            "source_fragment" : "= hdr.udp.sport; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_l4_dport15"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_udp10", "dport"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 57,
+            "column" : 32,
+            "source_fragment" : "= hdr.udp.dport; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "lookup_md_init59",
+      "id" : 61,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_icmp_type16"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_icmp11", "icmp_type"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 59,
+            "column" : 33,
+            "source_fragment" : "= hdr.icmp.icmp_type; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_icmp_code17"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_icmp11", "icmp_code"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 60,
+            "column" : 33,
+            "source_fragment" : "= hdr.icmp.icmp_code; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "lookup_md_init48",
+      "id" : 62,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_is_ipv410"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 48,
+            "column" : 27,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_ipv47", "src_addr"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 49,
+            "column" : 28,
+            "source_fragment" : "= hdr.ipv4.src_addr; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_dst12"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_ipv47", "dst_addr"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 50,
+            "column" : 28,
+            "source_fragment" : "= hdr.ipv4.dst_addr; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_ipv47", "protocol"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 51,
+            "column" : 28,
+            "source_fragment" : "= hdr.ipv4.protocol; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "lookup_md_init24",
+      "id" : 63,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_is_ipv410"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : false
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 24,
+            "column" : 23,
+            "source_fragment" : "= false; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00000000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 25,
+            "column" : 24,
+            "source_fragment" : "= 0; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_dst12"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00000000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 26,
+            "column" : 24,
+            "source_fragment" : "= 0; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 27,
+            "column" : 24,
+            "source_fragment" : "= 0; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 28,
+            "column" : 24,
+            "source_fragment" : "= 0; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_l4_dport15"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 29,
+            "column" : 24,
+            "source_fragment" : "= 0; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_icmp_type16"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 30,
+            "column" : 25,
+            "source_fragment" : "= 0; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_icmp_code17"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 31,
+            "column" : 25,
+            "source_fragment" : "= 0; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "filtering100",
+      "id" : 64,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_14"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_ingress_bridged4", "_base_fwd_type5"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4",
+            "line" : 100,
+            "column" : 31,
+            "source_fragment" : "(bit<32>)fabric_md.bridged.base.fwd_type"
+          }
+        },
+        {
+          "op" : "count",
+          "parameters" : [
+            {
+              "type" : "counter_array",
+              "value" : "FabricIngress.filtering.fwd_type_counter"
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_14"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4",
+            "line" : 100,
+            "column" : 8,
+            "source_fragment" : "fwd_type_counter.count((bit<32>)fabric_md.bridged.base.fwd_type)"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "hasher39",
+      "id" : 65,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_15"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_ipv47", "src_addr"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 43,
+            "column" : 17,
+            "source_fragment" : "hdr.ipv4.src_addr"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_16"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_ipv47", "dst_addr"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 43,
+            "column" : 36,
+            "source_fragment" : "hdr.ipv4.dst_addr"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_17"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_gtpu12", "teid"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 43,
+            "column" : 55,
+            "source_fragment" : "hdr.gtpu.teid"
+          }
+        },
+        {
+          "op" : "modify_field_with_hash_based_offset",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_ecmp_hash5"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00000000"
+            },
+            {
+              "type" : "calculation",
+              "value" : "calc"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xffffffff"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 39,
+            "column" : 12,
+            "source_fragment" : "hash( ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "hasher50",
+      "id" : 66,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_ecmp_hash5"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_inner_hash1"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 50,
+            "column" : 32,
+            "source_fragment" : "= fabric_md.bridged.base.inner_hash; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "hasher66",
+      "id" : 67,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_inner_hash1"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00000000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 66,
+            "column" : 12,
+            "source_fragment" : "fabric_md.bridged.base.inner_hash = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_18"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_ethernet3", "dst_addr"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 71,
+            "column" : 17,
+            "source_fragment" : "hdr.ethernet.dst_addr"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_19"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_ethernet3", "src_addr"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 71,
+            "column" : 40,
+            "source_fragment" : "hdr.ethernet.src_addr"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_20"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_ingress_eth_type5", "value"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 71,
+            "column" : 63,
+            "source_fragment" : "hdr.eth_type.value"
+          }
+        },
+        {
+          "op" : "modify_field_with_hash_based_offset",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_ecmp_hash5"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00000000"
+            },
+            {
+              "type" : "calculation",
+              "value" : "calc_0"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xffffffff"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 67,
+            "column" : 12,
+            "source_fragment" : "hash( ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "hasher17",
+      "id" : 68,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_21"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 91,
+            "column" : 34,
+            "source_fragment" : "fabric_md"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_22"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_dst12"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 91,
+            "column" : 34,
+            "source_fragment" : "fabric_md"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_23"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 91,
+            "column" : 34,
+            "source_fragment" : "fabric_md"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_24"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 91,
+            "column" : 34,
+            "source_fragment" : "fabric_md"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_25"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._ingress_lkp_l4_dport15"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 91,
+            "column" : 34,
+            "source_fragment" : "fabric_md"
+          }
+        },
+        {
+          "op" : "modify_field_with_hash_based_offset",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_base_inner_hash1"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00000000"
+            },
+            {
+              "type" : "calculation",
+              "value" : "calc_1"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xffffffff"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 17,
+            "column" : 8,
+            "source_fragment" : "hash( ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "slicing174",
+      "id" : 69,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_26"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_ingress_bridged4", "_base_slice_tc12"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 174,
+            "column" : 41,
+            "source_fragment" : "(bit<32>) fabric_md.bridged.base.slice_tc"
+          }
+        },
+        {
+          "op" : "execute_meter",
+          "parameters" : [
+            {
+              "type" : "meter_array",
+              "value" : "FabricIngress.qos.slice_tc_meter"
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_26"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "qos_packet_color"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 174,
+            "column" : 12,
+            "source_fragment" : "slice_tc_meter.execute_meter((bit<32>) fabric_md.bridged.base.slice_tc, packet_color)"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "slicing177",
+      "id" : 70,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "qos_packet_color"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x02"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4",
+            "line" : 25,
+            "column" : 10,
+            "source_fragment" : "2 ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "int112",
+      "id" : 71,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_int_bmd_egress_port17"]
+            },
+            {
+              "type" : "field",
+              "value" : ["standard_metadata", "egress_spec"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 112,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.int_bmd.egress_port = standard_md.egress_spec"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_bridged4", "_int_bmd_queue_id16"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 113,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.int_bmd.queue_id = 0"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "fabric_v1model110",
+      "id" : 72,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "mark_to_drop",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "standard_metadata"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 110,
+            "column" : 12,
+            "source_fragment" : "mark_to_drop(standard_md)"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "fabric_v1model106",
+      "id" : 73,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_bridged36"
+            },
+            {
+              "type" : "header",
+              "value" : "_ingress_bridged4"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 106,
+            "column" : 8,
+            "source_fragment" : "fabric_md.egress.bridged = fabric_md"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "nop",
+      "id" : 74,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "nop",
+      "id" : 75,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "nop",
+      "id" : 76,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "nop",
+      "id" : 77,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "nop",
+      "id" : 78,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "nop",
+      "id" : 79,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricEgress.stats.count",
+      "id" : 80,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricEgress.pkt_io_egress.set_switch_info",
+      "id" : 81,
+      "runtime_data" : [
+        {
+          "name" : "cpu_port",
+          "bitwidth" : 9
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._egress_cpu_port37"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "local",
+                    "value" : 0
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x01ff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 36,
+            "column" : 27,
+            "source_fragment" : "= (PortId_t)cpu_port; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.egress_next.pop_mpls_if_present",
+      "id" : 82,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_mpls6"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 198,
+            "column" : 8,
+            "source_fragment" : "hdr.mpls.setInvalid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_eth_type5", "value"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_ip_eth_type10"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 200,
+            "column" : 8,
+            "source_fragment" : "hdr.eth_type.value = fabric_md.bridged"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.egress_next.set_mpls",
+      "id" : 83,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_mpls6"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 205,
+            "column" : 8,
+            "source_fragment" : "hdr.mpls.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_mpls6", "label"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_mpls_label2"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 206,
+            "column" : 8,
+            "source_fragment" : "hdr.mpls.label = fabric_md.bridged"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_mpls6", "tc"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 207,
+            "column" : 8,
+            "source_fragment" : "hdr.mpls.tc = 3w0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_mpls6", "bos"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 208,
+            "column" : 8,
+            "source_fragment" : "hdr.mpls.bos = 1w1"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_mpls6", "ttl"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_mpls_ttl8"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 209,
+            "column" : 8,
+            "source_fragment" : "hdr.mpls.ttl = fabric_md.bridged"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_eth_type5", "value"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x8847"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 112,
+            "column" : 31,
+            "source_fragment" : "0x8847; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.egress_next.push_vlan",
+      "id" : 84,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_vlan_tag4"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 217,
+            "column" : 8,
+            "source_fragment" : "hdr.vlan_tag.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_vlan_tag4", "eth_type"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x8100"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 111,
+            "column" : 31,
+            "source_fragment" : "0x8100; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_vlan_tag4", "vlan_id"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_vlan_id6"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 221,
+            "column" : 8,
+            "source_fragment" : "hdr.vlan_tag.vlan_id = fabric_md.bridged"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.egress_next.pop_vlan",
+      "id" : 85,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_vlan_tag4"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 249,
+            "column" : 8,
+            "source_fragment" : "hdr.vlan_tag.setInvalid()"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.egress_next.drop",
+      "id" : 86,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._drop_ctl2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 254,
+            "column" : 17,
+            "source_fragment" : "= 1; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_drop_reason48"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x82"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 257,
+            "column" : 35,
+            "source_fragment" : "130, ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.dscp_rewriter.rewrite",
+      "id" : 87,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricEgress.dscp_rewriter.clear",
+      "id" : 88,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "dscp_rewriter_tmp_dscp"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 198,
+            "column" : 8,
+            "source_fragment" : "tmp_dscp = 0"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.parser_emulator.parse_int_ingress_drop",
+      "id" : 89,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ethernet"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 20,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ethernet.setValid()"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_eth_type"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 25,
+            "column" : 8,
+            "source_fragment" : "hdr.report_eth_type.setValid()"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ipv4"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 37,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "version"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x04"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 38,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.version = 4w4"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "ihl"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x05"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 39,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.ihl = 4w5"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "dscp"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 40,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.dscp = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "ecn"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 41,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.ecn = 2w0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "flags"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 44,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.flags = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "frag_offset"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 45,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.frag_offset = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "ttl"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x40"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 150,
+            "column" : 32,
+            "source_fragment" : "64; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "protocol"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x11"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 134,
+            "column" : 25,
+            "source_fragment" : "17; ..."
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_udp"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 53,
+            "column" : 8,
+            "source_fragment" : "hdr.report_udp.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_udp", "sport"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 54,
+            "column" : 8,
+            "source_fragment" : "hdr.report_udp.sport = 0"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_fixed_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 60,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "ver"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 61,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.ver = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "nproto"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x02"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 203,
+            "column" : 52,
+            "source_fragment" : "2; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "rsvd"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 66,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.rsvd = 0"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_common_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 71,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.setValid()"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_int_report_md38"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 79,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "ip_eth_type"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0800"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 114,
+            "column" : 31,
+            "source_fragment" : "0x0800; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "report_type"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x04"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 221,
+            "column" : 45,
+            "source_fragment" : "4; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "mirror_type"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 178,
+            "column" : 14,
+            "source_fragment" : "0, ..."
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_drop_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 85,
+            "column" : 8,
+            "source_fragment" : "hdr.drop_report_header.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "bmd_type"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x04"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 169,
+            "column" : 23,
+            "source_fragment" : "4, ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "encap_presence"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_encap_presence7"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 93,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.encap_presence = fabric_md.bridged"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "flow_hash"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_inner_hash1"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 94,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.flow_hash = fabric_md.bridged"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_drop_report_header", "drop_reason"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_int_bmd_drop_reason15"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 97,
+            "column" : 8,
+            "source_fragment" : "hdr.drop_report_header.drop_reason = fabric_md.bridged"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "ig_tstamp"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_egress_bridged36", "_base_ig_tstamp9"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 99,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.ig_tstamp = fabric_md.bridged.base.ig_tstamp[31:0]"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_common_report_header", "ig_port"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_ig_port3"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 101,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.ig_port = fabric_md.bridged"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_common_report_header", "eg_port"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 102,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.eg_port = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_common_report_header", "queue_id"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 103,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.queue_id = 0"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.parser_emulator.parse_int_ingress_drop",
+      "id" : 90,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ethernet"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 20,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ethernet.setValid()"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_eth_type"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 25,
+            "column" : 8,
+            "source_fragment" : "hdr.report_eth_type.setValid()"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ipv4"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 37,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "version"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x04"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 38,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.version = 4w4"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "ihl"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x05"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 39,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.ihl = 4w5"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "dscp"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 40,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.dscp = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "ecn"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 41,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.ecn = 2w0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "flags"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 44,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.flags = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "frag_offset"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 45,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.frag_offset = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "ttl"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x40"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 150,
+            "column" : 32,
+            "source_fragment" : "64; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "protocol"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x11"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 134,
+            "column" : 25,
+            "source_fragment" : "17; ..."
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_udp"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 53,
+            "column" : 8,
+            "source_fragment" : "hdr.report_udp.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_udp", "sport"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 54,
+            "column" : 8,
+            "source_fragment" : "hdr.report_udp.sport = 0"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_fixed_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 60,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "ver"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 61,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.ver = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "nproto"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x02"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 203,
+            "column" : 52,
+            "source_fragment" : "2; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "rsvd"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 66,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.rsvd = 0"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_common_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 71,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.setValid()"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_int_report_md38"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 79,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "ip_eth_type"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0800"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 114,
+            "column" : 31,
+            "source_fragment" : "0x0800; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "report_type"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x04"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 221,
+            "column" : 45,
+            "source_fragment" : "4; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "mirror_type"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 178,
+            "column" : 14,
+            "source_fragment" : "0, ..."
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_drop_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 85,
+            "column" : 8,
+            "source_fragment" : "hdr.drop_report_header.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "bmd_type"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x04"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 169,
+            "column" : 23,
+            "source_fragment" : "4, ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "encap_presence"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_encap_presence7"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 93,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.encap_presence = fabric_md.bridged"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "flow_hash"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_inner_hash1"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 94,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.flow_hash = fabric_md.bridged"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_drop_report_header", "drop_reason"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_int_bmd_drop_reason15"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 97,
+            "column" : 8,
+            "source_fragment" : "hdr.drop_report_header.drop_reason = fabric_md.bridged"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "ig_tstamp"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_egress_bridged36", "_base_ig_tstamp9"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 99,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.ig_tstamp = fabric_md.bridged.base.ig_tstamp[31:0]"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_common_report_header", "ig_port"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_ig_port3"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 101,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.ig_port = fabric_md.bridged"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_common_report_header", "eg_port"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 102,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.eg_port = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_common_report_header", "queue_id"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 103,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.queue_id = 0"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.parser_emulator.parse_int_report_mirror",
+      "id" : 91,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ethernet"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 20,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ethernet.setValid()"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_eth_type"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 25,
+            "column" : 8,
+            "source_fragment" : "hdr.report_eth_type.setValid()"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ipv4"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 37,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "version"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x04"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 38,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.version = 4w4"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "ihl"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x05"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 39,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.ihl = 4w5"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "dscp"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 40,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.dscp = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "ecn"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 41,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.ecn = 2w0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "flags"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 44,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.flags = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "frag_offset"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 45,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.frag_offset = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "ttl"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x40"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 150,
+            "column" : 32,
+            "source_fragment" : "64; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "protocol"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x11"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 134,
+            "column" : 25,
+            "source_fragment" : "17; ..."
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_udp"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 53,
+            "column" : 8,
+            "source_fragment" : "hdr.report_udp.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_udp", "sport"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 54,
+            "column" : 8,
+            "source_fragment" : "hdr.report_udp.sport = 0"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_fixed_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 60,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "ver"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 61,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.ver = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "nproto"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x02"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 203,
+            "column" : 52,
+            "source_fragment" : "2; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "rsvd"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 66,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.rsvd = 0"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_common_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 71,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_bmd_type0"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "bmd_type"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 110,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.bmd_type = fabric_md.int_report_md.bmd_type"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_vlan_id6"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0ffe"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 147,
+            "column" : 34,
+            "source_fragment" : "12w4094; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_mpls_label2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x000000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 112,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.base.mpls_label = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "ig_tstamp"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "ig_tstamp"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 118,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.ig_tstamp = fabric_md.int_report_md.ig_tstamp"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_common_report_header", "ig_port"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "ig_port"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 121,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.ig_port = fabric_md.int_report_md.ig_port"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_common_report_header", "eg_port"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "eg_port"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 122,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.eg_port = fabric_md.int_report_md.eg_port"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_common_report_header", "queue_id"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "queue_id"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 123,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.queue_id = fabric_md.int_report_md.queue_id"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_local_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 126,
+            "column" : 8,
+            "source_fragment" : "hdr.local_report_header.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_local_report_header", "queue_occupancy"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "queue_occupancy"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 127,
+            "column" : 8,
+            "source_fragment" : "hdr.local_report_header.queue_occupancy = fabric_md.int_report_md.queue_occupancy"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_local_report_header", "eg_tstamp"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "eg_tstamp"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 128,
+            "column" : 8,
+            "source_fragment" : "hdr.local_report_header.eg_tstamp = fabric_md.int_report_md.eg_tstamp"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.parser_emulator.parse_int_report_mirror",
+      "id" : 92,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ethernet"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 20,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ethernet.setValid()"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_eth_type"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 25,
+            "column" : 8,
+            "source_fragment" : "hdr.report_eth_type.setValid()"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ipv4"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 37,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "version"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x04"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 38,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.version = 4w4"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "ihl"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x05"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 39,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.ihl = 4w5"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "dscp"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 40,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.dscp = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "ecn"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 41,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.ecn = 2w0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "flags"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 44,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.flags = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "frag_offset"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 45,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.frag_offset = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "ttl"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x40"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 150,
+            "column" : 32,
+            "source_fragment" : "64; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_ipv4", "protocol"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x11"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 134,
+            "column" : 25,
+            "source_fragment" : "17; ..."
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_udp"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 53,
+            "column" : 8,
+            "source_fragment" : "hdr.report_udp.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_udp", "sport"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 54,
+            "column" : 8,
+            "source_fragment" : "hdr.report_udp.sport = 0"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_fixed_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 60,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "ver"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 61,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.ver = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "nproto"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x02"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 203,
+            "column" : 52,
+            "source_fragment" : "2; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "rsvd"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 66,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.rsvd = 0"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_common_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 71,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_bmd_type0"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "bmd_type"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 110,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.bmd_type = fabric_md.int_report_md.bmd_type"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_vlan_id6"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0ffe"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 147,
+            "column" : 34,
+            "source_fragment" : "12w4094; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_mpls_label2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x000000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 112,
+            "column" : 8,
+            "source_fragment" : "fabric_md.bridged.base.mpls_label = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_report_fixed_header", "ig_tstamp"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "ig_tstamp"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 118,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.ig_tstamp = fabric_md.int_report_md.ig_tstamp"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_common_report_header", "ig_port"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "ig_port"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 121,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.ig_port = fabric_md.int_report_md.ig_port"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_common_report_header", "eg_port"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "eg_port"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 122,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.eg_port = fabric_md.int_report_md.eg_port"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_common_report_header", "queue_id"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "queue_id"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 123,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.queue_id = fabric_md.int_report_md.queue_id"
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_local_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 126,
+            "column" : 8,
+            "source_fragment" : "hdr.local_report_header.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_local_report_header", "queue_occupancy"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "queue_occupancy"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 127,
+            "column" : 8,
+            "source_fragment" : "hdr.local_report_header.queue_occupancy = fabric_md.int_report_md.queue_occupancy"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["parser_emulator_hdr_local_report_header", "eg_tstamp"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_int_report_md38", "eg_tstamp"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 128,
+            "column" : 8,
+            "source_fragment" : "hdr.local_report_header.eg_tstamp = fabric_md.int_report_md.eg_tstamp"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.int_egress.check_quota",
+      "id" : 93,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricEgress.int_egress.reset_quota",
+      "id" : 94,
+      "runtime_data" : [],
+      "primitives" : []
+    },
+    {
+      "name" : "FabricEgress.int_egress.set_config",
+      "id" : 95,
+      "runtime_data" : [
+        {
+          "name" : "hop_latency_mask",
+          "bitwidth" : 32
+        },
+        {
+          "name" : "timestamp_mask",
+          "bitwidth" : 48
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_md", "hop_latency"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["int_egress_fabric_md_int_md", "hop_latency"]
+                  },
+                  "right" : {
+                    "type" : "local",
+                    "value" : 0
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 179,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_md.hop_latency = fabric_md.int_md.hop_latency & hop_latency_mask"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_md", "timestamp"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["int_egress_fabric_md_int_md", "timestamp"]
+                  },
+                  "right" : {
+                    "type" : "local",
+                    "value" : 1
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 180,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_md.timestamp = fabric_md.int_md.timestamp & timestamp_mask"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.int_egress.do_local_report_encap",
+      "id" : 96,
+      "runtime_data" : [
+        {
+          "name" : "src_ip",
+          "bitwidth" : 32
+        },
+        {
+          "name" : "mon_ip",
+          "bitwidth" : 32
+        },
+        {
+          "name" : "mon_port",
+          "bitwidth" : 16
+        },
+        {
+          "name" : "switch_id",
+          "bitwidth" : 32
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "modify_field_rng_uniform",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_ipv4", "identification"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xffff"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 195,
+            "column" : 8,
+            "source_fragment" : "random(hdr.report_ipv4.identification, 0, 0xffff)"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_ipv4", "src_addr"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 197,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.src_addr = src_ip; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_ipv4", "dst_addr"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 198,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.dst_addr = mon_ip; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_udp", "dport"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 2
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 199,
+            "column" : 8,
+            "source_fragment" : "hdr.report_udp.dport = mon_port; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_27"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["int_egress_hdr_report_fixed_header", "hw_id"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 200,
+            "column" : 23,
+            "source_fragment" : "(bit<32>)hdr.report_fixed_header.hw_id"
+          }
+        },
+        {
+          "op" : "register_read",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            },
+            {
+              "type" : "register_array",
+              "value" : "FabricEgress.int_egress.seq_number"
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_27"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 143,
+            "column" : 8,
+            "source_fragment" : "seq_number.read(reg, seq_number_idx)"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "+",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["scalars", "int_egress_reg"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x00000001"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 144,
+            "column" : 8,
+            "source_fragment" : "reg = reg + 1"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_28"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["int_egress_hdr_report_fixed_header", "hw_id"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 200,
+            "column" : 23,
+            "source_fragment" : "(bit<32>)hdr.report_fixed_header.hw_id"
+          }
+        },
+        {
+          "op" : "register_write",
+          "parameters" : [
+            {
+              "type" : "register_array",
+              "value" : "FabricEgress.int_egress.seq_number"
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_28"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 146,
+            "column" : 8,
+            "source_fragment" : "seq_number.write(seq_number_idx, reg)"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_fixed_header", "seq_no"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            }
+          ]
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_fixed_header", "dqf"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "report_type"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 201,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.dqf = fabric_md.int_report_md.report_type"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "switch_id"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 3
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 202,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.switch_id = switch_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "pad1"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 203,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.pad1 = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "pad2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 204,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.pad2 = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "pad3"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 205,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.pad3 = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_eth_type", "value"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "ip_eth_type"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 207,
+            "column" : 8,
+            "source_fragment" : "hdr.eth_type.value = fabric_md.int_report_md.ip_eth_type"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._int_mirror_type3"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 178,
+            "column" : 14,
+            "source_fragment" : "0, ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_eth_type", "value"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xbf04"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 125,
+            "column" : 39,
+            "source_fragment" : "0xBF04; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_fixed_header", "nproto"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x02"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 203,
+            "column" : 52,
+            "source_fragment" : "2; ..."
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_local_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 218,
+            "column" : 8,
+            "source_fragment" : "hdr.local_report_header.setValid()"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.int_egress.do_local_report_encap_mpls",
+      "id" : 97,
+      "runtime_data" : [
+        {
+          "name" : "src_ip",
+          "bitwidth" : 32
+        },
+        {
+          "name" : "mon_ip",
+          "bitwidth" : 32
+        },
+        {
+          "name" : "mon_port",
+          "bitwidth" : 16
+        },
+        {
+          "name" : "mon_label",
+          "bitwidth" : 20
+        },
+        {
+          "name" : "switch_id",
+          "bitwidth" : 32
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "modify_field_rng_uniform",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_ipv4", "identification"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xffff"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 195,
+            "column" : 8,
+            "source_fragment" : "random(hdr.report_ipv4.identification, 0, 0xffff)"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_ipv4", "src_addr"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 197,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.src_addr = src_ip; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_ipv4", "dst_addr"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 198,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.dst_addr = mon_ip; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_udp", "dport"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 2
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 199,
+            "column" : 8,
+            "source_fragment" : "hdr.report_udp.dport = mon_port; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_29"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["int_egress_hdr_report_fixed_header", "hw_id"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 200,
+            "column" : 23,
+            "source_fragment" : "(bit<32>)hdr.report_fixed_header.hw_id"
+          }
+        },
+        {
+          "op" : "register_read",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            },
+            {
+              "type" : "register_array",
+              "value" : "FabricEgress.int_egress.seq_number"
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_29"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 143,
+            "column" : 8,
+            "source_fragment" : "seq_number.read(reg, seq_number_idx)"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "+",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["scalars", "int_egress_reg"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x00000001"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 144,
+            "column" : 8,
+            "source_fragment" : "reg = reg + 1"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_30"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["int_egress_hdr_report_fixed_header", "hw_id"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 200,
+            "column" : 23,
+            "source_fragment" : "(bit<32>)hdr.report_fixed_header.hw_id"
+          }
+        },
+        {
+          "op" : "register_write",
+          "parameters" : [
+            {
+              "type" : "register_array",
+              "value" : "FabricEgress.int_egress.seq_number"
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_30"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 146,
+            "column" : 8,
+            "source_fragment" : "seq_number.write(seq_number_idx, reg)"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_fixed_header", "seq_no"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            }
+          ]
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_fixed_header", "dqf"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "report_type"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 201,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.dqf = fabric_md.int_report_md.report_type"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "switch_id"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 4
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 202,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.switch_id = switch_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "pad1"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 203,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.pad1 = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "pad2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 204,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.pad2 = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "pad3"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 205,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.pad3 = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_eth_type", "value"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "ip_eth_type"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 207,
+            "column" : 8,
+            "source_fragment" : "hdr.eth_type.value = fabric_md.int_report_md.ip_eth_type"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._int_mirror_type3"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 178,
+            "column" : 14,
+            "source_fragment" : "0, ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_eth_type", "value"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xbf04"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 125,
+            "column" : 39,
+            "source_fragment" : "0xBF04; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_fixed_header", "nproto"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x02"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 203,
+            "column" : 52,
+            "source_fragment" : "2; ..."
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_local_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 218,
+            "column" : 8,
+            "source_fragment" : "hdr.local_report_header.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_eth_type", "value"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xbf05"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 126,
+            "column" : 39,
+            "source_fragment" : "0xBF05; ..."
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_report_mpls"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 226,
+            "column" : 8,
+            "source_fragment" : "hdr.report_mpls.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_mpls", "tc"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 227,
+            "column" : 8,
+            "source_fragment" : "hdr.report_mpls.tc = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_mpls", "bos"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 228,
+            "column" : 8,
+            "source_fragment" : "hdr.report_mpls.bos = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_mpls", "ttl"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x40"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 149,
+            "column" : 32,
+            "source_fragment" : "64; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_mpls", "label"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 3
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 230,
+            "column" : 8,
+            "source_fragment" : "hdr.report_mpls.label = mon_label"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.int_egress.do_drop_report_encap",
+      "id" : 98,
+      "runtime_data" : [
+        {
+          "name" : "src_ip",
+          "bitwidth" : 32
+        },
+        {
+          "name" : "mon_ip",
+          "bitwidth" : 32
+        },
+        {
+          "name" : "mon_port",
+          "bitwidth" : 16
+        },
+        {
+          "name" : "switch_id",
+          "bitwidth" : 32
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "modify_field_rng_uniform",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_ipv4", "identification"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xffff"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 195,
+            "column" : 8,
+            "source_fragment" : "random(hdr.report_ipv4.identification, 0, 0xffff)"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_ipv4", "src_addr"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 197,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.src_addr = src_ip; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_ipv4", "dst_addr"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 198,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.dst_addr = mon_ip; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_udp", "dport"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 2
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 199,
+            "column" : 8,
+            "source_fragment" : "hdr.report_udp.dport = mon_port; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_31"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["int_egress_hdr_report_fixed_header", "hw_id"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 200,
+            "column" : 23,
+            "source_fragment" : "(bit<32>)hdr.report_fixed_header.hw_id"
+          }
+        },
+        {
+          "op" : "register_read",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            },
+            {
+              "type" : "register_array",
+              "value" : "FabricEgress.int_egress.seq_number"
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_31"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 143,
+            "column" : 8,
+            "source_fragment" : "seq_number.read(reg, seq_number_idx)"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "+",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["scalars", "int_egress_reg"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x00000001"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 144,
+            "column" : 8,
+            "source_fragment" : "reg = reg + 1"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_32"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["int_egress_hdr_report_fixed_header", "hw_id"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 200,
+            "column" : 23,
+            "source_fragment" : "(bit<32>)hdr.report_fixed_header.hw_id"
+          }
+        },
+        {
+          "op" : "register_write",
+          "parameters" : [
+            {
+              "type" : "register_array",
+              "value" : "FabricEgress.int_egress.seq_number"
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_32"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 146,
+            "column" : 8,
+            "source_fragment" : "seq_number.write(seq_number_idx, reg)"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_fixed_header", "seq_no"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            }
+          ]
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_fixed_header", "dqf"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "report_type"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 201,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.dqf = fabric_md.int_report_md.report_type"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "switch_id"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 3
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 202,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.switch_id = switch_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "pad1"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 203,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.pad1 = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "pad2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 204,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.pad2 = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "pad3"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 205,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.pad3 = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_eth_type", "value"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "ip_eth_type"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 207,
+            "column" : 8,
+            "source_fragment" : "hdr.eth_type.value = fabric_md.int_report_md.ip_eth_type"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._int_mirror_type3"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 178,
+            "column" : 14,
+            "source_fragment" : "0, ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_eth_type", "value"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xbf04"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 125,
+            "column" : 39,
+            "source_fragment" : "0xBF04; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_fixed_header", "nproto"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 202,
+            "column" : 44,
+            "source_fragment" : "1; ..."
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_drop_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 238,
+            "column" : 8,
+            "source_fragment" : "hdr.drop_report_header.setValid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_local_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 241,
+            "column" : 8,
+            "source_fragment" : "hdr.local_report_header.setInvalid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_drop_report_header", "drop_reason"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_bridged", "_int_bmd_drop_reason15"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 243,
+            "column" : 8,
+            "source_fragment" : "hdr.drop_report_header.drop_reason ="
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.int_egress.do_drop_report_encap_mpls",
+      "id" : 99,
+      "runtime_data" : [
+        {
+          "name" : "src_ip",
+          "bitwidth" : 32
+        },
+        {
+          "name" : "mon_ip",
+          "bitwidth" : 32
+        },
+        {
+          "name" : "mon_port",
+          "bitwidth" : 16
+        },
+        {
+          "name" : "mon_label",
+          "bitwidth" : 20
+        },
+        {
+          "name" : "switch_id",
+          "bitwidth" : 32
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "modify_field_rng_uniform",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_ipv4", "identification"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xffff"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 195,
+            "column" : 8,
+            "source_fragment" : "random(hdr.report_ipv4.identification, 0, 0xffff)"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_ipv4", "src_addr"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 197,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.src_addr = src_ip; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_ipv4", "dst_addr"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 1
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 198,
+            "column" : 8,
+            "source_fragment" : "hdr.report_ipv4.dst_addr = mon_ip; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_udp", "dport"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 2
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 199,
+            "column" : 8,
+            "source_fragment" : "hdr.report_udp.dport = mon_port; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_33"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["int_egress_hdr_report_fixed_header", "hw_id"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 200,
+            "column" : 23,
+            "source_fragment" : "(bit<32>)hdr.report_fixed_header.hw_id"
+          }
+        },
+        {
+          "op" : "register_read",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            },
+            {
+              "type" : "register_array",
+              "value" : "FabricEgress.int_egress.seq_number"
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_33"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 143,
+            "column" : 8,
+            "source_fragment" : "seq_number.read(reg, seq_number_idx)"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "+",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["scalars", "int_egress_reg"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x00000001"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 144,
+            "column" : 8,
+            "source_fragment" : "reg = reg + 1"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_34"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["int_egress_hdr_report_fixed_header", "hw_id"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 200,
+            "column" : 23,
+            "source_fragment" : "(bit<32>)hdr.report_fixed_header.hw_id"
+          }
+        },
+        {
+          "op" : "register_write",
+          "parameters" : [
+            {
+              "type" : "register_array",
+              "value" : "FabricEgress.int_egress.seq_number"
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_34"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 146,
+            "column" : 8,
+            "source_fragment" : "seq_number.write(seq_number_idx, reg)"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_fixed_header", "seq_no"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_reg"]
+            }
+          ]
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_fixed_header", "dqf"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "report_type"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 201,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.dqf = fabric_md.int_report_md.report_type"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "switch_id"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 4
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 202,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.switch_id = switch_id; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "pad1"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 203,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.pad1 = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "pad2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 204,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.pad2 = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_common_report_header", "pad3"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 205,
+            "column" : 8,
+            "source_fragment" : "hdr.common_report_header.pad3 = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_eth_type", "value"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "ip_eth_type"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 207,
+            "column" : 8,
+            "source_fragment" : "hdr.eth_type.value = fabric_md.int_report_md.ip_eth_type"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._int_mirror_type3"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 178,
+            "column" : 14,
+            "source_fragment" : "0, ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_eth_type", "value"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xbf04"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 125,
+            "column" : 39,
+            "source_fragment" : "0xBF04; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_fixed_header", "nproto"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 202,
+            "column" : 44,
+            "source_fragment" : "1; ..."
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_drop_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 238,
+            "column" : 8,
+            "source_fragment" : "hdr.drop_report_header.setValid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_local_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 241,
+            "column" : 8,
+            "source_fragment" : "hdr.local_report_header.setInvalid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_drop_report_header", "drop_reason"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_bridged", "_int_bmd_drop_reason15"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 243,
+            "column" : 8,
+            "source_fragment" : "hdr.drop_report_header.drop_reason ="
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_eth_type", "value"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0xbf05"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 126,
+            "column" : 39,
+            "source_fragment" : "0xBF05; ..."
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_report_mpls"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 251,
+            "column" : 8,
+            "source_fragment" : "hdr.report_mpls.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_mpls", "tc"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 252,
+            "column" : 8,
+            "source_fragment" : "hdr.report_mpls.tc = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_mpls", "bos"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 253,
+            "column" : 8,
+            "source_fragment" : "hdr.report_mpls.bos = 0"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_mpls", "ttl"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x40"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 149,
+            "column" : 32,
+            "source_fragment" : "64; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_mpls", "label"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 3
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 256,
+            "column" : 8,
+            "source_fragment" : "hdr.report_mpls.label = mon_label"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.int_egress.init_int_metadata",
+      "id" : 100,
+      "runtime_data" : [
+        {
+          "name" : "report_type",
+          "bitwidth" : 3
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_bridged", "_int_bmd_mirror_session_id14"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01fa"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 208,
+            "column" : 43,
+            "source_fragment" : "0x1FA; ..."
+          }
+        },
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_fabric_md_int_report_md"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 293,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._int_mirror_type3"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 179,
+            "column" : 17,
+            "source_fragment" : "1, ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "bmd_type"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x02"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 167,
+            "column" : 20,
+            "source_fragment" : "2, ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "mirror_type"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 179,
+            "column" : 17,
+            "source_fragment" : "1, ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "ig_port"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_bridged", "_base_ig_port3"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 299,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.ig_port ="
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "eg_port"]
+            },
+            {
+              "type" : "field",
+              "value" : ["standard_metadata", "egress_port"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 300,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.eg_port = (PortId_t)standard_md.egress_port"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "queue_id"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_egress_qid"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 301,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.queue_id = egress_qid"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "queue_occupancy"]
+            },
+            {
+              "type" : "field",
+              "value" : ["standard_metadata", "deq_qdepth"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 302,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.queue_occupancy = standard_md.deq_qdepth"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "ig_tstamp"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["int_egress_fabric_md_bridged", "_base_ig_tstamp9"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 303,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.ig_tstamp = fabric_md.bridged.base.ig_tstamp[31:0]"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "eg_tstamp"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["standard_metadata", "egress_global_timestamp"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 304,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.eg_tstamp = standard_md.egress_global_timestamp[31:0]"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "ip_eth_type"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_bridged", "_base_ip_eth_type10"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 305,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.ip_eth_type ="
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "flow_hash"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_bridged", "_base_inner_hash1"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 306,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.flow_hash ="
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_report_md", "report_type"]
+            },
+            {
+              "type" : "runtime_data",
+              "value" : 0
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 309,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_report_md.report_type = report_type"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "FabricEgress.int_egress.adjust_ip_udp_len",
+      "id" : 101,
+      "runtime_data" : [
+        {
+          "name" : "adjust_ip",
+          "bitwidth" : 16
+        },
+        {
+          "name" : "adjust_udp",
+          "bitwidth" : 16
+        }
+      ],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_ipv47", "total_len"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "+",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["scalars", "int_egress_fabric_md_pkt_length"]
+                      },
+                      "right" : {
+                        "type" : "local",
+                        "value" : 0
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 342,
+            "column" : 8,
+            "source_fragment" : "hdr_v1model.ingress.ipv4.total_len = fabric_md.pkt_length + adjust_ip"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_udp10", "len"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "+",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["scalars", "int_egress_fabric_md_pkt_length"]
+                      },
+                      "right" : {
+                        "type" : "local",
+                        "value" : 1
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 343,
+            "column" : 8,
+            "source_fragment" : "hdr_v1model.ingress.udp.len = fabric_md.pkt_length + adjust_udp"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "fabric_v1model136",
+      "id" : 102,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "exit",
+          "parameters" : [],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 136,
+            "column" : 12,
+            "source_fragment" : "exit"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "fabric_v1model133",
+      "id" : 103,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._egress_cpu_port37"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x0000"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 133,
+            "column" : 8,
+            "source_fragment" : "fabric_md.egress.cpu_port = 0"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "int_tna_parser_emulator148",
+      "id" : 104,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_ipv47"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 148,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.ipv4.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_tcp9"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 149,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.tcp.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_udp10"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 150,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.udp.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_icmp11"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 151,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.icmp.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_vxlan15"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 153,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.vxlan.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_inner_ethernet16"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 154,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.inner_ethernet.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_inner_eth_type17"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 155,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.inner_eth_type.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_gtpu12"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 157,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.gtpu.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_gtpu_options13"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 158,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.gtpu_options.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_gtpu_ext_psc14"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 159,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.gtpu_ext_psc.setInvalid()"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "int_tna_parser_emulator14",
+      "id" : 105,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_int_bmd_drop_reason15"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_drop_reason48"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 144,
+            "column" : 12,
+            "source_fragment" : "fabric_md.egress.bridged.int_bmd.drop_reason = fabric_md"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_int_bmd_report_type13"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_report_type46"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 145,
+            "column" : 12,
+            "source_fragment" : "fabric_md.egress.bridged.int_bmd.report_type = fabric_md"
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ethernet"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_ethernet24"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_eth_type"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_eth_type25"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ipv4"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_ipv427"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_udp"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_udp28"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_fixed_header"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_fixed_header29"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_common_report_header"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_common_report_header30"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_local_report_header"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_local_report_header31"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_drop_report_header"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_drop_report_header32"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._egress_is_int_recirc44"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 134,
+            "column" : 32,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_vlan_tag4"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 140,
+            "column" : 8,
+            "source_fragment" : "hdr_v1model.ingress.vlan_tag.setInvalid()"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "int_tna_parser_emulator166",
+      "id" : 106,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "recirculate",
+          "parameters" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x3"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 166,
+            "column" : 12,
+            "source_fragment" : "recirculate_preserving_field_list(NO_PRESERVATION)"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "int_tna_parser_emulator169",
+      "id" : 107,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "recirculate",
+          "parameters" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x1"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 169,
+            "column" : 12,
+            "source_fragment" : "recirculate_preserving_field_list(PRESERVE_INT_MD)"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "int_tna_parser_emulator173",
+      "id" : 108,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_ethernet24"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ethernet"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_eth_type25"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_eth_type"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_ipv427"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ipv4"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_udp28"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_udp"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_fixed_header29"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_fixed_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_common_report_header30"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_common_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_local_report_header31"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_local_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_drop_report_header32"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_drop_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "int_tna_parser_emulator148_0",
+      "id" : 109,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_ipv47"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 148,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.ipv4.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_tcp9"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 149,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.tcp.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_udp10"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 150,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.udp.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_icmp11"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 151,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.icmp.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_vxlan15"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 153,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.vxlan.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_inner_ethernet16"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 154,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.inner_ethernet.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_inner_eth_type17"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 155,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.inner_eth_type.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_gtpu12"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 157,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.gtpu.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_gtpu_options13"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 158,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.gtpu_options.setInvalid()"
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_gtpu_ext_psc14"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 159,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.gtpu_ext_psc.setInvalid()"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "int_tna_parser_emulator14_0",
+      "id" : 110,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ethernet"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_ethernet24"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_eth_type"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_eth_type25"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ipv4"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_ipv427"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_udp"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_udp28"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_fixed_header"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_fixed_header29"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_common_report_header"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_common_report_header30"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_local_report_header"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_local_report_header31"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_drop_report_header"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_drop_report_header32"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._egress_is_int_recirc44"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "bool",
+                    "value" : true
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 134,
+            "column" : 32,
+            "source_fragment" : "= true; ..."
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_vlan_tag4"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 140,
+            "column" : 8,
+            "source_fragment" : "hdr_v1model.ingress.vlan_tag.setInvalid()"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "int_tna_parser_emulator166_0",
+      "id" : 111,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "recirculate",
+          "parameters" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x4"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 166,
+            "column" : 12,
+            "source_fragment" : "recirculate_preserving_field_list(NO_PRESERVATION)"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "int_tna_parser_emulator169_0",
+      "id" : 112,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "recirculate",
+          "parameters" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x1"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 169,
+            "column" : 12,
+            "source_fragment" : "recirculate_preserving_field_list(PRESERVE_INT_MD)"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "int_tna_parser_emulator173_0",
+      "id" : 113,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_ethernet24"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ethernet"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_eth_type25"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_eth_type"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_ipv427"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_ipv4"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_udp28"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_udp"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_fixed_header29"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_report_fixed_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_common_report_header30"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_common_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_local_report_header31"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_local_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_drop_report_header32"
+            },
+            {
+              "type" : "header",
+              "value" : "parser_emulator_hdr_drop_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "packetio51",
+      "id" : 114,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "add_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_packet_in1"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 51,
+            "column" : 12,
+            "source_fragment" : "hdr.packet_in.setValid()"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_packet_in1", "ingress_port"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_ingress_port49"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 52,
+            "column" : 12,
+            "source_fragment" : "hdr.packet_in.ingress_port = preserved_ig_port; ..."
+          }
+        },
+        {
+          "op" : "remove_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_ingress_fake_ethernet2"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 53,
+            "column" : 12,
+            "source_fragment" : "hdr.fake_ethernet.setInvalid()"
+          }
+        },
+        {
+          "op" : "exit",
+          "parameters" : [],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 54,
+            "column" : 12,
+            "source_fragment" : "exit"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "packetio60",
+      "id" : 115,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._egress_pkt_length45"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "+",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : "&",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["standard_metadata", "packet_length"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x0000ffff"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xfff2"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 60,
+            "column" : 37,
+            "source_fragment" : "= (bit<16>)standard_md.packet_length - 14; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "next283",
+      "id" : 116,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_int_bmd_report_type13"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 219,
+            "column" : 50,
+            "source_fragment" : "0; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._drop_ctl2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 285,
+            "column" : 21,
+            "source_fragment" : "= 1; ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "next325",
+      "id" : 117,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._drop_ctl2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 325,
+            "column" : 25,
+            "source_fragment" : "= 1; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_drop_reason48"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x83"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 258,
+            "column" : 32,
+            "source_fragment" : "131, ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "next323",
+      "id" : 118,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_mpls6", "ttl"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "+",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["_ingress_mpls6", "ttl"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xff"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 323,
+            "column" : 12,
+            "source_fragment" : "hdr.mpls.ttl = hdr.mpls.ttl - 1"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "next333",
+      "id" : 119,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_ipv47", "ttl"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "+",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["_ingress_ipv47", "ttl"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xff"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 333,
+            "column" : 20,
+            "source_fragment" : "hdr.ipv4.ttl = hdr.ipv4.ttl - 1"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "next336",
+      "id" : 120,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._drop_ctl2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 336,
+            "column" : 29,
+            "source_fragment" : "= 1; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_drop_reason48"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x1a"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 247,
+            "column" : 30,
+            "source_fragment" : "26, ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "next343",
+      "id" : 121,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_ipv68", "hop_limit"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "+",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["_ingress_ipv68", "hop_limit"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xff"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 343,
+            "column" : 20,
+            "source_fragment" : "hdr.ipv6.hop_limit = hdr.ipv6.hop_limit - 1"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "next346",
+      "id" : 122,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._drop_ctl2"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x01"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 346,
+            "column" : 29,
+            "source_fragment" : "= 1; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._recirc_preserved_drop_reason48"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x1a"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../shared/define.p4",
+            "line" : 247,
+            "column" : 30,
+            "source_fragment" : "26, ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "int128",
+      "id" : 123,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_report_eth_type"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_eth_type25"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 128,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_report_mpls"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_mpls26"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 128,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_report_ipv4"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_ipv427"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 128,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_report_udp"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_udp28"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 128,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_report_fixed_header"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_report_fixed_header29"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 128,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_common_report_header"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_common_report_header30"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 128,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_local_report_header"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_local_report_header31"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 128,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_drop_report_header"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_drop_report_header32"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 128,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_eth_type"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_eth_type35"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 128,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_fabric_md_bridged"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_bridged36"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 129,
+            "column" : 4,
+            "source_fragment" : "fabric_egress_metadata_t fabric_md = fabric_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "int_egress_fabric_md_int_report_md"
+            },
+            {
+              "type" : "header",
+              "value" : "_egress_int_report_md38"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 129,
+            "column" : 4,
+            "source_fragment" : "fabric_egress_metadata_t fabric_md = fabric_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_md", "hop_latency"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._egress_int_md_hop_latency39"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 129,
+            "column" : 4,
+            "source_fragment" : "fabric_egress_metadata_t fabric_md = fabric_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_md", "timestamp"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._egress_int_md_timestamp40"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 129,
+            "column" : 4,
+            "source_fragment" : "fabric_egress_metadata_t fabric_md = fabric_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_md", "vlan_stripped"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "d2b",
+                      "left" : null,
+                      "right" : {
+                        "type" : "field",
+                        "value" : ["scalars", "userMetadata._egress_int_md_vlan_stripped41"]
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 129,
+            "column" : 4,
+            "source_fragment" : "fabric_egress_metadata_t fabric_md = fabric_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_md", "queue_report"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "b2d",
+                  "left" : null,
+                  "right" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "d2b",
+                      "left" : null,
+                      "right" : {
+                        "type" : "field",
+                        "value" : ["scalars", "userMetadata._egress_int_md_queue_report42"]
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 129,
+            "column" : 4,
+            "source_fragment" : "fabric_egress_metadata_t fabric_md = fabric_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_fabric_md_pkt_length"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._egress_pkt_length45"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 129,
+            "column" : 4,
+            "source_fragment" : "fabric_egress_metadata_t fabric_md = fabric_v1model.egress; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "int_egress_egress_qid"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x00"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 135,
+            "column" : 4,
+            "source_fragment" : "QueueId_t egress_qid = 0;"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_md", "hop_latency"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "-",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "field",
+                            "value" : ["standard_metadata", "egress_global_timestamp"]
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffff"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "field",
+                            "value" : ["int_egress_fabric_md_bridged", "_base_ig_tstamp9"]
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0xffffffff"
+                          }
+                        }
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 365,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_md.hop_latency = standard_md.egress_global_timestamp[31:0] - fabric_md.bridged.base.ig_tstamp[31:0]"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_md", "timestamp"]
+            },
+            {
+              "type" : "field",
+              "value" : ["standard_metadata", "egress_global_timestamp"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 366,
+            "column" : 8,
+            "source_fragment" : "fabric_md.int_md.timestamp = standard_md.egress_global_timestamp"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "key_0"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : ">>",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : "&",
+                              "left" : {
+                                "type" : "expression",
+                                "value" : {
+                                  "op" : "-",
+                                  "left" : {
+                                    "type" : "expression",
+                                    "value" : {
+                                      "op" : "&",
+                                      "left" : {
+                                        "type" : "field",
+                                        "value" : ["standard_metadata", "egress_global_timestamp"]
+                                      },
+                                      "right" : {
+                                        "type" : "hexstr",
+                                        "value" : "0xffffffff"
+                                      }
+                                    }
+                                  },
+                                  "right" : {
+                                    "type" : "expression",
+                                    "value" : {
+                                      "op" : "&",
+                                      "left" : {
+                                        "type" : "field",
+                                        "value" : ["int_egress_fabric_md_bridged", "_base_ig_tstamp9"]
+                                      },
+                                      "right" : {
+                                        "type" : "hexstr",
+                                        "value" : "0xffffffff"
+                                      }
+                                    }
+                                  }
+                                }
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0xffffffff"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0x10"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffffffff"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 166,
+            "column" : 12,
+            "source_fragment" : "            fabric_md.int_md.hop_latency[31:16]: range @name(\\\"hop_latency_upper\\\");"
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "key_1"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "-",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : "&",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["standard_metadata", "egress_global_timestamp"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0xffffffff"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : "&",
+                              "left" : {
+                                "type" : "field",
+                                "value" : ["int_egress_fabric_md_bridged", "_base_ig_tstamp9"]
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0xffffffff"
+                              }
+                            }
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0xffffffff"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 167,
+            "column" : 12,
+            "source_fragment" : "            fabric_md.int_md.hop_latency[15:0]: range @name(\\\"hop_latency_lower\\\");"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "int383",
+      "id" : 124,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_35"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["int_egress_fabric_md_bridged", "_int_bmd_mirror_session_id14"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xffffffff"
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 384,
+            "column" : 20,
+            "source_fragment" : "(bit<32>)fabric_md.bridged.int_bmd.mirror_session_id"
+          }
+        },
+        {
+          "op" : "clone_egress_pkt_to_egress",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "tmp_35"]
+            },
+            {
+              "type" : "hexstr",
+              "value" : "0x1"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 383,
+            "column" : 16,
+            "source_fragment" : "clone_preserving_field_list(CloneType.E2E, ..."
+          }
+        }
+      ]
+    },
+    {
+      "name" : "int373",
+      "id" : 125,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["int_egress_hdr_report_fixed_header", "hw_id"]
+            },
+            {
+              "type" : "expression",
+              "value" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "|",
+                  "left" : {
+                    "type" : "hexstr",
+                    "value" : "0x00"
+                  },
+                  "right" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "&",
+                      "left" : {
+                        "type" : "expression",
+                        "value" : {
+                          "op" : "&",
+                          "left" : {
+                            "type" : "expression",
+                            "value" : {
+                              "op" : "&",
+                              "left" : {
+                                "type" : "expression",
+                                "value" : {
+                                  "op" : "&",
+                                  "left" : {
+                                    "type" : "expression",
+                                    "value" : {
+                                      "op" : ">>",
+                                      "left" : {
+                                        "type" : "field",
+                                        "value" : ["standard_metadata", "egress_spec"]
+                                      },
+                                      "right" : {
+                                        "type" : "hexstr",
+                                        "value" : "0x7"
+                                      }
+                                    }
+                                  },
+                                  "right" : {
+                                    "type" : "hexstr",
+                                    "value" : "0x01ff"
+                                  }
+                                }
+                              },
+                              "right" : {
+                                "type" : "hexstr",
+                                "value" : "0x03"
+                              }
+                            }
+                          },
+                          "right" : {
+                            "type" : "hexstr",
+                            "value" : "0x3f"
+                          }
+                        }
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x07"
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 373,
+            "column" : 8,
+            "source_fragment" : "hdr.report_fixed_header.hw_id = 4w0 ++ standard_md.egress_spec[8:7]"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "slicing217",
+      "id" : 126,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["_ingress_ipv47", "dscp"]
+            },
+            {
+              "type" : "field",
+              "value" : ["scalars", "dscp_rewriter_tmp_dscp"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 217,
+            "column" : 16,
+            "source_fragment" : "hdr.ipv4.dscp = tmp_dscp"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "slicing189",
+      "id" : 127,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_bridged36"
+            },
+            {
+              "type" : "header",
+              "value" : "int_egress_fabric_md_bridged"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 391,
+            "column" : 30,
+            "source_fragment" : "= fabric_md; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_int_report_md38"
+            },
+            {
+              "type" : "header",
+              "value" : "int_egress_fabric_md_int_report_md"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 391,
+            "column" : 30,
+            "source_fragment" : "= fabric_md; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._egress_int_md_hop_latency39"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_md", "hop_latency"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 391,
+            "column" : 30,
+            "source_fragment" : "= fabric_md; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "userMetadata._egress_int_md_timestamp40"]
+            },
+            {
+              "type" : "field",
+              "value" : ["int_egress_fabric_md_int_md", "timestamp"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 391,
+            "column" : 30,
+            "source_fragment" : "= fabric_md; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_eth_type25"
+            },
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_report_eth_type"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 392,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_mpls26"
+            },
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_report_mpls"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 392,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_ipv427"
+            },
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_report_ipv4"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 392,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_udp28"
+            },
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_report_udp"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 392,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_report_fixed_header29"
+            },
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_report_fixed_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 392,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_common_report_header30"
+            },
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_common_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 392,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_local_report_header31"
+            },
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_local_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 392,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_drop_report_header32"
+            },
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_drop_report_header"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 392,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign_header",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "_egress_eth_type35"
+            },
+            {
+              "type" : "header",
+              "value" : "int_egress_hdr_eth_type"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 392,
+            "column" : 27,
+            "source_fragment" : "= hdr; ..."
+          }
+        },
+        {
+          "op" : "assign",
+          "parameters" : [
+            {
+              "type" : "field",
+              "value" : ["scalars", "dscp_rewriter_tmp_dscp"]
+            },
+            {
+              "type" : "field",
+              "value" : ["_egress_bridged36", "_base_slice_tc12"]
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 189,
+            "column" : 4,
+            "source_fragment" : "bit<6> tmp_dscp = fabric_md.bridged.base.slice_tc;"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "fabric_v1model170",
+      "id" : 128,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "recirculate",
+          "parameters" : [
+            {
+              "type" : "hexstr",
+              "value" : "0x5"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 170,
+            "column" : 12,
+            "source_fragment" : "recirculate_preserving_field_list(NO_PRESERVATION)"
+          }
+        }
+      ]
+    },
+    {
+      "name" : "fabric_v1model174",
+      "id" : 129,
+      "runtime_data" : [],
+      "primitives" : [
+        {
+          "op" : "mark_to_drop",
+          "parameters" : [
+            {
+              "type" : "header",
+              "value" : "standard_metadata"
+            }
+          ],
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 174,
+            "column" : 12,
+            "source_fragment" : "mark_to_drop(standard_md)"
+          }
+        }
+      ]
+    }
+  ],
+  "pipelines" : [
+    {
+      "name" : "ingress",
+      "id" : 0,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+        "line" : 35,
+        "column" : 8,
+        "source_fragment" : "FabricIngress"
+      },
+      "init_table" : "tbl_fabric_v1model61",
+      "tables" : [
+        {
+          "name" : "tbl_fabric_v1model61",
+          "id" : 0,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 61,
+            "column" : 8,
+            "source_fragment" : "mark_to_drop(standard_md)"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [51],
+          "actions" : ["fabric_v1model61"],
+          "base_default_next" : "node_3",
+          "next_tables" : {
+            "fabric_v1model61" : "node_3"
+          },
+          "default_entry" : {
+            "action_id" : 51,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_fabric_v1model64",
+          "id" : 1,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 64,
+            "column" : 12,
+            "source_fragment" : "exit"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [50],
+          "actions" : ["fabric_v1model64"],
+          "base_default_next" : "node_5",
+          "next_tables" : {
+            "fabric_v1model64" : "node_5"
+          },
+          "default_entry" : {
+            "action_id" : 50,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_fabric_v1model70",
+          "id" : 2,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 70,
+            "column" : 51,
+            "source_fragment" : "="
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [52],
+          "actions" : ["fabric_v1model70"],
+          "base_default_next" : "tbl_lookup_md_init15",
+          "next_tables" : {
+            "fabric_v1model70" : "tbl_lookup_md_init15"
+          },
+          "default_entry" : {
+            "action_id" : 52,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_lookup_md_init15",
+          "id" : 3,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 15,
+            "column" : 23,
+            "source_fragment" : "= hdr.ethernet.dst_addr; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [54],
+          "actions" : ["lookup_md_init15"],
+          "base_default_next" : "node_8",
+          "next_tables" : {
+            "lookup_md_init15" : "node_8"
+          },
+          "default_entry" : {
+            "action_id" : 54,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_lookup_md_init21",
+          "id" : 4,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 21,
+            "column" : 27,
+            "source_fragment" : "="
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [53],
+          "actions" : ["lookup_md_init21"],
+          "base_default_next" : "tbl_lookup_md_init24",
+          "next_tables" : {
+            "lookup_md_init21" : "tbl_lookup_md_init24"
+          },
+          "default_entry" : {
+            "action_id" : 53,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_lookup_md_init24",
+          "id" : 5,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 24,
+            "column" : 23,
+            "source_fragment" : "= false; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [63],
+          "actions" : ["lookup_md_init24"],
+          "base_default_next" : "node_11",
+          "next_tables" : {
+            "lookup_md_init24" : "node_11"
+          },
+          "default_entry" : {
+            "action_id" : 63,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_lookup_md_init33",
+          "id" : 6,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 33,
+            "column" : 27,
+            "source_fragment" : "= true; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [58],
+          "actions" : ["lookup_md_init33"],
+          "base_default_next" : "node_13",
+          "next_tables" : {
+            "lookup_md_init33" : "node_13"
+          },
+          "default_entry" : {
+            "action_id" : 58,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_lookup_md_init38",
+          "id" : 7,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 38,
+            "column" : 32,
+            "source_fragment" : "= hdr.inner_tcp.sport; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [55],
+          "actions" : ["lookup_md_init38"],
+          "base_default_next" : "node_27",
+          "next_tables" : {
+            "lookup_md_init38" : "node_27"
+          },
+          "default_entry" : {
+            "action_id" : 55,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_lookup_md_init41",
+          "id" : 8,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 41,
+            "column" : 32,
+            "source_fragment" : "= hdr.inner_udp.sport; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [56],
+          "actions" : ["lookup_md_init41"],
+          "base_default_next" : "node_27",
+          "next_tables" : {
+            "lookup_md_init41" : "node_27"
+          },
+          "default_entry" : {
+            "action_id" : 56,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_lookup_md_init44",
+          "id" : 9,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 44,
+            "column" : 33,
+            "source_fragment" : "= hdr.inner_icmp.icmp_type; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [57],
+          "actions" : ["lookup_md_init44"],
+          "base_default_next" : "node_27",
+          "next_tables" : {
+            "lookup_md_init44" : "node_27"
+          },
+          "default_entry" : {
+            "action_id" : 57,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_lookup_md_init48",
+          "id" : 10,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 48,
+            "column" : 27,
+            "source_fragment" : "= true; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [62],
+          "actions" : ["lookup_md_init48"],
+          "base_default_next" : "node_21",
+          "next_tables" : {
+            "lookup_md_init48" : "node_21"
+          },
+          "default_entry" : {
+            "action_id" : 62,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_lookup_md_init53",
+          "id" : 11,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 53,
+            "column" : 32,
+            "source_fragment" : "= hdr.tcp.sport; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [59],
+          "actions" : ["lookup_md_init53"],
+          "base_default_next" : "node_27",
+          "next_tables" : {
+            "lookup_md_init53" : "node_27"
+          },
+          "default_entry" : {
+            "action_id" : 59,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_lookup_md_init56",
+          "id" : 12,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 56,
+            "column" : 32,
+            "source_fragment" : "= hdr.udp.sport; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [60],
+          "actions" : ["lookup_md_init56"],
+          "base_default_next" : "node_27",
+          "next_tables" : {
+            "lookup_md_init56" : "node_27"
+          },
+          "default_entry" : {
+            "action_id" : 60,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_lookup_md_init59",
+          "id" : 13,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 59,
+            "column" : 33,
+            "source_fragment" : "= hdr.icmp.icmp_type; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [61],
+          "actions" : ["lookup_md_init59"],
+          "base_default_next" : "node_27",
+          "next_tables" : {
+            "lookup_md_init59" : "node_27"
+          },
+          "default_entry" : {
+            "action_id" : 61,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_pkt_io_do_packet_out",
+          "id" : 14,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 25,
+            "column" : 12,
+            "source_fragment" : "do_packet_out()"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [8],
+          "actions" : ["FabricIngress.pkt_io.do_packet_out"],
+          "base_default_next" : "FabricIngress.int_watchlist.watchlist",
+          "next_tables" : {
+            "FabricIngress.pkt_io.do_packet_out" : "FabricIngress.int_watchlist.watchlist"
+          },
+          "default_entry" : {
+            "action_id" : 8,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.int_watchlist.watchlist",
+          "id" : 15,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 34,
+            "column" : 10,
+            "source_fragment" : "watchlist"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "ipv4_valid",
+              "target" : ["scalars", "userMetadata._ingress_lkp_is_ipv410"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "ipv4_src",
+              "target" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "ipv4_dst",
+              "target" : ["scalars", "userMetadata._ingress_lkp_ipv4_dst12"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "ip_proto",
+              "target" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"],
+              "mask" : null
+            },
+            {
+              "match_type" : "range",
+              "name" : "l4_sport",
+              "target" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"],
+              "mask" : null
+            },
+            {
+              "match_type" : "range",
+              "name" : "l4_dport",
+              "target" : ["scalars", "userMetadata._ingress_lkp_l4_dport15"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "range",
+          "type" : "simple",
+          "max_size" : 64,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [46, 48, 47],
+          "actions" : ["FabricIngress.int_watchlist.mark_to_report", "FabricIngress.int_watchlist.no_report_collector", "FabricIngress.int_watchlist.no_report"],
+          "base_default_next" : "FabricIngress.stats.flows",
+          "next_tables" : {
+            "FabricIngress.int_watchlist.mark_to_report" : "FabricIngress.stats.flows",
+            "FabricIngress.int_watchlist.no_report_collector" : "FabricIngress.stats.flows",
+            "FabricIngress.int_watchlist.no_report" : "FabricIngress.stats.flows"
+          },
+          "default_entry" : {
+            "action_id" : 47,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.stats.flows",
+          "id" : 16,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/stats.p4",
+            "line" : 21,
+            "column" : 10,
+            "source_fragment" : "flows"
+          },
+          "key" : [
+            {
+              "match_type" : "ternary",
+              "name" : "ipv4_src",
+              "target" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "ipv4_dst",
+              "target" : ["scalars", "userMetadata._ingress_lkp_ipv4_dst12"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "ip_proto",
+              "target" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "l4_sport",
+              "target" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "l4_dport",
+              "target" : ["scalars", "userMetadata._ingress_lkp_l4_dport15"],
+              "mask" : null
+            },
+            {
+              "match_type" : "exact",
+              "name" : "ig_port",
+              "target" : ["_ingress_bridged4", "_base_ig_port3"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "ternary",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [7],
+          "actions" : ["FabricIngress.stats.count"],
+          "base_default_next" : "FabricIngress.slice_tc_classifier.classifier",
+          "next_tables" : {
+            "FabricIngress.stats.count" : "FabricIngress.slice_tc_classifier.classifier"
+          },
+          "default_entry" : {
+            "action_id" : 7,
+            "action_const" : true,
+            "action_data" : ["0x0"],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.slice_tc_classifier.classifier",
+          "id" : 17,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 44,
+            "column" : 10,
+            "source_fragment" : "classifier"
+          },
+          "key" : [
+            {
+              "match_type" : "ternary",
+              "name" : "ig_port",
+              "target" : ["_ingress_bridged4", "_base_ig_port3"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "ipv4_src",
+              "target" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "ipv4_dst",
+              "target" : ["scalars", "userMetadata._ingress_lkp_ipv4_dst12"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "ip_proto",
+              "target" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "l4_sport",
+              "target" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "l4_dport",
+              "target" : ["scalars", "userMetadata._ingress_lkp_l4_dport15"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "ternary",
+          "type" : "simple",
+          "max_size" : 512,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [38, 40, 39],
+          "actions" : ["FabricIngress.slice_tc_classifier.set_slice_id_tc", "FabricIngress.slice_tc_classifier.trust_dscp", "FabricIngress.slice_tc_classifier.no_classification"],
+          "base_default_next" : "FabricIngress.filtering.ingress_port_vlan",
+          "next_tables" : {
+            "FabricIngress.slice_tc_classifier.set_slice_id_tc" : "FabricIngress.filtering.ingress_port_vlan",
+            "FabricIngress.slice_tc_classifier.trust_dscp" : "FabricIngress.filtering.ingress_port_vlan",
+            "FabricIngress.slice_tc_classifier.no_classification" : "FabricIngress.filtering.ingress_port_vlan"
+          },
+          "default_entry" : {
+            "action_id" : 39,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.filtering.ingress_port_vlan",
+          "id" : 18,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4",
+            "line" : 42,
+            "column" : 10,
+            "source_fragment" : "ingress_port_vlan"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "ig_port",
+              "target" : ["_ingress_bridged4", "_base_ig_port3"],
+              "mask" : null
+            },
+            {
+              "match_type" : "exact",
+              "name" : "vlan_is_valid",
+              "target" : ["_ingress_vlan_tag4", "$valid$"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "vlan_id",
+              "target" : ["_ingress_vlan_tag4", "vlan_id"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "ternary",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [9, 10, 11],
+          "actions" : ["FabricIngress.filtering.deny", "FabricIngress.filtering.permit", "FabricIngress.filtering.permit_with_internal_vlan"],
+          "base_default_next" : "FabricIngress.filtering.fwd_classifier",
+          "next_tables" : {
+            "FabricIngress.filtering.deny" : "FabricIngress.filtering.fwd_classifier",
+            "FabricIngress.filtering.permit" : "FabricIngress.filtering.fwd_classifier",
+            "FabricIngress.filtering.permit_with_internal_vlan" : "FabricIngress.filtering.fwd_classifier"
+          },
+          "default_entry" : {
+            "action_id" : 9,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.filtering.fwd_classifier",
+          "id" : 19,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4",
+            "line" : 80,
+            "column" : 10,
+            "source_fragment" : "fwd_classifier"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "ig_port",
+              "target" : ["_ingress_bridged4", "_base_ig_port3"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "eth_dst",
+              "target" : ["_ingress_ethernet3", "dst_addr"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "eth_type",
+              "target" : ["_ingress_eth_type5", "value"],
+              "mask" : null
+            },
+            {
+              "match_type" : "exact",
+              "name" : "ip_eth_type",
+              "target" : ["_ingress_bridged4", "_base_ip_eth_type10"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "ternary",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [12],
+          "actions" : ["FabricIngress.filtering.set_forwarding_type"],
+          "base_default_next" : "tbl_filtering100",
+          "next_tables" : {
+            "FabricIngress.filtering.set_forwarding_type" : "tbl_filtering100"
+          },
+          "default_entry" : {
+            "action_id" : 12,
+            "action_const" : true,
+            "action_data" : ["0x0"],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_filtering100",
+          "id" : 20,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4",
+            "line" : 100,
+            "column" : 8,
+            "source_fragment" : "fwd_type_counter.count((bit<32>)fabric_md.bridged.base.fwd_type)"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [64],
+          "actions" : ["filtering100"],
+          "base_default_next" : "node_35",
+          "next_tables" : {
+            "filtering100" : "node_35"
+          },
+          "default_entry" : {
+            "action_id" : 64,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.forwarding.bridging",
+          "id" : 21,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 39,
+            "column" : 10,
+            "source_fragment" : "bridging"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "vlan_id",
+              "target" : ["_ingress_bridged4", "_base_vlan_id6"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "eth_dst",
+              "target" : ["_ingress_ethernet3", "dst_addr"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "ternary",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [17, 13],
+          "actions" : ["FabricIngress.forwarding.set_next_id_bridging", "FabricIngress.forwarding.set_int_drop_reason"],
+          "base_default_next" : "tbl_hasher17",
+          "next_tables" : {
+            "FabricIngress.forwarding.set_next_id_bridging" : "tbl_hasher17",
+            "FabricIngress.forwarding.set_int_drop_reason" : "tbl_hasher17"
+          },
+          "default_entry" : {
+            "action_id" : 13,
+            "action_const" : true,
+            "action_data" : ["0x59"],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.forwarding.mpls",
+          "id" : 22,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 74,
+            "column" : 10,
+            "source_fragment" : "mpls"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "mpls_label",
+              "target" : ["_ingress_bridged4", "_base_mpls_label2"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [18, 14],
+          "actions" : ["FabricIngress.forwarding.pop_mpls_and_next", "FabricIngress.forwarding.set_int_drop_reason"],
+          "base_default_next" : "tbl_hasher17",
+          "next_tables" : {
+            "FabricIngress.forwarding.pop_mpls_and_next" : "tbl_hasher17",
+            "FabricIngress.forwarding.set_int_drop_reason" : "tbl_hasher17"
+          },
+          "default_entry" : {
+            "action_id" : 14,
+            "action_const" : true,
+            "action_data" : ["0x81"],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.forwarding.routing_v4",
+          "id" : 23,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 116,
+            "column" : 10,
+            "source_fragment" : "routing_v4"
+          },
+          "key" : [
+            {
+              "match_type" : "lpm",
+              "name" : "ipv4_dst",
+              "target" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "lpm",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [19, 20, 21, 15],
+          "actions" : ["FabricIngress.forwarding.set_next_id_routing_v4", "FabricIngress.forwarding.nop_routing_v4", "FabricIngress.forwarding.drop_routing_v4", "FabricIngress.forwarding.set_int_drop_reason"],
+          "base_default_next" : "tbl_hasher17",
+          "next_tables" : {
+            "FabricIngress.forwarding.set_next_id_routing_v4" : "tbl_hasher17",
+            "FabricIngress.forwarding.nop_routing_v4" : "tbl_hasher17",
+            "FabricIngress.forwarding.drop_routing_v4" : "tbl_hasher17",
+            "FabricIngress.forwarding.set_int_drop_reason" : "tbl_hasher17"
+          },
+          "default_entry" : {
+            "action_id" : 15,
+            "action_const" : false,
+            "action_data" : ["0x1d"],
+            "action_entry_const" : false
+          }
+        },
+        {
+          "name" : "FabricIngress.forwarding.routing_v6",
+          "id" : 24,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 155,
+            "column" : 10,
+            "source_fragment" : "routing_v6"
+          },
+          "key" : [
+            {
+              "match_type" : "lpm",
+              "name" : "ipv6_dst",
+              "target" : ["_ingress_ipv68", "dst_addr"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "lpm",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [22, 23, 16],
+          "actions" : ["FabricIngress.forwarding.set_next_id_routing_v6", "FabricIngress.forwarding.drop_routing_v6", "FabricIngress.forwarding.set_int_drop_reason"],
+          "base_default_next" : "tbl_hasher17",
+          "next_tables" : {
+            "FabricIngress.forwarding.set_next_id_routing_v6" : "tbl_hasher17",
+            "FabricIngress.forwarding.drop_routing_v6" : "tbl_hasher17",
+            "FabricIngress.forwarding.set_int_drop_reason" : "tbl_hasher17"
+          },
+          "default_entry" : {
+            "action_id" : 16,
+            "action_const" : false,
+            "action_data" : ["0x1d"],
+            "action_entry_const" : false
+          }
+        },
+        {
+          "name" : "tbl_hasher17",
+          "id" : 25,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 17,
+            "column" : 8,
+            "source_fragment" : "hash( ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [68],
+          "actions" : ["hasher17"],
+          "base_default_next" : "node_45",
+          "next_tables" : {
+            "hasher17" : "node_45"
+          },
+          "default_entry" : {
+            "action_id" : 68,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_hasher39",
+          "id" : 26,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 39,
+            "column" : 12,
+            "source_fragment" : "hash( ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [65],
+          "actions" : ["hasher39"],
+          "base_default_next" : "node_50",
+          "next_tables" : {
+            "hasher39" : "node_50"
+          },
+          "default_entry" : {
+            "action_id" : 65,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_hasher50",
+          "id" : 27,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 50,
+            "column" : 32,
+            "source_fragment" : "="
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [66],
+          "actions" : ["hasher50"],
+          "base_default_next" : "node_50",
+          "next_tables" : {
+            "hasher50" : "node_50"
+          },
+          "default_entry" : {
+            "action_id" : 66,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_hasher66",
+          "id" : 28,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 66,
+            "column" : 46,
+            "source_fragment" : "= 0; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [67],
+          "actions" : ["hasher66"],
+          "base_default_next" : "node_50",
+          "next_tables" : {
+            "hasher66" : "node_50"
+          },
+          "default_entry" : {
+            "action_id" : 67,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.pre_next.next_mpls",
+          "id" : 29,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/pre_next.p4",
+            "line" : 22,
+            "column" : 10,
+            "source_fragment" : "next_mpls"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._ingress_next_id21"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [24, 0],
+          "actions" : ["FabricIngress.pre_next.set_mpls_label", "nop"],
+          "base_default_next" : "FabricIngress.pre_next.next_vlan",
+          "next_tables" : {
+            "FabricIngress.pre_next.set_mpls_label" : "FabricIngress.pre_next.next_vlan",
+            "nop" : "FabricIngress.pre_next.next_vlan"
+          },
+          "default_entry" : {
+            "action_id" : 0,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.pre_next.next_vlan",
+          "id" : 30,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/pre_next.p4",
+            "line" : 54,
+            "column" : 10,
+            "source_fragment" : "next_vlan"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._ingress_next_id21"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [25, 1],
+          "actions" : ["FabricIngress.pre_next.set_vlan", "nop"],
+          "base_default_next" : "FabricIngress.acl.acl",
+          "next_tables" : {
+            "FabricIngress.pre_next.set_vlan" : "FabricIngress.acl.acl",
+            "nop" : "FabricIngress.acl.acl"
+          },
+          "default_entry" : {
+            "action_id" : 1,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.acl.acl",
+          "id" : 31,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4",
+            "line" : 74,
+            "column" : 10,
+            "source_fragment" : "acl"
+          },
+          "key" : [
+            {
+              "match_type" : "ternary",
+              "name" : "ig_port",
+              "target" : ["_ingress_bridged4", "_base_ig_port3"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "eth_dst",
+              "target" : ["_ingress_ethernet3", "dst_addr"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "eth_src",
+              "target" : ["_ingress_ethernet3", "src_addr"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "vlan_id",
+              "target" : ["scalars", "userMetadata._ingress_lkp_vlan_id9"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "eth_type",
+              "target" : ["scalars", "userMetadata._ingress_lkp_eth_type8"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "ipv4_src",
+              "target" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "ipv4_dst",
+              "target" : ["scalars", "userMetadata._ingress_lkp_ipv4_dst12"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "ip_proto",
+              "target" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "icmp_type",
+              "target" : ["scalars", "userMetadata._ingress_lkp_icmp_type16"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "icmp_code",
+              "target" : ["scalars", "userMetadata._ingress_lkp_icmp_code17"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "l4_sport",
+              "target" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "l4_dport",
+              "target" : ["scalars", "userMetadata._ingress_lkp_l4_dport15"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "ig_port_type",
+              "target" : ["scalars", "userMetadata._ingress_ig_port_type33"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "ternary",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [26, 28, 27, 29, 30, 31],
+          "actions" : ["FabricIngress.acl.set_next_id_acl", "FabricIngress.acl.punt_to_cpu", "FabricIngress.acl.copy_to_cpu", "FabricIngress.acl.drop", "FabricIngress.acl.set_output_port", "FabricIngress.acl.nop_acl"],
+          "base_default_next" : "node_54",
+          "next_tables" : {
+            "FabricIngress.acl.set_next_id_acl" : "node_54",
+            "FabricIngress.acl.punt_to_cpu" : "node_54",
+            "FabricIngress.acl.copy_to_cpu" : "node_54",
+            "FabricIngress.acl.drop" : "node_54",
+            "FabricIngress.acl.set_output_port" : "node_54",
+            "FabricIngress.acl.nop_acl" : "node_54"
+          },
+          "default_entry" : {
+            "action_id" : 31,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.next.simple",
+          "id" : 32,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 88,
+            "column" : 10,
+            "source_fragment" : "simple"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._ingress_next_id21"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [32, 33, 2],
+          "actions" : ["FabricIngress.next.output_simple", "FabricIngress.next.routing_simple", "nop"],
+          "base_default_next" : "FabricIngress.next.hashed",
+          "next_tables" : {
+            "FabricIngress.next.output_simple" : "FabricIngress.next.hashed",
+            "FabricIngress.next.routing_simple" : "FabricIngress.next.hashed",
+            "nop" : "FabricIngress.next.hashed"
+          },
+          "default_entry" : {
+            "action_id" : 2,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.next.hashed",
+          "id" : 33,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 127,
+            "column" : 10,
+            "source_fragment" : "hashed"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._ingress_next_id21"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "indirect_ws",
+          "action_profile" : "FabricIngress.next.hashed_profile",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [34, 35, 3],
+          "actions" : ["FabricIngress.next.output_hashed", "FabricIngress.next.routing_hashed", "nop"],
+          "base_default_next" : "FabricIngress.next.multicast",
+          "next_tables" : {
+            "FabricIngress.next.output_hashed" : "FabricIngress.next.multicast",
+            "FabricIngress.next.routing_hashed" : "FabricIngress.next.multicast",
+            "nop" : "FabricIngress.next.multicast"
+          }
+        },
+        {
+          "name" : "FabricIngress.next.multicast",
+          "id" : 34,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 161,
+            "column" : 10,
+            "source_fragment" : "multicast"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "next_id",
+              "target" : ["scalars", "userMetadata._ingress_next_id21"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [36, 37],
+          "actions" : ["FabricIngress.next.set_mcast_group_id", "FabricIngress.next.reset_mcast_group_id"],
+          "base_default_next" : "FabricIngress.qos.set_slice_tc",
+          "next_tables" : {
+            "FabricIngress.next.set_mcast_group_id" : "FabricIngress.qos.set_slice_tc",
+            "FabricIngress.next.reset_mcast_group_id" : "FabricIngress.qos.set_slice_tc"
+          },
+          "default_entry" : {
+            "action_id" : 37,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.qos.set_slice_tc",
+          "id" : 35,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 91,
+            "column" : 10,
+            "source_fragment" : "set_slice_tc"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "fabric_md.is_upf_hit",
+              "target" : ["scalars", "userMetadata._ingress_is_upf_hit29"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 2,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [41, 42, 6],
+          "actions" : ["FabricIngress.qos.use_upf", "FabricIngress.qos.use_default", "NoAction"],
+          "base_default_next" : "FabricIngress.qos.default_tc",
+          "next_tables" : {
+            "FabricIngress.qos.use_upf" : "FabricIngress.qos.default_tc",
+            "FabricIngress.qos.use_default" : "FabricIngress.qos.default_tc",
+            "NoAction" : "FabricIngress.qos.default_tc"
+          },
+          "default_entry" : {
+            "action_id" : 6,
+            "action_const" : false,
+            "action_data" : [],
+            "action_entry_const" : false
+          },
+          "entries" : [
+            {
+              "source_info" : {
+                "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+                "line" : 96,
+                "column" : 12,
+                "source_fragment" : "true: use_upf"
+              },
+              "match_key" : [
+                {
+                  "match_type" : "exact",
+                  "key" : "0x01"
+                }
+              ],
+              "action_entry" : {
+                "action_id" : 41,
+                "action_data" : []
+              },
+              "priority" : 1
+            },
+            {
+              "source_info" : {
+                "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+                "line" : 97,
+                "column" : 12,
+                "source_fragment" : "false: use_default"
+              },
+              "match_key" : [
+                {
+                  "match_type" : "exact",
+                  "key" : "0x00"
+                }
+              ],
+              "action_entry" : {
+                "action_id" : 42,
+                "action_data" : []
+              },
+              "priority" : 2
+            }
+          ]
+        },
+        {
+          "name" : "FabricIngress.qos.default_tc",
+          "id" : 36,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 150,
+            "column" : 10,
+            "source_fragment" : "default_tc"
+          },
+          "key" : [
+            {
+              "match_type" : "ternary",
+              "name" : "slice_tc",
+              "target" : ["_ingress_bridged4", "_base_slice_tc12"],
+              "mask" : null
+            },
+            {
+              "match_type" : "exact",
+              "name" : "tc_unknown",
+              "target" : ["scalars", "userMetadata._ingress_tc_unknown28"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "ternary",
+          "type" : "simple",
+          "max_size" : 16,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [45, 4],
+          "actions" : ["FabricIngress.qos.set_default_tc", "nop"],
+          "base_default_next" : "node_60",
+          "next_tables" : {
+            "FabricIngress.qos.set_default_tc" : "node_60",
+            "nop" : "node_60"
+          },
+          "default_entry" : {
+            "action_id" : 4,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_slicing174",
+          "id" : 37,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 174,
+            "column" : 12,
+            "source_fragment" : "slice_tc_meter.execute_meter((bit<32>) fabric_md.bridged.base.slice_tc, packet_color)"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [69],
+          "actions" : ["slicing174"],
+          "base_default_next" : "FabricIngress.qos.queues",
+          "next_tables" : {
+            "slicing174" : "FabricIngress.qos.queues"
+          },
+          "default_entry" : {
+            "action_id" : 69,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_slicing177",
+          "id" : 38,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 177,
+            "column" : 25,
+            "source_fragment" : "="
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [70],
+          "actions" : ["slicing177"],
+          "base_default_next" : "FabricIngress.qos.queues",
+          "next_tables" : {
+            "slicing177" : "FabricIngress.qos.queues"
+          },
+          "default_entry" : {
+            "action_id" : 70,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.qos.queues",
+          "id" : 39,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 122,
+            "column" : 10,
+            "source_fragment" : "queues"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "slice_tc",
+              "target" : ["_ingress_bridged4", "_base_slice_tc12"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "color",
+              "target" : ["scalars", "qos_packet_color"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "ternary",
+          "type" : "simple",
+          "max_size" : 128,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [43, 44],
+          "actions" : ["FabricIngress.qos.set_queue", "FabricIngress.qos.meter_drop"],
+          "base_default_next" : "tbl_int112",
+          "next_tables" : {
+            "FabricIngress.qos.set_queue" : "tbl_int112",
+            "FabricIngress.qos.meter_drop" : "tbl_int112"
+          },
+          "default_entry" : {
+            "action_id" : 43,
+            "action_const" : true,
+            "action_data" : ["0x0"],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_int112",
+          "id" : 40,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 112,
+            "column" : 46,
+            "source_fragment" : "= standard_md.egress_spec; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [71],
+          "actions" : ["int112"],
+          "base_default_next" : "FabricIngress.int_ingress.drop_report",
+          "next_tables" : {
+            "int112" : "FabricIngress.int_ingress.drop_report"
+          },
+          "default_entry" : {
+            "action_id" : 71,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricIngress.int_ingress.drop_report",
+          "id" : 41,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 86,
+            "column" : 10,
+            "source_fragment" : "drop_report"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "int_report_type",
+              "target" : ["_ingress_bridged4", "_int_bmd_report_type13"],
+              "mask" : null
+            },
+            {
+              "match_type" : "exact",
+              "name" : "drop_ctl",
+              "target" : ["scalars", "userMetadata._drop_ctl2"],
+              "mask" : null
+            },
+            {
+              "match_type" : "exact",
+              "name" : "punt_to_cpu",
+              "target" : ["scalars", "userMetadata._ingress_punt_to_cpu23"],
+              "mask" : null
+            },
+            {
+              "match_type" : "exact",
+              "name" : "egress_port_set",
+              "target" : ["scalars", "userMetadata._ingress_egress_port_set22"],
+              "mask" : null
+            },
+            {
+              "match_type" : "ternary",
+              "name" : "mcast_group_id",
+              "target" : ["standard_metadata", "mcast_grp"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "ternary",
+          "type" : "simple",
+          "max_size" : 3,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [49, 5],
+          "actions" : ["FabricIngress.int_ingress.report_drop", "nop"],
+          "base_default_next" : "tbl_fabric_v1model106",
+          "next_tables" : {
+            "FabricIngress.int_ingress.report_drop" : "tbl_fabric_v1model106",
+            "nop" : "tbl_fabric_v1model106"
+          },
+          "default_entry" : {
+            "action_id" : 5,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          },
+          "entries" : [
+            {
+              "source_info" : {
+                "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+                "line" : 101,
+                "column" : 12,
+                "source_fragment" : "(INT_REPORT_TYPE_FLOW, 1, false, false, _): report_drop()"
+              },
+              "match_key" : [
+                {
+                  "match_type" : "exact",
+                  "key" : "0x01"
+                },
+                {
+                  "match_type" : "exact",
+                  "key" : "0x01"
+                },
+                {
+                  "match_type" : "exact",
+                  "key" : "0x00"
+                },
+                {
+                  "match_type" : "exact",
+                  "key" : "0x00"
+                },
+                {
+                  "match_type" : "ternary",
+                  "key" : "0x0000",
+                  "mask" : "0x0000"
+                }
+              ],
+              "action_entry" : {
+                "action_id" : 49,
+                "action_data" : []
+              },
+              "priority" : 1
+            },
+            {
+              "source_info" : {
+                "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+                "line" : 102,
+                "column" : 12,
+                "source_fragment" : "(INT_REPORT_TYPE_FLOW, 1, false, true, _): report_drop()"
+              },
+              "match_key" : [
+                {
+                  "match_type" : "exact",
+                  "key" : "0x01"
+                },
+                {
+                  "match_type" : "exact",
+                  "key" : "0x01"
+                },
+                {
+                  "match_type" : "exact",
+                  "key" : "0x00"
+                },
+                {
+                  "match_type" : "exact",
+                  "key" : "0x01"
+                },
+                {
+                  "match_type" : "ternary",
+                  "key" : "0x0000",
+                  "mask" : "0x0000"
+                }
+              ],
+              "action_entry" : {
+                "action_id" : 49,
+                "action_data" : []
+              },
+              "priority" : 2
+            },
+            {
+              "source_info" : {
+                "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+                "line" : 104,
+                "column" : 12,
+                "source_fragment" : "(INT_REPORT_TYPE_FLOW, 0, false, false, 0): report_drop()"
+              },
+              "match_key" : [
+                {
+                  "match_type" : "exact",
+                  "key" : "0x01"
+                },
+                {
+                  "match_type" : "exact",
+                  "key" : "0x00"
+                },
+                {
+                  "match_type" : "exact",
+                  "key" : "0x00"
+                },
+                {
+                  "match_type" : "exact",
+                  "key" : "0x00"
+                },
+                {
+                  "match_type" : "ternary",
+                  "key" : "0x0000",
+                  "mask" : "0xffff"
+                }
+              ],
+              "action_entry" : {
+                "action_id" : 49,
+                "action_data" : []
+              },
+              "priority" : 3
+            }
+          ]
+        },
+        {
+          "name" : "tbl_fabric_v1model106",
+          "id" : 42,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 106,
+            "column" : 33,
+            "source_fragment" : "="
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [73],
+          "actions" : ["fabric_v1model106"],
+          "base_default_next" : "node_67",
+          "next_tables" : {
+            "fabric_v1model106" : "node_67"
+          },
+          "default_entry" : {
+            "action_id" : 73,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_fabric_v1model110",
+          "id" : 43,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 110,
+            "column" : 12,
+            "source_fragment" : "mark_to_drop(standard_md)"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [72],
+          "actions" : ["fabric_v1model110"],
+          "base_default_next" : null,
+          "next_tables" : {
+            "fabric_v1model110" : null
+          },
+          "default_entry" : {
+            "action_id" : 72,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        }
+      ],
+      "action_profiles" : [
+        {
+          "name" : "FabricIngress.next.hashed_profile",
+          "id" : 0,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 112,
+            "column" : 15,
+            "source_fragment" : "hashed_profile"
+          },
+          "max_size" : 16,
+          "selector" : {
+            "algo" : "crc16",
+            "input" : [
+              {
+                "type" : "field",
+                "value" : ["scalars", "userMetadata._ingress_ecmp_hash5"]
+              }
+            ]
+          }
+        }
+      ],
+      "conditionals" : [
+        {
+          "name" : "node_3",
+          "id" : 0,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 62,
+            "column" : 12,
+            "source_fragment" : "standard_md.parser_error == error.PacketRejectedByParser"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "==",
+              "left" : {
+                "type" : "field",
+                "value" : ["standard_metadata", "parser_error"]
+              },
+              "right" : {
+                "type" : "hexstr",
+                "value" : "0x8"
+              }
+            }
+          },
+          "true_next" : "tbl_fabric_v1model64",
+          "false_next" : "node_5"
+        },
+        {
+          "name" : "node_5",
+          "id" : 1,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 67,
+            "column" : 13,
+            "source_fragment" : "standard_md.instance_type == 4"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "==",
+              "left" : {
+                "type" : "field",
+                "value" : ["standard_metadata", "instance_type"]
+              },
+              "right" : {
+                "type" : "hexstr",
+                "value" : "0x00000004"
+              }
+            }
+          },
+          "true_next" : "tbl_fabric_v1model70",
+          "false_next" : "tbl_lookup_md_init15"
+        },
+        {
+          "name" : "node_8",
+          "id" : 2,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 20,
+            "column" : 12,
+            "source_fragment" : "hdr.vlan_tag.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["_ingress_vlan_tag4", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "tbl_lookup_md_init21",
+          "false_next" : "tbl_lookup_md_init24"
+        },
+        {
+          "name" : "node_11",
+          "id" : 3,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 32,
+            "column" : 12,
+            "source_fragment" : "hdr.inner_ipv4.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["_ingress_inner_ipv418", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "tbl_lookup_md_init33",
+          "false_next" : "node_19"
+        },
+        {
+          "name" : "node_13",
+          "id" : 4,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 37,
+            "column" : 16,
+            "source_fragment" : "hdr.inner_tcp.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["_ingress_inner_tcp19", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "tbl_lookup_md_init38",
+          "false_next" : "node_15"
+        },
+        {
+          "name" : "node_15",
+          "id" : 5,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 40,
+            "column" : 23,
+            "source_fragment" : "hdr.inner_udp.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["_ingress_inner_udp20", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "tbl_lookup_md_init41",
+          "false_next" : "node_17"
+        },
+        {
+          "name" : "node_17",
+          "id" : 6,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 43,
+            "column" : 23,
+            "source_fragment" : "hdr.inner_icmp.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["_ingress_inner_icmp21", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "tbl_lookup_md_init44",
+          "false_next" : "node_27"
+        },
+        {
+          "name" : "node_19",
+          "id" : 7,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 47,
+            "column" : 19,
+            "source_fragment" : "hdr.ipv4.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["_ingress_ipv47", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "tbl_lookup_md_init48",
+          "false_next" : "node_27"
+        },
+        {
+          "name" : "node_21",
+          "id" : 8,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 52,
+            "column" : 16,
+            "source_fragment" : "hdr.tcp.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["_ingress_tcp9", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "tbl_lookup_md_init53",
+          "false_next" : "node_23"
+        },
+        {
+          "name" : "node_23",
+          "id" : 9,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 55,
+            "column" : 23,
+            "source_fragment" : "hdr.udp.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["_ingress_udp10", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "tbl_lookup_md_init56",
+          "false_next" : "node_25"
+        },
+        {
+          "name" : "node_25",
+          "id" : 10,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4",
+            "line" : 58,
+            "column" : 23,
+            "source_fragment" : "hdr.icmp.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["_ingress_icmp11", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "tbl_lookup_md_init59",
+          "false_next" : "node_27"
+        },
+        {
+          "name" : "node_27",
+          "id" : 11,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 24,
+            "column" : 12,
+            "source_fragment" : "hdr.packet_out.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["_ingress_packet_out0", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "tbl_pkt_io_do_packet_out",
+          "false_next" : "FabricIngress.int_watchlist.watchlist"
+        },
+        {
+          "name" : "node_35",
+          "id" : 12,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 88,
+            "column" : 13,
+            "source_fragment" : "fabric_md"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["scalars", "userMetadata._ingress_skip_forwarding19"]
+              }
+            }
+          },
+          "false_next" : "node_36",
+          "true_next" : "tbl_hasher17"
+        },
+        {
+          "name" : "node_36",
+          "id" : 13,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 178,
+            "column" : 12,
+            "source_fragment" : "hdr.ethernet.isValid() && ..."
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "and",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["_ingress_ethernet3", "$valid$"]
+                  }
+                }
+              },
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "==",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_ingress_bridged4", "_base_fwd_type5"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x00"
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "FabricIngress.forwarding.bridging",
+          "false_next" : "node_38"
+        },
+        {
+          "name" : "node_38",
+          "id" : 14,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 181,
+            "column" : 19,
+            "source_fragment" : "hdr.mpls.isValid() && ..."
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "and",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["_ingress_mpls6", "$valid$"]
+                  }
+                }
+              },
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "==",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_ingress_bridged4", "_base_fwd_type5"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x01"
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "FabricIngress.forwarding.mpls",
+          "false_next" : "node_40"
+        },
+        {
+          "name" : "node_40",
+          "id" : 15,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 184,
+            "column" : 19,
+            "source_fragment" : "fabric_md.lkp.is_ipv4 && ..."
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "and",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["scalars", "userMetadata._ingress_lkp_is_ipv410"]
+                  }
+                }
+              },
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "or",
+                  "left" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "==",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["_ingress_bridged4", "_base_fwd_type5"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x02"
+                      }
+                    }
+                  },
+                  "right" : {
+                    "type" : "expression",
+                    "value" : {
+                      "op" : "==",
+                      "left" : {
+                        "type" : "field",
+                        "value" : ["_ingress_bridged4", "_base_fwd_type5"]
+                      },
+                      "right" : {
+                        "type" : "hexstr",
+                        "value" : "0x03"
+                      }
+                    }
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "FabricIngress.forwarding.routing_v4",
+          "false_next" : "node_42"
+        },
+        {
+          "name" : "node_42",
+          "id" : 16,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4",
+            "line" : 188,
+            "column" : 19,
+            "source_fragment" : "hdr.ipv6.isValid() && ..."
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "and",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["_ingress_ipv68", "$valid$"]
+                  }
+                }
+              },
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "==",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_ingress_bridged4", "_base_fwd_type5"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x04"
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "FabricIngress.forwarding.routing_v6",
+          "false_next" : "tbl_hasher17"
+        },
+        {
+          "name" : "node_45",
+          "id" : 17,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4",
+            "line" : 38,
+            "column" : 12,
+            "source_fragment" : "hdr.gtpu.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["_ingress_gtpu12", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "tbl_hasher39",
+          "false_next" : "node_47"
+        },
+        {
+          "name" : "node_47",
+          "id" : 18,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 91,
+            "column" : 34,
+            "source_fragment" : "fabric_md"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["scalars", "userMetadata._ingress_lkp_is_ipv410"]
+              }
+            }
+          },
+          "true_next" : "tbl_hasher50",
+          "false_next" : "tbl_hasher66"
+        },
+        {
+          "name" : "node_50",
+          "id" : 19,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 92,
+            "column" : 13,
+            "source_fragment" : "fabric_md"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["scalars", "userMetadata._ingress_skip_next20"]
+              }
+            }
+          },
+          "false_next" : "FabricIngress.pre_next.next_mpls",
+          "true_next" : "FabricIngress.acl.acl"
+        },
+        {
+          "name" : "node_54",
+          "id" : 20,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 96,
+            "column" : 13,
+            "source_fragment" : "fabric_md"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["scalars", "userMetadata._ingress_skip_next20"]
+              }
+            }
+          },
+          "false_next" : "FabricIngress.next.simple",
+          "true_next" : "FabricIngress.qos.set_slice_tc"
+        },
+        {
+          "name" : "node_60",
+          "id" : 21,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 173,
+            "column" : 12,
+            "source_fragment" : "fabric_md.upf_meter_color != MeterColor_t.RED"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "!=",
+              "left" : {
+                "type" : "field",
+                "value" : ["scalars", "userMetadata._ingress_upf_meter_color32"]
+              },
+              "right" : {
+                "type" : "hexstr",
+                "value" : "0x02"
+              }
+            }
+          },
+          "true_next" : "tbl_slicing174",
+          "false_next" : "tbl_slicing177"
+        },
+        {
+          "name" : "node_67",
+          "id" : 22,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 109,
+            "column" : 12,
+            "source_fragment" : "fabric_md.drop_ctl == 1"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "==",
+              "left" : {
+                "type" : "field",
+                "value" : ["scalars", "userMetadata._drop_ctl2"]
+              },
+              "right" : {
+                "type" : "hexstr",
+                "value" : "0x01"
+              }
+            }
+          },
+          "false_next" : null,
+          "true_next" : "tbl_fabric_v1model110"
+        }
+      ]
+    },
+    {
+      "name" : "egress",
+      "id" : 1,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+        "line" : 115,
+        "column" : 8,
+        "source_fragment" : "FabricEgress"
+      },
+      "init_table" : "tbl_fabric_v1model133",
+      "tables" : [
+        {
+          "name" : "tbl_fabric_v1model133",
+          "id" : 44,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 133,
+            "column" : 34,
+            "source_fragment" : "="
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [103],
+          "actions" : ["fabric_v1model133"],
+          "base_default_next" : "node_72",
+          "next_tables" : {
+            "fabric_v1model133" : "node_72"
+          },
+          "default_entry" : {
+            "action_id" : 103,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_fabric_v1model136",
+          "id" : 45,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 136,
+            "column" : 12,
+            "source_fragment" : "exit"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [102],
+          "actions" : ["fabric_v1model136"],
+          "base_default_next" : "node_74",
+          "next_tables" : {
+            "fabric_v1model136" : "node_74"
+          },
+          "default_entry" : {
+            "action_id" : 102,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_int_tna_parser_emulator14",
+          "id" : 46,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [105],
+          "actions" : ["int_tna_parser_emulator14"],
+          "base_default_next" : "node_76",
+          "next_tables" : {
+            "int_tna_parser_emulator14" : "node_76"
+          },
+          "default_entry" : {
+            "action_id" : 105,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_int_tna_parser_emulator148",
+          "id" : 47,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 148,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.ipv4.setInvalid(); ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [104],
+          "actions" : ["int_tna_parser_emulator148"],
+          "base_default_next" : "node_78",
+          "next_tables" : {
+            "int_tna_parser_emulator148" : "node_78"
+          },
+          "default_entry" : {
+            "action_id" : 104,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_parser_emulator_parse_int_ingress_drop",
+          "id" : 48,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 165,
+            "column" : 12,
+            "source_fragment" : "parse_int_ingress_drop()"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [89],
+          "actions" : ["FabricEgress.parser_emulator.parse_int_ingress_drop"],
+          "base_default_next" : "tbl_int_tna_parser_emulator166",
+          "next_tables" : {
+            "FabricEgress.parser_emulator.parse_int_ingress_drop" : "tbl_int_tna_parser_emulator166"
+          },
+          "default_entry" : {
+            "action_id" : 89,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_int_tna_parser_emulator166",
+          "id" : 49,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 166,
+            "column" : 12,
+            "source_fragment" : "recirculate_preserving_field_list(NO_PRESERVATION)"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [106],
+          "actions" : ["int_tna_parser_emulator166"],
+          "base_default_next" : "tbl_int_tna_parser_emulator173",
+          "next_tables" : {
+            "int_tna_parser_emulator166" : "tbl_int_tna_parser_emulator173"
+          },
+          "default_entry" : {
+            "action_id" : 106,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_parser_emulator_parse_int_report_mirror",
+          "id" : 50,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 168,
+            "column" : 12,
+            "source_fragment" : "parse_int_report_mirror()"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [91],
+          "actions" : ["FabricEgress.parser_emulator.parse_int_report_mirror"],
+          "base_default_next" : "tbl_int_tna_parser_emulator169",
+          "next_tables" : {
+            "FabricEgress.parser_emulator.parse_int_report_mirror" : "tbl_int_tna_parser_emulator169"
+          },
+          "default_entry" : {
+            "action_id" : 91,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_int_tna_parser_emulator169",
+          "id" : 51,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 169,
+            "column" : 12,
+            "source_fragment" : "recirculate_preserving_field_list(PRESERVE_INT_MD)"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [107],
+          "actions" : ["int_tna_parser_emulator169"],
+          "base_default_next" : "tbl_int_tna_parser_emulator173",
+          "next_tables" : {
+            "int_tna_parser_emulator169" : "tbl_int_tna_parser_emulator173"
+          },
+          "default_entry" : {
+            "action_id" : 107,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_int_tna_parser_emulator173",
+          "id" : 52,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "="
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [108],
+          "actions" : ["int_tna_parser_emulator173"],
+          "base_default_next" : "node_84",
+          "next_tables" : {
+            "int_tna_parser_emulator173" : "node_84"
+          },
+          "default_entry" : {
+            "action_id" : 108,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_int_tna_parser_emulator14_0",
+          "id" : 53,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 14,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [110],
+          "actions" : ["int_tna_parser_emulator14_0"],
+          "base_default_next" : "node_86",
+          "next_tables" : {
+            "int_tna_parser_emulator14_0" : "node_86"
+          },
+          "default_entry" : {
+            "action_id" : 110,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_int_tna_parser_emulator148_0",
+          "id" : 54,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 148,
+            "column" : 12,
+            "source_fragment" : "hdr_v1model.ingress.ipv4.setInvalid(); ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [109],
+          "actions" : ["int_tna_parser_emulator148_0"],
+          "base_default_next" : "node_88",
+          "next_tables" : {
+            "int_tna_parser_emulator148_0" : "node_88"
+          },
+          "default_entry" : {
+            "action_id" : 109,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_parser_emulator_parse_int_ingress_drop_0",
+          "id" : 55,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 165,
+            "column" : 12,
+            "source_fragment" : "parse_int_ingress_drop()"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [90],
+          "actions" : ["FabricEgress.parser_emulator.parse_int_ingress_drop"],
+          "base_default_next" : "tbl_int_tna_parser_emulator166_0",
+          "next_tables" : {
+            "FabricEgress.parser_emulator.parse_int_ingress_drop" : "tbl_int_tna_parser_emulator166_0"
+          },
+          "default_entry" : {
+            "action_id" : 90,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_int_tna_parser_emulator166_0",
+          "id" : 56,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 166,
+            "column" : 12,
+            "source_fragment" : "recirculate_preserving_field_list(NO_PRESERVATION)"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [111],
+          "actions" : ["int_tna_parser_emulator166_0"],
+          "base_default_next" : "tbl_int_tna_parser_emulator173_0",
+          "next_tables" : {
+            "int_tna_parser_emulator166_0" : "tbl_int_tna_parser_emulator173_0"
+          },
+          "default_entry" : {
+            "action_id" : 111,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_parser_emulator_parse_int_report_mirror_0",
+          "id" : 57,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 168,
+            "column" : 12,
+            "source_fragment" : "parse_int_report_mirror()"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [92],
+          "actions" : ["FabricEgress.parser_emulator.parse_int_report_mirror"],
+          "base_default_next" : "tbl_int_tna_parser_emulator169_0",
+          "next_tables" : {
+            "FabricEgress.parser_emulator.parse_int_report_mirror" : "tbl_int_tna_parser_emulator169_0"
+          },
+          "default_entry" : {
+            "action_id" : 92,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_int_tna_parser_emulator169_0",
+          "id" : 58,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 169,
+            "column" : 12,
+            "source_fragment" : "recirculate_preserving_field_list(PRESERVE_INT_MD)"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [112],
+          "actions" : ["int_tna_parser_emulator169_0"],
+          "base_default_next" : "tbl_int_tna_parser_emulator173_0",
+          "next_tables" : {
+            "int_tna_parser_emulator169_0" : "tbl_int_tna_parser_emulator173_0"
+          },
+          "default_entry" : {
+            "action_id" : 112,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_int_tna_parser_emulator173_0",
+          "id" : 59,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 173,
+            "column" : 27,
+            "source_fragment" : "="
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [113],
+          "actions" : ["int_tna_parser_emulator173_0"],
+          "base_default_next" : "FabricEgress.pkt_io_egress.switch_info",
+          "next_tables" : {
+            "int_tna_parser_emulator173_0" : "FabricEgress.pkt_io_egress.switch_info"
+          },
+          "default_entry" : {
+            "action_id" : 113,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricEgress.pkt_io_egress.switch_info",
+          "id" : 60,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 39,
+            "column" : 10,
+            "source_fragment" : "switch_info"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [81, 74],
+          "actions" : ["FabricEgress.pkt_io_egress.set_switch_info", "nop"],
+          "base_default_next" : "node_95",
+          "next_tables" : {
+            "FabricEgress.pkt_io_egress.set_switch_info" : "node_95",
+            "nop" : "node_95"
+          },
+          "default_entry" : {
+            "action_id" : 74,
+            "action_const" : false,
+            "action_data" : [],
+            "action_entry_const" : false
+          }
+        },
+        {
+          "name" : "tbl_packetio51",
+          "id" : 61,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 51,
+            "column" : 12,
+            "source_fragment" : "hdr.packet_in.setValid(); ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [114],
+          "actions" : ["packetio51"],
+          "base_default_next" : "node_97",
+          "next_tables" : {
+            "packetio51" : "node_97"
+          },
+          "default_entry" : {
+            "action_id" : 114,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_packetio60",
+          "id" : 62,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 60,
+            "column" : 37,
+            "source_fragment" : "="
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [115],
+          "actions" : ["packetio60"],
+          "base_default_next" : "node_99",
+          "next_tables" : {
+            "packetio60" : "node_99"
+          },
+          "default_entry" : {
+            "action_id" : 115,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricEgress.stats.flows",
+          "id" : 63,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/stats.p4",
+            "line" : 53,
+            "column" : 10,
+            "source_fragment" : "flows"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "stats_flow_id",
+              "target" : ["_egress_bridged36", "_base_stats_flow_id11"],
+              "mask" : null
+            },
+            {
+              "match_type" : "exact",
+              "name" : "eg_port",
+              "target" : ["standard_metadata", "egress_port"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [80],
+          "actions" : ["FabricEgress.stats.count"],
+          "base_default_next" : "node_101",
+          "next_tables" : {
+            "FabricEgress.stats.count" : "node_101"
+          },
+          "default_entry" : {
+            "action_id" : 80,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_next283",
+          "id" : 64,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 283,
+            "column" : 50,
+            "source_fragment" : "= INT_REPORT_TYPE_NO_REPORT; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [116],
+          "actions" : ["next283"],
+          "base_default_next" : "node_103",
+          "next_tables" : {
+            "next283" : "node_103"
+          },
+          "default_entry" : {
+            "action_id" : 116,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_egress_next_pop_mpls_if_present",
+          "id" : 65,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 289,
+            "column" : 36,
+            "source_fragment" : "pop_mpls_if_present()"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [82],
+          "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"],
+          "base_default_next" : "node_107",
+          "next_tables" : {
+            "FabricEgress.egress_next.pop_mpls_if_present" : "node_107"
+          },
+          "default_entry" : {
+            "action_id" : 82,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_egress_next_set_mpls",
+          "id" : 66,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 291,
+            "column" : 12,
+            "source_fragment" : "set_mpls()"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [83],
+          "actions" : ["FabricEgress.egress_next.set_mpls"],
+          "base_default_next" : "node_107",
+          "next_tables" : {
+            "FabricEgress.egress_next.set_mpls" : "node_107"
+          },
+          "default_entry" : {
+            "action_id" : 83,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricEgress.egress_next.egress_vlan",
+          "id" : 67,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 264,
+            "column" : 10,
+            "source_fragment" : "egress_vlan"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "vlan_id",
+              "target" : ["_egress_bridged36", "_base_vlan_id6"],
+              "mask" : null
+            },
+            {
+              "match_type" : "exact",
+              "name" : "eg_port",
+              "target" : ["standard_metadata", "egress_port"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [84, 85, 86],
+          "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"],
+          "base_default_next" : "node_109",
+          "next_tables" : {
+            "FabricEgress.egress_next.push_vlan" : "node_109",
+            "FabricEgress.egress_next.pop_vlan" : "node_109",
+            "FabricEgress.egress_next.drop" : "node_109"
+          },
+          "default_entry" : {
+            "action_id" : 86,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_next323",
+          "id" : 68,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 323,
+            "column" : 25,
+            "source_fragment" : "="
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [118],
+          "actions" : ["next323"],
+          "base_default_next" : "node_111",
+          "next_tables" : {
+            "next323" : "node_111"
+          },
+          "default_entry" : {
+            "action_id" : 118,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_next325",
+          "id" : 69,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 325,
+            "column" : 25,
+            "source_fragment" : "= 1; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [117],
+          "actions" : ["next325"],
+          "base_default_next" : "tbl_int128",
+          "next_tables" : {
+            "next325" : "tbl_int128"
+          },
+          "default_entry" : {
+            "action_id" : 117,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_next333",
+          "id" : 70,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 333,
+            "column" : 33,
+            "source_fragment" : "="
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [119],
+          "actions" : ["next333"],
+          "base_default_next" : "node_116",
+          "next_tables" : {
+            "next333" : "node_116"
+          },
+          "default_entry" : {
+            "action_id" : 119,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_next336",
+          "id" : 71,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 336,
+            "column" : 29,
+            "source_fragment" : "= 1; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [120],
+          "actions" : ["next336"],
+          "base_default_next" : "tbl_int128",
+          "next_tables" : {
+            "next336" : "tbl_int128"
+          },
+          "default_entry" : {
+            "action_id" : 120,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_next343",
+          "id" : 72,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 343,
+            "column" : 39,
+            "source_fragment" : "="
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [121],
+          "actions" : ["next343"],
+          "base_default_next" : "node_121",
+          "next_tables" : {
+            "next343" : "node_121"
+          },
+          "default_entry" : {
+            "action_id" : 121,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_next346",
+          "id" : 73,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 346,
+            "column" : 29,
+            "source_fragment" : "= 1; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [122],
+          "actions" : ["next346"],
+          "base_default_next" : "tbl_int128",
+          "next_tables" : {
+            "next346" : "tbl_int128"
+          },
+          "default_entry" : {
+            "action_id" : 122,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_int128",
+          "id" : 74,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 128,
+            "column" : 4,
+            "source_fragment" : "egress_headers_t hdr = hdr_v1model.egress; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [123],
+          "actions" : ["int128"],
+          "base_default_next" : "FabricEgress.int_egress.queue_latency_thresholds",
+          "next_tables" : {
+            "int128" : "FabricEgress.int_egress.queue_latency_thresholds"
+          },
+          "default_entry" : {
+            "action_id" : 123,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricEgress.int_egress.queue_latency_thresholds",
+          "id" : 75,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 159,
+            "column" : 10,
+            "source_fragment" : "queue_latency_thresholds"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "egress_qid",
+              "target" : ["scalars", "int_egress_egress_qid"],
+              "mask" : null
+            },
+            {
+              "match_type" : "range",
+              "name" : "hop_latency_upper",
+              "target" : ["scalars", "key_0"],
+              "mask" : null
+            },
+            {
+              "match_type" : "range",
+              "name" : "hop_latency_lower",
+              "target" : ["scalars", "key_1"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "range",
+          "type" : "simple",
+          "max_size" : 128,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [93, 94, 76],
+          "actions" : ["FabricEgress.int_egress.check_quota", "FabricEgress.int_egress.reset_quota", "nop"],
+          "base_default_next" : "FabricEgress.int_egress.config",
+          "next_tables" : {
+            "FabricEgress.int_egress.check_quota" : "FabricEgress.int_egress.config",
+            "FabricEgress.int_egress.reset_quota" : "FabricEgress.int_egress.config",
+            "nop" : "FabricEgress.int_egress.config"
+          },
+          "default_entry" : {
+            "action_id" : 76,
+            "action_const" : false,
+            "action_data" : [],
+            "action_entry_const" : false
+          }
+        },
+        {
+          "name" : "FabricEgress.int_egress.config",
+          "id" : 76,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 183,
+            "column" : 10,
+            "source_fragment" : "config"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [95],
+          "actions" : ["FabricEgress.int_egress.set_config"],
+          "base_default_next" : "tbl_int373",
+          "next_tables" : {
+            "FabricEgress.int_egress.set_config" : "tbl_int373"
+          },
+          "default_entry" : {
+            "action_id" : 95,
+            "action_const" : false,
+            "action_data" : ["0xffffff00", "0xffffc0000000"],
+            "action_entry_const" : false
+          }
+        },
+        {
+          "name" : "tbl_int373",
+          "id" : 77,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 373,
+            "column" : 38,
+            "source_fragment" : "="
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [125],
+          "actions" : ["int373"],
+          "base_default_next" : "node_127",
+          "next_tables" : {
+            "int373" : "node_127"
+          },
+          "default_entry" : {
+            "action_id" : 125,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricEgress.int_egress.report",
+          "id" : 78,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 260,
+            "column" : 10,
+            "source_fragment" : "report"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "bmd_type",
+              "target" : ["int_egress_fabric_md_int_report_md", "bmd_type"],
+              "mask" : null
+            },
+            {
+              "match_type" : "exact",
+              "name" : "mirror_type",
+              "target" : ["int_egress_fabric_md_int_report_md", "mirror_type"],
+              "mask" : null
+            },
+            {
+              "match_type" : "exact",
+              "name" : "int_report_type",
+              "target" : ["int_egress_fabric_md_int_report_md", "report_type"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 6,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [96, 97, 98, 99, 77],
+          "actions" : ["FabricEgress.int_egress.do_local_report_encap", "FabricEgress.int_egress.do_local_report_encap_mpls", "FabricEgress.int_egress.do_drop_report_encap", "FabricEgress.int_egress.do_drop_report_encap_mpls", "nop"],
+          "base_default_next" : "FabricEgress.int_egress.adjust_int_report_hdr_length",
+          "next_tables" : {
+            "FabricEgress.int_egress.do_local_report_encap" : "FabricEgress.int_egress.adjust_int_report_hdr_length",
+            "FabricEgress.int_egress.do_local_report_encap_mpls" : "FabricEgress.int_egress.adjust_int_report_hdr_length",
+            "FabricEgress.int_egress.do_drop_report_encap" : "FabricEgress.int_egress.adjust_int_report_hdr_length",
+            "FabricEgress.int_egress.do_drop_report_encap_mpls" : "FabricEgress.int_egress.adjust_int_report_hdr_length",
+            "nop" : "FabricEgress.int_egress.adjust_int_report_hdr_length"
+          },
+          "default_entry" : {
+            "action_id" : 77,
+            "action_const" : false,
+            "action_data" : [],
+            "action_entry_const" : false
+          }
+        },
+        {
+          "name" : "FabricEgress.int_egress.int_metadata",
+          "id" : 79,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 315,
+            "column" : 10,
+            "source_fragment" : "int_metadata"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "int_report_type",
+              "target" : ["_egress_bridged36", "_int_bmd_report_type13"],
+              "mask" : null
+            },
+            {
+              "match_type" : "exact",
+              "name" : "drop_ctl",
+              "target" : ["scalars", "userMetadata._drop_ctl2"],
+              "mask" : null
+            },
+            {
+              "match_type" : "exact",
+              "name" : "queue_report",
+              "target" : ["scalars", "userMetadata._egress_int_md_queue_report42"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 2,
+          "with_counters" : true,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [100, 78],
+          "actions" : ["FabricEgress.int_egress.init_int_metadata", "nop"],
+          "base_default_next" : null,
+          "next_tables" : {
+            "__HIT__" : "tbl_int383",
+            "__MISS__" : "FabricEgress.int_egress.adjust_int_report_hdr_length"
+          },
+          "default_entry" : {
+            "action_id" : 78,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          },
+          "entries" : [
+            {
+              "source_info" : {
+                "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+                "line" : 327,
+                "column" : 12,
+                "source_fragment" : "(INT_REPORT_TYPE_FLOW, 0, false): init_int_metadata(INT_REPORT_TYPE_FLOW)"
+              },
+              "match_key" : [
+                {
+                  "match_type" : "exact",
+                  "key" : "0x01"
+                },
+                {
+                  "match_type" : "exact",
+                  "key" : "0x00"
+                },
+                {
+                  "match_type" : "exact",
+                  "key" : "0x00"
+                }
+              ],
+              "action_entry" : {
+                "action_id" : 100,
+                "action_data" : ["0x1"]
+              },
+              "priority" : 1
+            },
+            {
+              "source_info" : {
+                "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+                "line" : 329,
+                "column" : 12,
+                "source_fragment" : "(INT_REPORT_TYPE_FLOW, 1, false): init_int_metadata(INT_REPORT_TYPE_DROP)"
+              },
+              "match_key" : [
+                {
+                  "match_type" : "exact",
+                  "key" : "0x01"
+                },
+                {
+                  "match_type" : "exact",
+                  "key" : "0x01"
+                },
+                {
+                  "match_type" : "exact",
+                  "key" : "0x00"
+                }
+              ],
+              "action_entry" : {
+                "action_id" : 100,
+                "action_data" : ["0x4"]
+              },
+              "priority" : 2
+            }
+          ]
+        },
+        {
+          "name" : "tbl_int383",
+          "id" : 80,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 383,
+            "column" : 16,
+            "source_fragment" : "clone_preserving_field_list(CloneType.E2E, ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [124],
+          "actions" : ["int383"],
+          "base_default_next" : "FabricEgress.int_egress.adjust_int_report_hdr_length",
+          "next_tables" : {
+            "int383" : "FabricEgress.int_egress.adjust_int_report_hdr_length"
+          },
+          "default_entry" : {
+            "action_id" : 124,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricEgress.int_egress.adjust_int_report_hdr_length",
+          "id" : 81,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 347,
+            "column" : 10,
+            "source_fragment" : "adjust_int_report_hdr_length"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "is_int_wip",
+              "target" : ["int_egress_fabric_md_bridged", "_int_bmd_wip_type18"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 2,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [79, 101],
+          "actions" : ["nop", "FabricEgress.int_egress.adjust_ip_udp_len"],
+          "base_default_next" : "tbl_slicing189",
+          "next_tables" : {
+            "nop" : "tbl_slicing189",
+            "FabricEgress.int_egress.adjust_ip_udp_len" : "tbl_slicing189"
+          },
+          "default_entry" : {
+            "action_id" : 79,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          },
+          "entries" : [
+            {
+              "source_info" : {
+                "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+                "line" : 358,
+                "column" : 12,
+                "source_fragment" : "INT_IS_WIP: adjust_ip_udp_len(INT_WIP_ADJUST_IP_BYTES, INT_WIP_ADJUST_UDP_BYTES)"
+              },
+              "match_key" : [
+                {
+                  "match_type" : "exact",
+                  "key" : "0x01"
+                }
+              ],
+              "action_entry" : {
+                "action_id" : 101,
+                "action_data" : ["0xfff2", "0xffde"]
+              },
+              "priority" : 1
+            },
+            {
+              "source_info" : {
+                "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+                "line" : 359,
+                "column" : 12,
+                "source_fragment" : "INT_IS_WIP_WITH_MPLS: adjust_ip_udp_len(INT_WIP_ADJUST_IP_MPLS_BYTES, INT_WIP_ADJUST_UDP_MPLS_BYTES)"
+              },
+              "match_key" : [
+                {
+                  "match_type" : "exact",
+                  "key" : "0x02"
+                }
+              ],
+              "action_entry" : {
+                "action_id" : 101,
+                "action_data" : ["0xffee", "0xffda"]
+              },
+              "priority" : 2
+            }
+          ]
+        },
+        {
+          "name" : "tbl_slicing189",
+          "id" : 82,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 189,
+            "column" : 4,
+            "source_fragment" : "bit<6> tmp_dscp = fabric_md.bridged.base.slice_tc; ..."
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [127],
+          "actions" : ["slicing189"],
+          "base_default_next" : "FabricEgress.dscp_rewriter.rewriter",
+          "next_tables" : {
+            "slicing189" : "FabricEgress.dscp_rewriter.rewriter"
+          },
+          "default_entry" : {
+            "action_id" : 127,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "FabricEgress.dscp_rewriter.rewriter",
+          "id" : 83,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 201,
+            "column" : 10,
+            "source_fragment" : "rewriter"
+          },
+          "key" : [
+            {
+              "match_type" : "exact",
+              "name" : "eg_port",
+              "target" : ["standard_metadata", "egress_port"],
+              "mask" : null
+            }
+          ],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 512,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [87, 88, 75],
+          "actions" : ["FabricEgress.dscp_rewriter.rewrite", "FabricEgress.dscp_rewriter.clear", "nop"],
+          "base_default_next" : null,
+          "next_tables" : {
+            "__HIT__" : "node_134",
+            "__MISS__" : "node_136"
+          },
+          "default_entry" : {
+            "action_id" : 75,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_slicing217",
+          "id" : 84,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 217,
+            "column" : 30,
+            "source_fragment" : "="
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [126],
+          "actions" : ["slicing217"],
+          "base_default_next" : "node_136",
+          "next_tables" : {
+            "slicing217" : "node_136"
+          },
+          "default_entry" : {
+            "action_id" : 126,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_fabric_v1model170",
+          "id" : 85,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 170,
+            "column" : 12,
+            "source_fragment" : "recirculate_preserving_field_list(NO_PRESERVATION)"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [128],
+          "actions" : ["fabric_v1model170"],
+          "base_default_next" : "node_138",
+          "next_tables" : {
+            "fabric_v1model170" : "node_138"
+          },
+          "default_entry" : {
+            "action_id" : 128,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        },
+        {
+          "name" : "tbl_fabric_v1model174",
+          "id" : 86,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 174,
+            "column" : 12,
+            "source_fragment" : "mark_to_drop(standard_md)"
+          },
+          "key" : [],
+          "match_type" : "exact",
+          "type" : "simple",
+          "max_size" : 1024,
+          "with_counters" : false,
+          "support_timeout" : false,
+          "direct_meters" : null,
+          "action_ids" : [129],
+          "actions" : ["fabric_v1model174"],
+          "base_default_next" : null,
+          "next_tables" : {
+            "fabric_v1model174" : null
+          },
+          "default_entry" : {
+            "action_id" : 129,
+            "action_const" : true,
+            "action_data" : [],
+            "action_entry_const" : true
+          }
+        }
+      ],
+      "action_profiles" : [],
+      "conditionals" : [
+        {
+          "name" : "node_72",
+          "id" : 23,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 135,
+            "column" : 12,
+            "source_fragment" : "fabric_md"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["scalars", "userMetadata._skip_egress0"]
+              }
+            }
+          },
+          "true_next" : "tbl_fabric_v1model136",
+          "false_next" : "node_74"
+        },
+        {
+          "name" : "node_74",
+          "id" : 24,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 140,
+            "column" : 13,
+            "source_fragment" : "standard_md.instance_type == 2"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "==",
+              "left" : {
+                "type" : "field",
+                "value" : ["standard_metadata", "instance_type"]
+              },
+              "right" : {
+                "type" : "hexstr",
+                "value" : "0x00000002"
+              }
+            }
+          },
+          "true_next" : "tbl_int_tna_parser_emulator14",
+          "false_next" : "node_84"
+        },
+        {
+          "name" : "node_76",
+          "id" : 25,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 145,
+            "column" : 11,
+            "source_fragment" : "hdr_v1model.ingress.gtpu.isValid() || hdr_v1model.ingress.vxlan.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "or",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["_ingress_gtpu12", "$valid$"]
+                  }
+                }
+              },
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["_ingress_vxlan15", "$valid$"]
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "tbl_int_tna_parser_emulator148",
+          "false_next" : "node_78"
+        },
+        {
+          "name" : "node_78",
+          "id" : 26,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 164,
+            "column" : 12,
+            "source_fragment" : "(bit<8>)fabric_md.bridged.int_bmd.report_type == BridgedMdType_t.INT_INGRESS_DROP"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "==",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["scalars", "userMetadata._recirc_preserved_report_type46"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xff"
+                  }
+                }
+              },
+              "right" : {
+                "type" : "hexstr",
+                "value" : "0x04"
+              }
+            }
+          },
+          "true_next" : "tbl_parser_emulator_parse_int_ingress_drop",
+          "false_next" : "tbl_parser_emulator_parse_int_report_mirror"
+        },
+        {
+          "name" : "node_84",
+          "id" : 27,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 150,
+            "column" : 11,
+            "source_fragment" : "(bit<8>)fabric_md.egress.bridged.int_bmd.report_type == BridgedMdType_t.INT_INGRESS_DROP"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "==",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_egress_bridged36", "_int_bmd_report_type13"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xff"
+                  }
+                }
+              },
+              "right" : {
+                "type" : "hexstr",
+                "value" : "0x04"
+              }
+            }
+          },
+          "true_next" : "tbl_int_tna_parser_emulator14_0",
+          "false_next" : "FabricEgress.pkt_io_egress.switch_info"
+        },
+        {
+          "name" : "node_86",
+          "id" : 28,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 145,
+            "column" : 11,
+            "source_fragment" : "hdr_v1model.ingress.gtpu.isValid() || hdr_v1model.ingress.vxlan.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "or",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["_ingress_gtpu12", "$valid$"]
+                  }
+                }
+              },
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["_ingress_vxlan15", "$valid$"]
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "tbl_int_tna_parser_emulator148_0",
+          "false_next" : "node_88"
+        },
+        {
+          "name" : "node_88",
+          "id" : 29,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4",
+            "line" : 164,
+            "column" : 12,
+            "source_fragment" : "(bit<8>)fabric_md.bridged.int_bmd.report_type == BridgedMdType_t.INT_INGRESS_DROP"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "==",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "&",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_egress_bridged36", "_int_bmd_report_type13"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xff"
+                  }
+                }
+              },
+              "right" : {
+                "type" : "hexstr",
+                "value" : "0x04"
+              }
+            }
+          },
+          "true_next" : "tbl_parser_emulator_parse_int_ingress_drop_0",
+          "false_next" : "tbl_parser_emulator_parse_int_report_mirror_0"
+        },
+        {
+          "name" : "node_95",
+          "id" : 30,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 50,
+            "column" : 12,
+            "source_fragment" : "standard_md.egress_port == fabric_md.cpu_port"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "==",
+              "left" : {
+                "type" : "field",
+                "value" : ["standard_metadata", "egress_port"]
+              },
+              "right" : {
+                "type" : "field",
+                "value" : ["scalars", "userMetadata._egress_cpu_port37"]
+              }
+            }
+          },
+          "true_next" : "tbl_packetio51",
+          "false_next" : "node_97"
+        },
+        {
+          "name" : "node_97",
+          "id" : 31,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4",
+            "line" : 58,
+            "column" : 12,
+            "source_fragment" : "hdr.fake_ethernet.isValid() && ..."
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "and",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["_ingress_fake_ethernet2", "$valid$"]
+                  }
+                }
+              },
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "==",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_ingress_fake_ethernet2", "ether_type"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0xbf03"
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "tbl_packetio60",
+          "false_next" : "node_99"
+        },
+        {
+          "name" : "node_99",
+          "id" : 32,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/stats.p4",
+            "line" : 67,
+            "column" : 12,
+            "source_fragment" : "bmd_type == BridgedMdType_t.INGRESS_TO_EGRESS"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "==",
+              "left" : {
+                "type" : "field",
+                "value" : ["_egress_bridged36", "_bmd_type0"]
+              },
+              "right" : {
+                "type" : "hexstr",
+                "value" : "0x01"
+              }
+            }
+          },
+          "true_next" : "FabricEgress.stats.flows",
+          "false_next" : "node_101"
+        },
+        {
+          "name" : "node_101",
+          "id" : 33,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 280,
+            "column" : 12,
+            "source_fragment" : "fabric_md.bridged.base.is_multicast ..."
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "and",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["_egress_bridged36", "_base_is_multicast4"]
+                  }
+                }
+              },
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "==",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_egress_bridged36", "_base_ig_port3"]
+                  },
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["standard_metadata", "egress_port"]
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "tbl_next283",
+          "false_next" : "node_103"
+        },
+        {
+          "name" : "node_103",
+          "id" : 34,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 288,
+            "column" : 12,
+            "source_fragment" : "fabric_md.bridged.base.mpls_label == 0"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "==",
+              "left" : {
+                "type" : "field",
+                "value" : ["_egress_bridged36", "_base_mpls_label2"]
+              },
+              "right" : {
+                "type" : "hexstr",
+                "value" : "0x000000"
+              }
+            }
+          },
+          "true_next" : "node_104",
+          "false_next" : "tbl_egress_next_set_mpls"
+        },
+        {
+          "name" : "node_104",
+          "id" : 35,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 289,
+            "column" : 16,
+            "source_fragment" : "hdr.mpls.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["_ingress_mpls6", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "tbl_egress_next_pop_mpls_if_present",
+          "false_next" : "node_107"
+        },
+        {
+          "name" : "node_107",
+          "id" : 36,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 159,
+            "column" : 39,
+            "source_fragment" : "fabric_md"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["scalars", "userMetadata._egress_is_int_recirc44"]
+              }
+            }
+          },
+          "false_next" : "FabricEgress.egress_next.egress_vlan",
+          "true_next" : "node_109"
+        },
+        {
+          "name" : "node_109",
+          "id" : 37,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 322,
+            "column" : 12,
+            "source_fragment" : "hdr.mpls.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["_ingress_mpls6", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "tbl_next323",
+          "false_next" : "node_113"
+        },
+        {
+          "name" : "node_111",
+          "id" : 38,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 324,
+            "column" : 16,
+            "source_fragment" : "hdr.mpls.ttl == 0"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "==",
+              "left" : {
+                "type" : "field",
+                "value" : ["_ingress_mpls6", "ttl"]
+              },
+              "right" : {
+                "type" : "hexstr",
+                "value" : "0x00"
+              }
+            }
+          },
+          "true_next" : "tbl_next325",
+          "false_next" : "tbl_int128"
+        },
+        {
+          "name" : "node_113",
+          "id" : 39,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 331,
+            "column" : 16,
+            "source_fragment" : "hdr.ipv4.isValid() && fabric_md.bridged.base.fwd_type != FWD_BRIDGING"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "and",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["_ingress_ipv47", "$valid$"]
+                  }
+                }
+              },
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "!=",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_egress_bridged36", "_base_fwd_type5"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x00"
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "node_114",
+          "false_next" : "node_118"
+        },
+        {
+          "name" : "node_114",
+          "id" : 40,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 319,
+            "column" : 28,
+            "source_fragment" : "(fabric_md.bridged.bmd_type == BridgedMdType_t.INT_INGRESS_DROP) || ..."
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "or",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "==",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_egress_bridged36", "_bmd_type0"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x04"
+                  }
+                }
+              },
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "==",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_egress_bridged36", "_bmd_type0"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x02"
+                  }
+                }
+              }
+            }
+          },
+          "false_next" : "tbl_next333",
+          "true_next" : "node_116"
+        },
+        {
+          "name" : "node_116",
+          "id" : 41,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 335,
+            "column" : 20,
+            "source_fragment" : "hdr.ipv4.ttl == 0"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "==",
+              "left" : {
+                "type" : "field",
+                "value" : ["_ingress_ipv47", "ttl"]
+              },
+              "right" : {
+                "type" : "hexstr",
+                "value" : "0x00"
+              }
+            }
+          },
+          "true_next" : "tbl_next336",
+          "false_next" : "tbl_int128"
+        },
+        {
+          "name" : "node_118",
+          "id" : 42,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 341,
+            "column" : 23,
+            "source_fragment" : "hdr.ipv6.isValid() && fabric_md.bridged.base.fwd_type != FWD_BRIDGING"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "and",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "d2b",
+                  "left" : null,
+                  "right" : {
+                    "type" : "field",
+                    "value" : ["_ingress_ipv68", "$valid$"]
+                  }
+                }
+              },
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "!=",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_egress_bridged36", "_base_fwd_type5"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x00"
+                  }
+                }
+              }
+            }
+          },
+          "true_next" : "node_119",
+          "false_next" : "tbl_int128"
+        },
+        {
+          "name" : "node_119",
+          "id" : 43,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 319,
+            "column" : 28,
+            "source_fragment" : "(fabric_md.bridged.bmd_type == BridgedMdType_t.INT_INGRESS_DROP) || ..."
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "or",
+              "left" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "==",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_egress_bridged36", "_bmd_type0"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x04"
+                  }
+                }
+              },
+              "right" : {
+                "type" : "expression",
+                "value" : {
+                  "op" : "==",
+                  "left" : {
+                    "type" : "field",
+                    "value" : ["_egress_bridged36", "_bmd_type0"]
+                  },
+                  "right" : {
+                    "type" : "hexstr",
+                    "value" : "0x02"
+                  }
+                }
+              }
+            }
+          },
+          "false_next" : "tbl_next343",
+          "true_next" : "node_121"
+        },
+        {
+          "name" : "node_121",
+          "id" : 44,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/next.p4",
+            "line" : 345,
+            "column" : 20,
+            "source_fragment" : "hdr.ipv6.hop_limit == 0"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "==",
+              "left" : {
+                "type" : "field",
+                "value" : ["_ingress_ipv68", "hop_limit"]
+              },
+              "right" : {
+                "type" : "hexstr",
+                "value" : "0x00"
+              }
+            }
+          },
+          "true_next" : "tbl_next346",
+          "false_next" : "tbl_int128"
+        },
+        {
+          "name" : "node_127",
+          "id" : 45,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/int.p4",
+            "line" : 375,
+            "column" : 12,
+            "source_fragment" : "fabric_md.int_report_md.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["int_egress_fabric_md_int_report_md", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "FabricEgress.int_egress.report",
+          "false_next" : "FabricEgress.int_egress.int_metadata"
+        },
+        {
+          "name" : "node_134",
+          "id" : 46,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4",
+            "line" : 216,
+            "column" : 16,
+            "source_fragment" : "hdr.ipv4.isValid()"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["_ingress_ipv47", "$valid$"]
+              }
+            }
+          },
+          "true_next" : "tbl_slicing217",
+          "false_next" : "node_136"
+        },
+        {
+          "name" : "node_136",
+          "id" : 47,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 168,
+            "column" : 12,
+            "source_fragment" : "fabric_md"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "d2b",
+              "left" : null,
+              "right" : {
+                "type" : "field",
+                "value" : ["scalars", "userMetadata._do_upf_uplink_recirc1"]
+              }
+            }
+          },
+          "true_next" : "tbl_fabric_v1model170",
+          "false_next" : "node_138"
+        },
+        {
+          "name" : "node_138",
+          "id" : 48,
+          "source_info" : {
+            "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+            "line" : 173,
+            "column" : 12,
+            "source_fragment" : "fabric_md.drop_ctl == 1"
+          },
+          "expression" : {
+            "type" : "expression",
+            "value" : {
+              "op" : "==",
+              "left" : {
+                "type" : "field",
+                "value" : ["scalars", "userMetadata._drop_ctl2"]
+              },
+              "right" : {
+                "type" : "hexstr",
+                "value" : "0x01"
+              }
+            }
+          },
+          "false_next" : null,
+          "true_next" : "tbl_fabric_v1model174"
+        }
+      ]
+    }
+  ],
+  "checksums" : [
+    {
+      "name" : "cksum",
+      "id" : 0,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4",
+        "line" : 55,
+        "column" : 8,
+        "source_fragment" : "update_checksum(hdr.ingress.ipv4.isValid(), ..."
+      },
+      "target" : ["_ingress_ipv47", "hdr_checksum"],
+      "type" : "generic",
+      "calculation" : "calc_2",
+      "verify" : false,
+      "update" : true,
+      "if_cond" : {
+        "type" : "expression",
+        "value" : {
+          "op" : "d2b",
+          "left" : null,
+          "right" : {
+            "type" : "field",
+            "value" : ["_ingress_ipv47", "$valid$"]
+          }
+        }
+      }
+    },
+    {
+      "name" : "cksum_0",
+      "id" : 1,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4",
+        "line" : 73,
+        "column" : 8,
+        "source_fragment" : "update_checksum(hdr.ingress.inner_ipv4.isValid(), ..."
+      },
+      "target" : ["_ingress_inner_ipv418", "hdr_checksum"],
+      "type" : "generic",
+      "calculation" : "calc_3",
+      "verify" : false,
+      "update" : true,
+      "if_cond" : {
+        "type" : "expression",
+        "value" : {
+          "op" : "d2b",
+          "left" : null,
+          "right" : {
+            "type" : "field",
+            "value" : ["_ingress_inner_ipv418", "$valid$"]
+          }
+        }
+      }
+    },
+    {
+      "name" : "cksum_1",
+      "id" : 2,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4",
+        "line" : 92,
+        "column" : 8,
+        "source_fragment" : "update_checksum(hdr.egress.report_ipv4.isValid(), ..."
+      },
+      "target" : ["_egress_report_ipv427", "hdr_checksum"],
+      "type" : "generic",
+      "calculation" : "calc_4",
+      "verify" : false,
+      "update" : true,
+      "if_cond" : {
+        "type" : "expression",
+        "value" : {
+          "op" : "d2b",
+          "left" : null,
+          "right" : {
+            "type" : "field",
+            "value" : ["_egress_report_ipv427", "$valid$"]
+          }
+        }
+      }
+    },
+    {
+      "name" : "cksum_2",
+      "id" : 3,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4",
+        "line" : 13,
+        "column" : 8,
+        "source_fragment" : "verify_checksum(hdr.ingress.ipv4.isValid(), ..."
+      },
+      "target" : ["_ingress_ipv47", "hdr_checksum"],
+      "type" : "generic",
+      "calculation" : "calc_5",
+      "verify" : true,
+      "update" : false,
+      "if_cond" : {
+        "type" : "expression",
+        "value" : {
+          "op" : "d2b",
+          "left" : null,
+          "right" : {
+            "type" : "field",
+            "value" : ["_ingress_ipv47", "$valid$"]
+          }
+        }
+      }
+    },
+    {
+      "name" : "cksum_3",
+      "id" : 4,
+      "source_info" : {
+        "filename" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4",
+        "line" : 31,
+        "column" : 8,
+        "source_fragment" : "verify_checksum(hdr.ingress.inner_ipv4.isValid(), ..."
+      },
+      "target" : ["_ingress_inner_ipv418", "hdr_checksum"],
+      "type" : "generic",
+      "calculation" : "calc_6",
+      "verify" : true,
+      "update" : false,
+      "if_cond" : {
+        "type" : "expression",
+        "value" : {
+          "op" : "d2b",
+          "left" : null,
+          "right" : {
+            "type" : "field",
+            "value" : ["_ingress_inner_ipv418", "$valid$"]
+          }
+        }
+      }
+    }
+  ],
+  "force_arith" : [],
+  "extern_instances" : [],
+  "field_aliases" : [
+    [
+      "queueing_metadata.enq_timestamp",
+      ["standard_metadata", "enq_timestamp"]
+    ],
+    [
+      "queueing_metadata.enq_qdepth",
+      ["standard_metadata", "enq_qdepth"]
+    ],
+    [
+      "queueing_metadata.deq_timedelta",
+      ["standard_metadata", "deq_timedelta"]
+    ],
+    [
+      "queueing_metadata.deq_qdepth",
+      ["standard_metadata", "deq_qdepth"]
+    ],
+    [
+      "intrinsic_metadata.ingress_global_timestamp",
+      ["standard_metadata", "ingress_global_timestamp"]
+    ],
+    [
+      "intrinsic_metadata.egress_global_timestamp",
+      ["standard_metadata", "egress_global_timestamp"]
+    ],
+    [
+      "intrinsic_metadata.mcast_grp",
+      ["standard_metadata", "mcast_grp"]
+    ],
+    [
+      "intrinsic_metadata.egress_rid",
+      ["standard_metadata", "egress_rid"]
+    ],
+    [
+      "intrinsic_metadata.priority",
+      ["standard_metadata", "priority"]
+    ]
+  ],
+  "program" : "/home/ubuntu/tfs-setup/fabric-tna/p4src/v1model/fabric_v1model.p4",
+  "__meta__" : {
+    "version" : [2, 23],
+    "compiler" : "https://github.com/p4lang/p4c"
+  }
+}
\ No newline at end of file
diff --git a/src/tests/p4-int-routing-acl/p4src/p4info.txt b/src/tests/p4-int-routing-acl/p4src/p4info.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4e54f2861496816db734612ad4558cf4d03e69f8
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/p4src/p4info.txt
@@ -0,0 +1,1911 @@
+pkg_info {
+  arch: "v1model"
+}
+tables {
+  preamble {
+    id: 41243186
+    name: "FabricIngress.stats.flows"
+    alias: "FabricIngress.stats.flows"
+  }
+  match_fields {
+    id: 1
+    name: "ipv4_src"
+    bitwidth: 32
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 2
+    name: "ipv4_dst"
+    bitwidth: 32
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 3
+    name: "ip_proto"
+    bitwidth: 8
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 4
+    name: "l4_sport"
+    bitwidth: 16
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 5
+    name: "l4_dport"
+    bitwidth: 16
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 6
+    name: "ig_port"
+    bitwidth: 9
+    match_type: EXACT
+  }
+  action_refs {
+    id: 21929788
+  }
+  const_default_action_id: 21929788
+  direct_resource_ids: 333776332
+  size: 1024
+}
+tables {
+  preamble {
+    id: 43310977
+    name: "FabricIngress.filtering.ingress_port_vlan"
+    alias: "ingress_port_vlan"
+  }
+  match_fields {
+    id: 1
+    name: "ig_port"
+    bitwidth: 9
+    match_type: EXACT
+  }
+  match_fields {
+    id: 2
+    name: "vlan_is_valid"
+    bitwidth: 1
+    match_type: EXACT
+  }
+  match_fields {
+    id: 3
+    name: "vlan_id"
+    bitwidth: 12
+    match_type: TERNARY
+  }
+  action_refs {
+    id: 17164167
+  }
+  action_refs {
+    id: 24158268
+  }
+  action_refs {
+    id: 24266015
+  }
+  const_default_action_id: 17164167
+  direct_resource_ids: 326221069
+  size: 1024
+}
+tables {
+  preamble {
+    id: 49718154
+    name: "FabricIngress.filtering.fwd_classifier"
+    alias: "fwd_classifier"
+  }
+  match_fields {
+    id: 1
+    name: "ig_port"
+    bitwidth: 9
+    match_type: EXACT
+  }
+  match_fields {
+    id: 2
+    name: "eth_dst"
+    bitwidth: 48
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 3
+    name: "eth_type"
+    bitwidth: 16
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 4
+    name: "ip_eth_type"
+    bitwidth: 16
+    match_type: EXACT
+  }
+  action_refs {
+    id: 25032921
+  }
+  const_default_action_id: 25032921
+  direct_resource_ids: 335473470
+  size: 1024
+}
+tables {
+  preamble {
+    id: 43623757
+    name: "FabricIngress.forwarding.bridging"
+    alias: "bridging"
+  }
+  match_fields {
+    id: 1
+    name: "vlan_id"
+    bitwidth: 12
+    match_type: EXACT
+  }
+  match_fields {
+    id: 2
+    name: "eth_dst"
+    bitwidth: 48
+    match_type: TERNARY
+  }
+  action_refs {
+    id: 21791748
+  }
+  action_refs {
+    id: 29734112
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 29734112
+  direct_resource_ids: 330959985
+  size: 1024
+}
+tables {
+  preamble {
+    id: 37768578
+    name: "FabricIngress.forwarding.mpls"
+    alias: "mpls"
+  }
+  match_fields {
+    id: 1
+    name: "mpls_label"
+    bitwidth: 20
+    match_type: EXACT
+  }
+  action_refs {
+    id: 30066030
+  }
+  action_refs {
+    id: 29734112
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 29734112
+  direct_resource_ids: 318961579
+  size: 1024
+}
+tables {
+  preamble {
+    id: 41754650
+    name: "FabricIngress.forwarding.routing_v4"
+    alias: "routing_v4"
+  }
+  match_fields {
+    id: 1
+    name: "ipv4_dst"
+    bitwidth: 32
+    match_type: LPM
+  }
+  action_refs {
+    id: 19792090
+  }
+  action_refs {
+    id: 29124955
+  }
+  action_refs {
+    id: 17639597
+  }
+  action_refs {
+    id: 29734112
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  direct_resource_ids: 333425635
+  size: 1024
+}
+tables {
+  preamble {
+    id: 49342721
+    name: "FabricIngress.forwarding.routing_v6"
+    alias: "routing_v6"
+  }
+  match_fields {
+    id: 1
+    name: "ipv6_dst"
+    bitwidth: 128
+    match_type: LPM
+  }
+  action_refs {
+    id: 21856023
+  }
+  action_refs {
+    id: 24646532
+  }
+  action_refs {
+    id: 29734112
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  direct_resource_ids: 324042090
+  size: 1024
+}
+tables {
+  preamble {
+    id: 36626242
+    name: "FabricIngress.pre_next.next_mpls"
+    alias: "next_mpls"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 22765924
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 330020245
+  size: 1024
+}
+tables {
+  preamble {
+    id: 48011802
+    name: "FabricIngress.pre_next.next_vlan"
+    alias: "next_vlan"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 33475378
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 333692067
+  size: 1024
+}
+tables {
+  preamble {
+    id: 44104738
+    name: "FabricIngress.acl.acl"
+    alias: "acl"
+  }
+  match_fields {
+    id: 1
+    name: "ig_port"
+    bitwidth: 9
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 2
+    name: "eth_dst"
+    bitwidth: 48
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 3
+    name: "eth_src"
+    bitwidth: 48
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 4
+    name: "vlan_id"
+    bitwidth: 12
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 5
+    name: "eth_type"
+    bitwidth: 16
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 6
+    name: "ipv4_src"
+    bitwidth: 32
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 7
+    name: "ipv4_dst"
+    bitwidth: 32
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 8
+    name: "ip_proto"
+    bitwidth: 8
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 9
+    name: "icmp_type"
+    bitwidth: 8
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 10
+    name: "icmp_code"
+    bitwidth: 8
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 11
+    name: "l4_sport"
+    bitwidth: 16
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 12
+    name: "l4_dport"
+    bitwidth: 16
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 13
+    name: "ig_port_type"
+    bitwidth: 2
+    match_type: TERNARY
+  }
+  action_refs {
+    id: 23623126
+  }
+  action_refs {
+    id: 23579892
+  }
+  action_refs {
+    id: 21161133
+  }
+  action_refs {
+    id: 23570973
+  }
+  action_refs {
+    id: 24507494
+  }
+  action_refs {
+    id: 29607214
+  }
+  const_default_action_id: 29607214
+  direct_resource_ids: 319194241
+  size: 1024
+}
+tables {
+  preamble {
+    id: 39142283
+    name: "FabricIngress.next.simple"
+    alias: "simple"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 19358572
+  }
+  action_refs {
+    id: 31887425
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  direct_resource_ids: 326633416
+  size: 1024
+}
+tables {
+  preamble {
+    id: 47960972
+    name: "FabricIngress.next.hashed"
+    alias: "hashed"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 27301117
+  }
+  action_refs {
+    id: 20985706
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  implementation_id: 289544276
+  direct_resource_ids: 322798228
+  size: 1024
+}
+tables {
+  preamble {
+    id: 40619180
+    name: "FabricIngress.next.multicast"
+    alias: "multicast"
+  }
+  match_fields {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+    match_type: EXACT
+  }
+  action_refs {
+    id: 21629581
+  }
+  action_refs {
+    id: 23637707
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 23637707
+  direct_resource_ids: 319194968
+  size: 1024
+}
+tables {
+  preamble {
+    id: 34606298
+    name: "FabricIngress.slice_tc_classifier.classifier"
+    alias: "classifier"
+  }
+  match_fields {
+    id: 1
+    name: "ig_port"
+    bitwidth: 9
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 2
+    name: "ipv4_src"
+    bitwidth: 32
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 3
+    name: "ipv4_dst"
+    bitwidth: 32
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 4
+    name: "ip_proto"
+    bitwidth: 8
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 5
+    name: "l4_sport"
+    bitwidth: 16
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 6
+    name: "l4_dport"
+    bitwidth: 16
+    match_type: TERNARY
+  }
+  action_refs {
+    id: 23786376
+  }
+  action_refs {
+    id: 25983516
+  }
+  action_refs {
+    id: 30111108
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 30111108
+  direct_resource_ids: 334706097
+  size: 512
+}
+tables {
+  preamble {
+    id: 36435258
+    name: "FabricIngress.qos.queues"
+    alias: "queues"
+  }
+  match_fields {
+    id: 1
+    name: "slice_tc"
+    bitwidth: 6
+    match_type: EXACT
+  }
+  match_fields {
+    id: 2
+    name: "color"
+    bitwidth: 2
+    match_type: TERNARY
+  }
+  action_refs {
+    id: 32116918
+  }
+  action_refs {
+    id: 28214351
+  }
+  const_default_action_id: 32116918
+  direct_resource_ids: 327743278
+  size: 128
+}
+tables {
+  preamble {
+    id: 43965782
+    name: "FabricIngress.qos.default_tc"
+    alias: "default_tc"
+  }
+  match_fields {
+    id: 1
+    name: "slice_tc"
+    bitwidth: 6
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 2
+    name: "tc_unknown"
+    bitwidth: 1
+    match_type: EXACT
+  }
+  action_refs {
+    id: 23587909
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  size: 16
+}
+tables {
+  preamble {
+    id: 40748488
+    name: "FabricIngress.int_watchlist.watchlist"
+    alias: "watchlist"
+  }
+  match_fields {
+    id: 1
+    name: "ipv4_valid"
+    bitwidth: 1
+    match_type: EXACT
+  }
+  match_fields {
+    id: 2
+    name: "ipv4_src"
+    bitwidth: 32
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 3
+    name: "ipv4_dst"
+    bitwidth: 32
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 4
+    name: "ip_proto"
+    bitwidth: 8
+    match_type: TERNARY
+  }
+  match_fields {
+    id: 5
+    name: "l4_sport"
+    bitwidth: 16
+    match_type: RANGE
+  }
+  match_fields {
+    id: 6
+    name: "l4_dport"
+    bitwidth: 16
+    match_type: RANGE
+  }
+  action_refs {
+    id: 25078550
+  }
+  action_refs {
+    id: 20118842
+  }
+  action_refs {
+    id: 28396787
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28396787
+  direct_resource_ids: 328581521
+  size: 64
+}
+tables {
+  preamble {
+    id: 43851059
+    name: "FabricEgress.stats.flows"
+    alias: "FabricEgress.stats.flows"
+  }
+  match_fields {
+    id: 1
+    name: "stats_flow_id"
+    bitwidth: 10
+    match_type: EXACT
+  }
+  match_fields {
+    id: 2
+    name: "eg_port"
+    bitwidth: 9
+    match_type: EXACT
+  }
+  action_refs {
+    id: 26838724
+  }
+  const_default_action_id: 26838724
+  direct_resource_ids: 334508337
+  size: 1024
+}
+tables {
+  preamble {
+    id: 35217901
+    name: "FabricEgress.pkt_io_egress.switch_info"
+    alias: "switch_info"
+  }
+  action_refs {
+    id: 32804382
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  size: 1
+}
+tables {
+  preamble {
+    id: 49262446
+    name: "FabricEgress.egress_next.egress_vlan"
+    alias: "egress_vlan"
+  }
+  match_fields {
+    id: 1
+    name: "vlan_id"
+    bitwidth: 12
+    match_type: EXACT
+  }
+  match_fields {
+    id: 2
+    name: "eg_port"
+    bitwidth: 9
+    match_type: EXACT
+  }
+  action_refs {
+    id: 30307755
+  }
+  action_refs {
+    id: 17183246
+  }
+  action_refs {
+    id: 30812542
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 30812542
+  direct_resource_ids: 318892680
+  size: 1024
+}
+tables {
+  preamble {
+    id: 49970092
+    name: "FabricEgress.dscp_rewriter.rewriter"
+    alias: "rewriter"
+  }
+  match_fields {
+    id: 1
+    name: "eg_port"
+    bitwidth: 9
+    match_type: EXACT
+  }
+  action_refs {
+    id: 27951287
+  }
+  action_refs {
+    id: 24120545
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  const_default_action_id: 28485346
+  size: 512
+}
+tables {
+  preamble {
+    id: 36860953
+    name: "FabricEgress.int_egress.queue_latency_thresholds"
+    alias: "queue_latency_thresholds"
+  }
+  match_fields {
+    id: 1
+    name: "egress_qid"
+    bitwidth: 5
+    match_type: EXACT
+  }
+  match_fields {
+    id: 2
+    name: "hop_latency_upper"
+    bitwidth: 16
+    match_type: RANGE
+  }
+  match_fields {
+    id: 3
+    name: "hop_latency_lower"
+    bitwidth: 16
+    match_type: RANGE
+  }
+  action_refs {
+    id: 22415037
+  }
+  action_refs {
+    id: 19702294
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  size: 128
+}
+tables {
+  preamble {
+    id: 40475827
+    name: "FabricEgress.int_egress.config"
+    alias: "config"
+  }
+  action_refs {
+    id: 22425991
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  size: 1
+}
+tables {
+  preamble {
+    id: 46071383
+    name: "FabricEgress.int_egress.report"
+    alias: "report"
+  }
+  match_fields {
+    id: 1
+    name: "bmd_type"
+    bitwidth: 8
+    match_type: EXACT
+  }
+  match_fields {
+    id: 2
+    name: "mirror_type"
+    bitwidth: 3
+    match_type: EXACT
+  }
+  match_fields {
+    id: 3
+    name: "int_report_type"
+    bitwidth: 3
+    match_type: EXACT
+  }
+  action_refs {
+    id: 30783845
+  }
+  action_refs {
+    id: 22769901
+  }
+  action_refs {
+    id: 32486459
+  }
+  action_refs {
+    id: 25343592
+  }
+  action_refs {
+    id: 28485346
+    annotations: "@defaultonly"
+    scope: DEFAULT_ONLY
+  }
+  direct_resource_ids: 325056546
+  size: 6
+}
+actions {
+  preamble {
+    id: 28485346
+    name: "nop"
+    alias: "nop"
+  }
+}
+actions {
+  preamble {
+    id: 21257015
+    name: "NoAction"
+    alias: "NoAction"
+    annotations: "@noWarn(\"unused\")"
+  }
+}
+actions {
+  preamble {
+    id: 21929788
+    name: "FabricIngress.stats.count"
+    alias: "FabricIngress.stats.count"
+  }
+  params {
+    id: 1
+    name: "flow_id"
+    bitwidth: 10
+  }
+}
+actions {
+  preamble {
+    id: 17164167
+    name: "FabricIngress.filtering.deny"
+    alias: "deny"
+  }
+}
+actions {
+  preamble {
+    id: 24158268
+    name: "FabricIngress.filtering.permit"
+    alias: "permit"
+  }
+  params {
+    id: 1
+    name: "port_type"
+    bitwidth: 2
+  }
+}
+actions {
+  preamble {
+    id: 24266015
+    name: "FabricIngress.filtering.permit_with_internal_vlan"
+    alias: "permit_with_internal_vlan"
+  }
+  params {
+    id: 1
+    name: "vlan_id"
+    bitwidth: 12
+  }
+  params {
+    id: 2
+    name: "port_type"
+    bitwidth: 2
+  }
+}
+actions {
+  preamble {
+    id: 25032921
+    name: "FabricIngress.filtering.set_forwarding_type"
+    alias: "set_forwarding_type"
+  }
+  params {
+    id: 1
+    name: "fwd_type"
+    bitwidth: 3
+  }
+}
+actions {
+  preamble {
+    id: 29734112
+    name: "FabricIngress.forwarding.set_int_drop_reason"
+    alias: "set_int_drop_reason"
+  }
+  params {
+    id: 1
+    name: "drop_reason"
+    bitwidth: 8
+  }
+}
+actions {
+  preamble {
+    id: 21791748
+    name: "FabricIngress.forwarding.set_next_id_bridging"
+    alias: "set_next_id_bridging"
+  }
+  params {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+  }
+}
+actions {
+  preamble {
+    id: 30066030
+    name: "FabricIngress.forwarding.pop_mpls_and_next"
+    alias: "pop_mpls_and_next"
+  }
+  params {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+  }
+}
+actions {
+  preamble {
+    id: 19792090
+    name: "FabricIngress.forwarding.set_next_id_routing_v4"
+    alias: "set_next_id_routing_v4"
+  }
+  params {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+  }
+}
+actions {
+  preamble {
+    id: 29124955
+    name: "FabricIngress.forwarding.nop_routing_v4"
+    alias: "nop_routing_v4"
+  }
+}
+actions {
+  preamble {
+    id: 17639597
+    name: "FabricIngress.forwarding.drop_routing_v4"
+    alias: "drop_routing_v4"
+  }
+}
+actions {
+  preamble {
+    id: 21856023
+    name: "FabricIngress.forwarding.set_next_id_routing_v6"
+    alias: "set_next_id_routing_v6"
+  }
+  params {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+  }
+}
+actions {
+  preamble {
+    id: 24646532
+    name: "FabricIngress.forwarding.drop_routing_v6"
+    alias: "drop_routing_v6"
+  }
+}
+actions {
+  preamble {
+    id: 22765924
+    name: "FabricIngress.pre_next.set_mpls_label"
+    alias: "set_mpls_label"
+  }
+  params {
+    id: 1
+    name: "label"
+    bitwidth: 20
+  }
+}
+actions {
+  preamble {
+    id: 33475378
+    name: "FabricIngress.pre_next.set_vlan"
+    alias: "set_vlan"
+  }
+  params {
+    id: 1
+    name: "vlan_id"
+    bitwidth: 12
+  }
+}
+actions {
+  preamble {
+    id: 23623126
+    name: "FabricIngress.acl.set_next_id_acl"
+    alias: "set_next_id_acl"
+  }
+  params {
+    id: 1
+    name: "next_id"
+    bitwidth: 32
+  }
+}
+actions {
+  preamble {
+    id: 21161133
+    name: "FabricIngress.acl.copy_to_cpu"
+    alias: "copy_to_cpu"
+  }
+}
+actions {
+  preamble {
+    id: 23579892
+    name: "FabricIngress.acl.punt_to_cpu"
+    alias: "punt_to_cpu"
+  }
+}
+actions {
+  preamble {
+    id: 23570973
+    name: "FabricIngress.acl.drop"
+    alias: "acl.drop"
+  }
+}
+actions {
+  preamble {
+    id: 24507494
+    name: "FabricIngress.acl.set_output_port"
+    alias: "set_output_port"
+  }
+  params {
+    id: 1
+    name: "port_num"
+    bitwidth: 9
+    type_name {
+      name: "FabricPortId_t"
+    }
+  }
+}
+actions {
+  preamble {
+    id: 29607214
+    name: "FabricIngress.acl.nop_acl"
+    alias: "nop_acl"
+  }
+}
+actions {
+  preamble {
+    id: 19358572
+    name: "FabricIngress.next.output_simple"
+    alias: "output_simple"
+  }
+  params {
+    id: 1
+    name: "port_num"
+    bitwidth: 9
+    type_name {
+      name: "FabricPortId_t"
+    }
+  }
+}
+actions {
+  preamble {
+    id: 31887425
+    name: "FabricIngress.next.routing_simple"
+    alias: "routing_simple"
+  }
+  params {
+    id: 1
+    name: "port_num"
+    bitwidth: 9
+    type_name {
+      name: "FabricPortId_t"
+    }
+  }
+  params {
+    id: 2
+    name: "smac"
+    bitwidth: 48
+  }
+  params {
+    id: 3
+    name: "dmac"
+    bitwidth: 48
+  }
+}
+actions {
+  preamble {
+    id: 27301117
+    name: "FabricIngress.next.output_hashed"
+    alias: "output_hashed"
+  }
+  params {
+    id: 1
+    name: "port_num"
+    bitwidth: 9
+    type_name {
+      name: "FabricPortId_t"
+    }
+  }
+}
+actions {
+  preamble {
+    id: 20985706
+    name: "FabricIngress.next.routing_hashed"
+    alias: "routing_hashed"
+  }
+  params {
+    id: 1
+    name: "port_num"
+    bitwidth: 9
+    type_name {
+      name: "FabricPortId_t"
+    }
+  }
+  params {
+    id: 2
+    name: "smac"
+    bitwidth: 48
+  }
+  params {
+    id: 3
+    name: "dmac"
+    bitwidth: 48
+  }
+}
+actions {
+  preamble {
+    id: 21629581
+    name: "FabricIngress.next.set_mcast_group_id"
+    alias: "set_mcast_group_id"
+  }
+  params {
+    id: 1
+    name: "group_id"
+    bitwidth: 16
+  }
+}
+actions {
+  preamble {
+    id: 23637707
+    name: "FabricIngress.next.reset_mcast_group_id"
+    alias: "reset_mcast_group_id"
+  }
+}
+actions {
+  preamble {
+    id: 23786376
+    name: "FabricIngress.slice_tc_classifier.set_slice_id_tc"
+    alias: "set_slice_id_tc"
+  }
+  params {
+    id: 1
+    name: "slice_id"
+    bitwidth: 4
+  }
+  params {
+    id: 2
+    name: "tc"
+    bitwidth: 2
+  }
+}
+actions {
+  preamble {
+    id: 30111108
+    name: "FabricIngress.slice_tc_classifier.no_classification"
+    alias: "no_classification"
+  }
+}
+actions {
+  preamble {
+    id: 25983516
+    name: "FabricIngress.slice_tc_classifier.trust_dscp"
+    alias: "trust_dscp"
+  }
+}
+actions {
+  preamble {
+    id: 32116918
+    name: "FabricIngress.qos.set_queue"
+    alias: "set_queue"
+  }
+  params {
+    id: 1
+    name: "qid"
+    bitwidth: 5
+  }
+}
+actions {
+  preamble {
+    id: 28214351
+    name: "FabricIngress.qos.meter_drop"
+    alias: "meter_drop"
+  }
+}
+actions {
+  preamble {
+    id: 23587909
+    name: "FabricIngress.qos.set_default_tc"
+    alias: "set_default_tc"
+  }
+  params {
+    id: 1
+    name: "tc"
+    bitwidth: 2
+  }
+}
+actions {
+  preamble {
+    id: 25078550
+    name: "FabricIngress.int_watchlist.mark_to_report"
+    alias: "mark_to_report"
+  }
+}
+actions {
+  preamble {
+    id: 28396787
+    name: "FabricIngress.int_watchlist.no_report"
+    alias: "no_report"
+  }
+}
+actions {
+  preamble {
+    id: 20118842
+    name: "FabricIngress.int_watchlist.no_report_collector"
+    alias: "no_report_collector"
+  }
+}
+actions {
+  preamble {
+    id: 26838724
+    name: "FabricEgress.stats.count"
+    alias: "FabricEgress.stats.count"
+  }
+}
+actions {
+  preamble {
+    id: 32804382
+    name: "FabricEgress.pkt_io_egress.set_switch_info"
+    alias: "set_switch_info"
+  }
+  params {
+    id: 1
+    name: "cpu_port"
+    bitwidth: 9
+    type_name {
+      name: "FabricPortId_t"
+    }
+  }
+}
+actions {
+  preamble {
+    id: 30307755
+    name: "FabricEgress.egress_next.push_vlan"
+    alias: "push_vlan"
+  }
+}
+actions {
+  preamble {
+    id: 17183246
+    name: "FabricEgress.egress_next.pop_vlan"
+    alias: "pop_vlan"
+  }
+}
+actions {
+  preamble {
+    id: 30812542
+    name: "FabricEgress.egress_next.drop"
+    alias: "egress_next.drop"
+  }
+}
+actions {
+  preamble {
+    id: 27951287
+    name: "FabricEgress.dscp_rewriter.rewrite"
+    alias: "rewrite"
+  }
+}
+actions {
+  preamble {
+    id: 24120545
+    name: "FabricEgress.dscp_rewriter.clear"
+    alias: "clear"
+  }
+}
+actions {
+  preamble {
+    id: 22415037
+    name: "FabricEgress.int_egress.check_quota"
+    alias: "check_quota"
+  }
+}
+actions {
+  preamble {
+    id: 19702294
+    name: "FabricEgress.int_egress.reset_quota"
+    alias: "reset_quota"
+  }
+}
+actions {
+  preamble {
+    id: 22425991
+    name: "FabricEgress.int_egress.set_config"
+    alias: "set_config"
+  }
+  params {
+    id: 1
+    name: "hop_latency_mask"
+    bitwidth: 32
+  }
+  params {
+    id: 2
+    name: "timestamp_mask"
+    bitwidth: 48
+  }
+}
+actions {
+  preamble {
+    id: 30783845
+    name: "FabricEgress.int_egress.do_local_report_encap"
+    alias: "do_local_report_encap"
+  }
+  params {
+    id: 1
+    name: "src_ip"
+    bitwidth: 32
+  }
+  params {
+    id: 2
+    name: "mon_ip"
+    bitwidth: 32
+  }
+  params {
+    id: 3
+    name: "mon_port"
+    bitwidth: 16
+  }
+  params {
+    id: 4
+    name: "switch_id"
+    bitwidth: 32
+  }
+}
+actions {
+  preamble {
+    id: 22769901
+    name: "FabricEgress.int_egress.do_local_report_encap_mpls"
+    alias: "do_local_report_encap_mpls"
+  }
+  params {
+    id: 1
+    name: "src_ip"
+    bitwidth: 32
+  }
+  params {
+    id: 2
+    name: "mon_ip"
+    bitwidth: 32
+  }
+  params {
+    id: 3
+    name: "mon_port"
+    bitwidth: 16
+  }
+  params {
+    id: 4
+    name: "mon_label"
+    bitwidth: 20
+  }
+  params {
+    id: 5
+    name: "switch_id"
+    bitwidth: 32
+  }
+}
+actions {
+  preamble {
+    id: 32486459
+    name: "FabricEgress.int_egress.do_drop_report_encap"
+    alias: "do_drop_report_encap"
+  }
+  params {
+    id: 1
+    name: "src_ip"
+    bitwidth: 32
+  }
+  params {
+    id: 2
+    name: "mon_ip"
+    bitwidth: 32
+  }
+  params {
+    id: 3
+    name: "mon_port"
+    bitwidth: 16
+  }
+  params {
+    id: 4
+    name: "switch_id"
+    bitwidth: 32
+  }
+}
+actions {
+  preamble {
+    id: 25343592
+    name: "FabricEgress.int_egress.do_drop_report_encap_mpls"
+    alias: "do_drop_report_encap_mpls"
+  }
+  params {
+    id: 1
+    name: "src_ip"
+    bitwidth: 32
+  }
+  params {
+    id: 2
+    name: "mon_ip"
+    bitwidth: 32
+  }
+  params {
+    id: 3
+    name: "mon_port"
+    bitwidth: 16
+  }
+  params {
+    id: 4
+    name: "mon_label"
+    bitwidth: 20
+  }
+  params {
+    id: 5
+    name: "switch_id"
+    bitwidth: 32
+  }
+}
+action_profiles {
+  preamble {
+    id: 289544276
+    name: "FabricIngress.next.hashed_profile"
+    alias: "hashed_profile"
+  }
+  table_ids: 47960972
+  with_selector: true
+  size: 16
+  max_group_size: 16
+}
+counters {
+  preamble {
+    id: 309010261
+    name: "FabricIngress.filtering.fwd_type_counter"
+    alias: "fwd_type_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  size: 8
+}
+direct_counters {
+  preamble {
+    id: 333776332
+    name: "FabricIngress.stats.flow_counter"
+    alias: "FabricIngress.stats.flow_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 41243186
+}
+direct_counters {
+  preamble {
+    id: 326221069
+    name: "FabricIngress.filtering.ingress_port_vlan_counter"
+    alias: "ingress_port_vlan_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 43310977
+}
+direct_counters {
+  preamble {
+    id: 335473470
+    name: "FabricIngress.filtering.fwd_classifier_counter"
+    alias: "fwd_classifier_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 49718154
+}
+direct_counters {
+  preamble {
+    id: 330959985
+    name: "FabricIngress.forwarding.bridging_counter"
+    alias: "bridging_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 43623757
+}
+direct_counters {
+  preamble {
+    id: 318961579
+    name: "FabricIngress.forwarding.mpls_counter"
+    alias: "mpls_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 37768578
+}
+direct_counters {
+  preamble {
+    id: 333425635
+    name: "FabricIngress.forwarding.routing_v4_counter"
+    alias: "routing_v4_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 41754650
+}
+direct_counters {
+  preamble {
+    id: 324042090
+    name: "FabricIngress.forwarding.routing_v6_counter"
+    alias: "routing_v6_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 49342721
+}
+direct_counters {
+  preamble {
+    id: 330020245
+    name: "FabricIngress.pre_next.next_mpls_counter"
+    alias: "next_mpls_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 36626242
+}
+direct_counters {
+  preamble {
+    id: 333692067
+    name: "FabricIngress.pre_next.next_vlan_counter"
+    alias: "next_vlan_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 48011802
+}
+direct_counters {
+  preamble {
+    id: 319194241
+    name: "FabricIngress.acl.acl_counter"
+    alias: "acl_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 44104738
+}
+direct_counters {
+  preamble {
+    id: 326633416
+    name: "FabricIngress.next.simple_counter"
+    alias: "simple_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 39142283
+}
+direct_counters {
+  preamble {
+    id: 322798228
+    name: "FabricIngress.next.hashed_counter"
+    alias: "hashed_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 47960972
+}
+direct_counters {
+  preamble {
+    id: 319194968
+    name: "FabricIngress.next.multicast_counter"
+    alias: "multicast_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 40619180
+}
+direct_counters {
+  preamble {
+    id: 334706097
+    name: "FabricIngress.slice_tc_classifier.classifier_stats"
+    alias: "classifier_stats"
+  }
+  spec {
+    unit: PACKETS
+  }
+  direct_table_id: 34606298
+}
+direct_counters {
+  preamble {
+    id: 327743278
+    name: "FabricIngress.qos.queues_stats"
+    alias: "queues_stats"
+  }
+  spec {
+    unit: PACKETS
+  }
+  direct_table_id: 36435258
+}
+direct_counters {
+  preamble {
+    id: 328581521
+    name: "FabricIngress.int_watchlist.watchlist_counter"
+    alias: "watchlist_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 40748488
+}
+direct_counters {
+  preamble {
+    id: 334508337
+    name: "FabricEgress.stats.flow_counter"
+    alias: "FabricEgress.stats.flow_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 43851059
+}
+direct_counters {
+  preamble {
+    id: 318892680
+    name: "FabricEgress.egress_next.egress_vlan_counter"
+    alias: "egress_vlan_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 49262446
+}
+direct_counters {
+  preamble {
+    id: 325056546
+    name: "FabricEgress.int_egress.report_counter"
+    alias: "report_counter"
+  }
+  spec {
+    unit: BOTH
+  }
+  direct_table_id: 46071383
+}
+meters {
+  preamble {
+    id: 348573637
+    name: "FabricIngress.qos.slice_tc_meter"
+    alias: "slice_tc_meter"
+  }
+  spec {
+    unit: BYTES
+  }
+  size: 64
+}
+controller_packet_metadata {
+  preamble {
+    id: 81826293
+    name: "packet_in"
+    alias: "packet_in"
+    annotations: "@controller_header(\"packet_in\")"
+  }
+  metadata {
+    id: 1
+    name: "ingress_port"
+    bitwidth: 9
+    type_name {
+      name: "FabricPortId_t"
+    }
+  }
+  metadata {
+    id: 2
+    name: "_pad0"
+    bitwidth: 7
+  }
+}
+controller_packet_metadata {
+  preamble {
+    id: 76689799
+    name: "packet_out"
+    alias: "packet_out"
+    annotations: "@controller_header(\"packet_out\")"
+  }
+  metadata {
+    id: 1
+    name: "pad0"
+    annotations: "@padding"
+    bitwidth: 7
+  }
+  metadata {
+    id: 2
+    name: "egress_port"
+    bitwidth: 9
+    type_name {
+      name: "FabricPortId_t"
+    }
+  }
+  metadata {
+    id: 3
+    name: "pad1"
+    annotations: "@padding"
+    bitwidth: 3
+  }
+  metadata {
+    id: 4
+    name: "queue_id"
+    bitwidth: 5
+  }
+  metadata {
+    id: 5
+    name: "pad2"
+    annotations: "@padding"
+    bitwidth: 5
+  }
+  metadata {
+    id: 6
+    name: "cpu_loopback_mode"
+    bitwidth: 2
+  }
+  metadata {
+    id: 7
+    name: "do_forwarding"
+    bitwidth: 1
+  }
+  metadata {
+    id: 8
+    name: "pad3"
+    annotations: "@padding"
+    bitwidth: 16
+  }
+  metadata {
+    id: 9
+    name: "pad4"
+    annotations: "@padding"
+    bitwidth: 48
+  }
+  metadata {
+    id: 10
+    name: "ether_type"
+    bitwidth: 16
+  }
+}
+registers {
+  preamble {
+    id: 376533241
+    name: "FabricEgress.int_egress.seq_number"
+    alias: "seq_number"
+    annotations: "@hidden"
+  }
+  type_spec {
+    bitstring {
+      bit {
+        bitwidth: 32
+      }
+    }
+  }
+  size: 1024
+}
+type_info {
+  serializable_enums {
+    key: "BridgedMdType_t"
+    value {
+      underlying_type {
+        bitwidth: 8
+      }
+      members {
+        name: "INVALID"
+        value: "\000"
+      }
+      members {
+        name: "INGRESS_TO_EGRESS"
+        value: "\001"
+      }
+      members {
+        name: "EGRESS_MIRROR"
+        value: "\002"
+      }
+      members {
+        name: "INGRESS_MIRROR"
+        value: "\003"
+      }
+      members {
+        name: "INT_INGRESS_DROP"
+        value: "\004"
+      }
+      members {
+        name: "DEFLECTED"
+        value: "\005"
+      }
+    }
+  }
+  serializable_enums {
+    key: "CpuLoopbackMode_t"
+    value {
+      underlying_type {
+        bitwidth: 2
+      }
+      members {
+        name: "DISABLED"
+        value: "\000"
+      }
+      members {
+        name: "DIRECT"
+        value: "\001"
+      }
+      members {
+        name: "INGRESS"
+        value: "\002"
+      }
+    }
+  }
+  serializable_enums {
+    key: "FabricMirrorType_t"
+    value {
+      underlying_type {
+        bitwidth: 3
+      }
+      members {
+        name: "INVALID"
+        value: "\000"
+      }
+      members {
+        name: "INT_REPORT"
+        value: "\001"
+      }
+      members {
+        name: "PACKET_IN"
+        value: "\002"
+      }
+    }
+  }
+  serializable_enums {
+    key: "PortType_t"
+    value {
+      underlying_type {
+        bitwidth: 2
+      }
+      members {
+        name: "UNKNOWN"
+        value: "\000"
+      }
+      members {
+        name: "EDGE"
+        value: "\001"
+      }
+      members {
+        name: "INFRA"
+        value: "\002"
+      }
+      members {
+        name: "INTERNAL"
+        value: "\003"
+      }
+    }
+  }
+  new_types {
+    key: "FabricPortId_t"
+    value {
+      original_type {
+        bitstring {
+          bit {
+            bitwidth: 9
+          }
+        }
+      }
+    }
+  }
+}
diff --git a/src/tests/p4-int-routing-acl/run_test_01_bootstrap.sh b/src/tests/p4-int-routing-acl/run_test_01_bootstrap.sh
new file mode 100755
index 0000000000000000000000000000000000000000..76469ca55455aec65569a7c104f87e8d6673dec9
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/run_test_01_bootstrap.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+# make sure to source the following scripts:
+# - my_deploy.sh
+# - tfs_runtime_env_vars.sh
+
+source tfs_runtime_env_vars.sh
+python3 -m pytest --verbose src/tests/p4-int-routing-acl/test_functional_bootstrap.py
diff --git a/src/tests/p4-int-routing-acl/run_test_02_rules_provision.sh b/src/tests/p4-int-routing-acl/run_test_02_rules_provision.sh
new file mode 100755
index 0000000000000000000000000000000000000000..6709d66c62cae11ecc1e555bae81c680dfeaafc8
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/run_test_02_rules_provision.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+source tfs_runtime_env_vars.sh
+python3 -m pytest --verbose src/tests/p4-int-routing-acl/test_functional_rules_provision.py
diff --git a/src/tests/p4-int-routing-acl/run_test_03_rules_deprovision.sh b/src/tests/p4-int-routing-acl/run_test_03_rules_deprovision.sh
new file mode 100755
index 0000000000000000000000000000000000000000..3a67fad8a04520bc48c666b48d684b5ad7fe3d13
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/run_test_03_rules_deprovision.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+source tfs_runtime_env_vars.sh
+python3 -m pytest --verbose src/tests/p4-int-routing-acl/test_functional_rules_deprovision.py
diff --git a/src/tests/p4-int-routing-acl/run_test_04_cleanup.sh b/src/tests/p4-int-routing-acl/run_test_04_cleanup.sh
new file mode 100755
index 0000000000000000000000000000000000000000..917a2af2dab0ab1b9d0d05ad272c6494486d9580
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/run_test_04_cleanup.sh
@@ -0,0 +1,17 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+source tfs_runtime_env_vars.sh
+python3 -m pytest --verbose src/tests/p4-int-routing-acl/test_functional_cleanup.py
diff --git a/src/tests/p4-int-routing-acl/setup.sh b/src/tests/p4-int-routing-acl/setup.sh
new file mode 100755
index 0000000000000000000000000000000000000000..c771642769fe528fe1179909ab0b8edb768f7264
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/setup.sh
@@ -0,0 +1,22 @@
+#! /bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+
+export POD_NAME=$(kubectl get pods -n=tfs | grep device | awk '{print $1}')
+
+kubectl exec ${POD_NAME} -n=tfs -c=server -- mkdir -p /root/p4
+
+kubectl cp src/tests/p4-int-routing-acl/p4src/p4info.txt tfs/${POD_NAME}:/root/p4 -c=server
+kubectl cp src/tests/p4-int-routing-acl/p4src/bmv2.json tfs/${POD_NAME}:/root/p4 -c=server
diff --git a/src/tests/p4-int-routing-acl/test_common.py b/src/tests/p4-int-routing-acl/test_common.py
new file mode 100644
index 0000000000000000000000000000000000000000..8254eddc5bb5f2f2bbf4c0866a9409552872b2c8
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/test_common.py
@@ -0,0 +1,111 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import os
+from common.Constants import DEFAULT_CONTEXT_NAME
+from common.proto.context_pb2 import ContextId, DeviceOperationalStatusEnum
+from common.tools.object_factory.Context import json_context_id
+
+# Context info
+CONTEXT_NAME_P4 = DEFAULT_CONTEXT_NAME
+ADMIN_CONTEXT_ID = ContextId(**json_context_id(CONTEXT_NAME_P4))
+
+# Device and rule cardinality variables
+DEV_NB = 3
+CONNECTION_RULES = 3
+ENDPOINT_RULES = 2
+DATAPLANE_RULES_NB_INT_B1 = 5
+DATAPLANE_RULES_NB_INT_B2 = 6
+DATAPLANE_RULES_NB_INT_B3 = 8
+DATAPLANE_RULES_NB_RT_EDGE = 7
+DATAPLANE_RULES_NB_RT_CORP = 7
+DATAPLANE_RULES_NB_ACL = 1
+DATAPLANE_RULES_NB_TOT = \
+    DATAPLANE_RULES_NB_INT_B1 +\
+    DATAPLANE_RULES_NB_INT_B2 +\
+    DATAPLANE_RULES_NB_INT_B3 +\
+    DATAPLANE_RULES_NB_RT_EDGE +\
+    DATAPLANE_RULES_NB_RT_CORP +\
+    DATAPLANE_RULES_NB_ACL
+
+# Topology descriptor
+DESC_TOPO = os.path.join(
+    os.path.dirname(
+        os.path.abspath(__file__)
+    ),
+    'descriptors', 'topology.json'
+)
+
+# Rule insertion descriptors
+# The switch cannot digest all rules at once, hence we insert in batches
+DESC_FILE_RULES_INSERT_INT_B1 = os.path.join(
+    os.path.dirname(
+        os.path.abspath(__file__)
+    ),
+    'descriptors', 'rules-insert-int-b1.json'
+)
+DESC_FILE_RULES_INSERT_INT_B2 = os.path.join(
+    os.path.dirname(
+        os.path.abspath(__file__)
+    ),
+    'descriptors', 'rules-insert-int-b2.json'
+)
+DESC_FILE_RULES_INSERT_INT_B3 = os.path.join(
+    os.path.dirname(
+        os.path.abspath(__file__)
+    ),
+    'descriptors', 'rules-insert-int-b3.json'
+)
+DESC_FILE_RULES_INSERT_ROUTING_EDGE = os.path.join(
+    os.path.dirname(
+        os.path.abspath(__file__)
+    ),
+    'descriptors', 'rules-insert-routing-edge.json'
+)
+DESC_FILE_RULES_INSERT_ROUTING_CORP = os.path.join(
+    os.path.dirname(
+        os.path.abspath(__file__)
+    ),
+    'descriptors', 'rules-insert-routing-corp.json'
+)
+DESC_FILE_RULES_INSERT_ACL = os.path.join(
+    os.path.dirname(
+        os.path.abspath(__file__)
+    ),
+    'descriptors', 'rules-insert-acl.json'
+)
+
+# Rule deletion descriptor
+DESC_FILE_RULES_DELETE_ALL = os.path.join(
+    os.path.dirname(
+        os.path.abspath(__file__)
+    ),
+    'descriptors', 'rules-remove.json'
+)
+
+def verify_number_of_rules(devices, desired_rules_nb):
+    # Iterate all devices
+    for device in devices:
+        # Skip non-P4 devices
+        if device.device_type != "p4-switch": continue
+
+        # We want the device to be active
+        assert \
+            device.device_operational_status == DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED
+
+        # Get the configuration rules of this device
+        config_rules = device.device_config.config_rules
+
+        # Expected rule cardinality
+        assert len(config_rules) == desired_rules_nb
diff --git a/src/tests/p4-int-routing-acl/test_functional_bootstrap.py b/src/tests/p4-int-routing-acl/test_functional_bootstrap.py
new file mode 100644
index 0000000000000000000000000000000000000000..b5b72cc331ea1c7bf6e57aefc484532d66cb8504
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/test_functional_bootstrap.py
@@ -0,0 +1,70 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import logging, time
+from common.proto.context_pb2 import DeviceOperationalStatusEnum, Empty
+from common.tools.descriptor.Loader import DescriptorLoader, \
+    check_descriptor_load_results, validate_empty_scenario
+from context.client.ContextClient import ContextClient
+from device.client.DeviceClient import DeviceClient
+from tests.Fixtures import context_client, device_client # pylint: disable=unused-import
+from test_common import *
+
+LOGGER = logging.getLogger(__name__)
+LOGGER.setLevel(logging.DEBUG)
+
+def test_scenario_bootstrap(
+    context_client : ContextClient, # pylint: disable=redefined-outer-name
+    device_client : DeviceClient    # pylint: disable=redefined-outer-name
+) -> None:
+    """
+    This test assumes that the environment is in a clean state (empty)
+    before bootstrapping the P4 topology.
+    It loads the topology descriptor and verifies that no other services
+    or slices are created.
+    """
+    validate_empty_scenario(context_client)
+
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESC_TOPO, context_client=context_client, device_client=device_client)
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+    descriptor_loader.validate()
+
+    # Verify the scenario has no services/slices
+    response = context_client.GetContext(ADMIN_CONTEXT_ID)
+    assert len(response.service_ids) == 0
+    assert len(response.slice_ids) == 0
+
+def test_scenario_devices_enabled(
+    context_client : ContextClient  # pylint: disable=redefined-outer-name
+) -> None:
+    """
+    This test validates that the devices are enabled.
+    """
+    DEVICE_OP_STATUS_ENABLED = DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED
+
+    num_devices = -1
+    num_devices_enabled, num_retry = 0, 0
+    while (num_devices != num_devices_enabled) and (num_retry < 10):
+        time.sleep(1.0)
+        response = context_client.ListDevices(Empty())
+        num_devices = len(response.devices)
+        num_devices_enabled = 0
+        for device in response.devices:
+            if device.device_operational_status != DEVICE_OP_STATUS_ENABLED: continue
+            num_devices_enabled += 1
+        LOGGER.info('Num Devices enabled: {:d}/{:d}'.format(num_devices_enabled, num_devices))
+        num_retry += 1
+    assert num_devices_enabled == num_devices
diff --git a/src/tests/p4-int-routing-acl/test_functional_cleanup.py b/src/tests/p4-int-routing-acl/test_functional_cleanup.py
new file mode 100644
index 0000000000000000000000000000000000000000..60c8684b098aa886fdd62db28a07a2d5c8adc125
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/test_functional_cleanup.py
@@ -0,0 +1,41 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import logging, os
+from common.Constants import DEFAULT_CONTEXT_NAME
+from common.proto.context_pb2 import ContextId
+from common.tools.descriptor.Loader import DescriptorLoader, validate_empty_scenario
+from context.client.ContextClient import ContextClient
+from device.client.DeviceClient import DeviceClient
+from tests.Fixtures import context_client, device_client # pylint: disable=unused-import
+from test_common import *
+
+LOGGER = logging.getLogger(__name__)
+LOGGER.setLevel(logging.DEBUG)
+
+def test_scenario_cleanup(
+    context_client : ContextClient, # pylint: disable=redefined-outer-name
+    device_client : DeviceClient    # pylint: disable=redefined-outer-name
+) -> None:
+    # Verify the scenario has no services/slices
+    response = context_client.GetContext(ADMIN_CONTEXT_ID)
+    assert len(response.service_ids) == 0
+    assert len(response.slice_ids) == 0
+
+    # Unload topology and validate empty scenario
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESC_TOPO, context_client=context_client, device_client=device_client)
+    descriptor_loader.validate()
+    descriptor_loader.unload()
+    validate_empty_scenario(context_client)
diff --git a/src/tests/p4-int-routing-acl/test_functional_rules_deprovision.py b/src/tests/p4-int-routing-acl/test_functional_rules_deprovision.py
new file mode 100644
index 0000000000000000000000000000000000000000..2d54ae9088600381a000722608bd39eb49483a03
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/test_functional_rules_deprovision.py
@@ -0,0 +1,93 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import logging
+from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results
+from common.tools.grpc.Tools import grpc_message_to_json_string
+from context.client.ContextClient import ContextClient
+from device.client.DeviceClient import DeviceClient
+from tests.Fixtures import context_client, device_client   # pylint: disable=unused-import
+from test_common import *
+
+LOGGER = logging.getLogger(__name__)
+LOGGER.setLevel(logging.DEBUG)
+
+def test_initial_context(
+    context_client : ContextClient # pylint: disable=redefined-outer-name
+) -> None:
+    # Verify the scenario has 0 service and 0 slices
+    response = context_client.GetContext(ADMIN_CONTEXT_ID)
+    assert len(response.service_ids) == 0
+    assert len(response.slice_ids) == 0
+
+    # Check there are no slices
+    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response)))
+    assert len(response.slices) == 0
+
+    # Check there is 0 service
+    response = context_client.ListServices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
+    assert len(response.services) == 0
+
+    # Check there are 3 devices
+    response = context_client.ListDevices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Devices[{:d}] = {:s}'.format(len(response.devices), grpc_message_to_json_string(response)))
+    assert len(response.devices) == DEV_NB
+
+def test_rules_before_removal(
+    context_client : ContextClient # pylint: disable=redefined-outer-name
+) -> None:
+    response = context_client.ListDevices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Devices[{:d}] = {:s}'.format(len(response.devices), grpc_message_to_json_string(response)))
+    assert len(response.devices) == DEV_NB
+
+    # Verify that the following rules are in place
+    desired_rules_nb = \
+        CONNECTION_RULES + \
+        ENDPOINT_RULES + \
+        DATAPLANE_RULES_NB_INT_B1 + \
+        DATAPLANE_RULES_NB_INT_B2 + \
+        DATAPLANE_RULES_NB_INT_B3 + \
+        DATAPLANE_RULES_NB_RT_EDGE + \
+        DATAPLANE_RULES_NB_RT_CORP + \
+        DATAPLANE_RULES_NB_ACL
+    assert desired_rules_nb == CONNECTION_RULES + ENDPOINT_RULES + DATAPLANE_RULES_NB_TOT
+    verify_number_of_rules(response.devices, desired_rules_nb)
+
+def test_rules_removal(
+    context_client : ContextClient, # pylint: disable=redefined-outer-name
+    device_client : DeviceClient    # pylint: disable=redefined-outer-name
+) -> None:
+    # Load dataplane rules for removal
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESC_FILE_RULES_DELETE_ALL, context_client=context_client, device_client=device_client
+    )
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+
+def test_rules_after_removal(
+    context_client : ContextClient # pylint: disable=redefined-outer-name
+) -> None:
+    # State **after** removing all dataplane rules
+    # Still 3 devices
+    response = context_client.ListDevices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Devices[{:d}] = {:s}'.format(len(response.devices), grpc_message_to_json_string(response)))
+    assert len(response.devices) == DEV_NB
+
+    # Only connection and endpoint rules must be in place
+    desired_rules_nb = \
+        CONNECTION_RULES + \
+        ENDPOINT_RULES
+    verify_number_of_rules(response.devices, desired_rules_nb)
diff --git a/src/tests/p4-int-routing-acl/test_functional_rules_provision.py b/src/tests/p4-int-routing-acl/test_functional_rules_provision.py
new file mode 100644
index 0000000000000000000000000000000000000000..86a82d2129e495f3c3be9f9ea7b67b24d27a8db7
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/test_functional_rules_provision.py
@@ -0,0 +1,238 @@
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+import logging
+from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results
+from common.tools.grpc.Tools import grpc_message_to_json_string
+from context.client.ContextClient import ContextClient
+from device.client.DeviceClient import DeviceClient
+from tests.Fixtures import context_client, device_client # pylint: disable=unused-import
+from test_common import *
+
+LOGGER = logging.getLogger(__name__)
+LOGGER.setLevel(logging.DEBUG)
+
+def test_initial_context(
+    context_client : ContextClient # pylint: disable=redefined-outer-name
+) -> None:
+    # Verify the scenario has 0 service and 0 slices
+    response = context_client.GetContext(ADMIN_CONTEXT_ID)
+    assert len(response.service_ids) == 0
+    assert len(response.slice_ids) == 0
+
+    # Check there are no slices
+    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response)))
+    assert len(response.slices) == 0
+
+    # Check there is 0 service
+    response = context_client.ListServices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
+    assert len(response.services) == 0
+
+    # Check there are 3 devices
+    response = context_client.ListDevices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Devices[{:d}] = {:s}'.format(len(response.devices), grpc_message_to_json_string(response)))
+    assert len(response.devices) == DEV_NB
+
+def test_rules_before_insertion(
+    context_client : ContextClient # pylint: disable=redefined-outer-name
+) -> None:
+    response = context_client.ListDevices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Devices[{:d}] = {:s}'.format(len(response.devices), grpc_message_to_json_string(response)))
+    assert len(response.devices) == DEV_NB
+
+    # Verify that the following rules are in place
+    desired_rules_nb = \
+        CONNECTION_RULES + \
+        ENDPOINT_RULES
+    verify_number_of_rules(response.devices, desired_rules_nb)
+
+def test_rules_insertion_int_batch_1(
+    context_client : ContextClient, # pylint: disable=redefined-outer-name
+    device_client : DeviceClient    # pylint: disable=redefined-outer-name
+) -> None:
+    # Load INT batch 1 rules for insertion
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESC_FILE_RULES_INSERT_INT_B1, context_client=context_client, device_client=device_client
+    )
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+
+def test_rules_after_insertion_int_batch_1(
+    context_client : ContextClient # pylint: disable=redefined-outer-name
+) -> None:
+    # State **after** inserting batch 1 of INT rules
+    # Still 3 devices
+    response = context_client.ListDevices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Devices[{:d}] = {:s}'.format(len(response.devices), grpc_message_to_json_string(response)))
+    assert len(response.devices) == DEV_NB
+
+    # Verify that the following rules are in place
+    desired_rules_nb = \
+        CONNECTION_RULES + \
+        ENDPOINT_RULES + \
+        DATAPLANE_RULES_NB_INT_B1
+    verify_number_of_rules(response.devices, desired_rules_nb)
+
+def test_rules_insertion_int_batch_2(
+    context_client : ContextClient, # pylint: disable=redefined-outer-name
+    device_client : DeviceClient    # pylint: disable=redefined-outer-name
+) -> None:
+    # Load INT batch 2 rules for insertion
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESC_FILE_RULES_INSERT_INT_B2, context_client=context_client, device_client=device_client
+    )
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+
+def test_rules_after_insertion_int_batch_2(
+    context_client : ContextClient # pylint: disable=redefined-outer-name
+) -> None:
+    # State **after** inserting batch 2 of INT rules
+    # Still 3 devices
+    response = context_client.ListDevices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Devices[{:d}] = {:s}'.format(len(response.devices), grpc_message_to_json_string(response)))
+    assert len(response.devices) == DEV_NB
+
+    # Verify that the following rules are in place
+    desired_rules_nb = \
+        CONNECTION_RULES + \
+        ENDPOINT_RULES + \
+        DATAPLANE_RULES_NB_INT_B1 + \
+        DATAPLANE_RULES_NB_INT_B2
+    verify_number_of_rules(response.devices, desired_rules_nb)
+
+def test_rules_insertion_int_batch_3(
+    context_client : ContextClient, # pylint: disable=redefined-outer-name
+    device_client : DeviceClient    # pylint: disable=redefined-outer-name
+) -> None:
+    # Load INT batch 3 rules for insertion
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESC_FILE_RULES_INSERT_INT_B3, context_client=context_client, device_client=device_client
+    )
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+
+def test_rules_after_insertion_int_batch_3(
+    context_client : ContextClient # pylint: disable=redefined-outer-name
+) -> None:
+    # State **after** inserting batch 3 of INT rules
+    # Still 3 devices
+    response = context_client.ListDevices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Devices[{:d}] = {:s}'.format(len(response.devices), grpc_message_to_json_string(response)))
+    assert len(response.devices) == DEV_NB
+
+    # Verify that the following rules are in place
+    desired_rules_nb = \
+        CONNECTION_RULES + \
+        ENDPOINT_RULES + \
+        DATAPLANE_RULES_NB_INT_B1 + \
+        DATAPLANE_RULES_NB_INT_B2 + \
+        DATAPLANE_RULES_NB_INT_B3
+    verify_number_of_rules(response.devices, desired_rules_nb)
+
+def test_rules_insertion_routing_edge_batch_4(
+    context_client : ContextClient, # pylint: disable=redefined-outer-name
+    device_client : DeviceClient    # pylint: disable=redefined-outer-name
+) -> None:
+    # Load routing edge batch 4 rules for insertion
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESC_FILE_RULES_INSERT_ROUTING_EDGE, context_client=context_client, device_client=device_client
+    )
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+
+def test_rules_after_insertion_routing_edge_batch_4(
+    context_client : ContextClient # pylint: disable=redefined-outer-name
+) -> None:
+    # State **after** inserting batch 4 of routing edge rules
+    # Still 3 devices
+    response = context_client.ListDevices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Devices[{:d}] = {:s}'.format(len(response.devices), grpc_message_to_json_string(response)))
+    assert len(response.devices) == DEV_NB
+
+    # Verify that the following rules are in place
+    desired_rules_nb = \
+        CONNECTION_RULES + \
+        ENDPOINT_RULES + \
+        DATAPLANE_RULES_NB_INT_B1 + \
+        DATAPLANE_RULES_NB_INT_B2 + \
+        DATAPLANE_RULES_NB_INT_B3 + \
+        DATAPLANE_RULES_NB_RT_EDGE
+    verify_number_of_rules(response.devices, desired_rules_nb)
+
+def test_rules_insertion_routing_corp_batch_5(
+    context_client : ContextClient, # pylint: disable=redefined-outer-name
+    device_client : DeviceClient    # pylint: disable=redefined-outer-name
+) -> None:
+    # Load routing corp batch 5 rules for insertion
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESC_FILE_RULES_INSERT_ROUTING_CORP, context_client=context_client, device_client=device_client
+    )
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+
+def test_rules_after_insertion_routing_corp_batch_5(
+    context_client : ContextClient # pylint: disable=redefined-outer-name
+) -> None:
+    # State **after** inserting batch 5 of routing corp rules
+    # Still 3 devices
+    response = context_client.ListDevices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Devices[{:d}] = {:s}'.format(len(response.devices), grpc_message_to_json_string(response)))
+    assert len(response.devices) == DEV_NB
+
+    # Verify that the following rules are in place
+    desired_rules_nb = \
+        CONNECTION_RULES + \
+        ENDPOINT_RULES + \
+        DATAPLANE_RULES_NB_INT_B1 + \
+        DATAPLANE_RULES_NB_INT_B2 + \
+        DATAPLANE_RULES_NB_INT_B3 + \
+        DATAPLANE_RULES_NB_RT_EDGE + \
+        DATAPLANE_RULES_NB_RT_CORP
+    verify_number_of_rules(response.devices, desired_rules_nb)
+
+def test_rules_insertion_acl_batch_6(
+    context_client : ContextClient, # pylint: disable=redefined-outer-name
+    device_client : DeviceClient    # pylint: disable=redefined-outer-name
+) -> None:
+    # Load ACL batch 6 rules for insertion
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESC_FILE_RULES_INSERT_ACL, context_client=context_client, device_client=device_client
+    )
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+
+def test_rules_after_insertion_acl_batch_6(
+    context_client : ContextClient # pylint: disable=redefined-outer-name
+) -> None:
+    # State **after** inserting batch 6 of ACL rules
+    # Still 3 devices
+    response = context_client.ListDevices(ADMIN_CONTEXT_ID)
+    LOGGER.warning('Devices[{:d}] = {:s}'.format(len(response.devices), grpc_message_to_json_string(response)))
+    assert len(response.devices) == DEV_NB
+
+    # Verify that the following rules are in place
+    desired_rules_nb = \
+        CONNECTION_RULES + \
+        ENDPOINT_RULES + \
+        DATAPLANE_RULES_NB_INT_B1 + \
+        DATAPLANE_RULES_NB_INT_B2 + \
+        DATAPLANE_RULES_NB_INT_B3 + \
+        DATAPLANE_RULES_NB_RT_EDGE + \
+        DATAPLANE_RULES_NB_RT_CORP + \
+        DATAPLANE_RULES_NB_ACL
+    assert desired_rules_nb == CONNECTION_RULES + ENDPOINT_RULES + DATAPLANE_RULES_NB_TOT
+    verify_number_of_rules(response.devices, desired_rules_nb)
diff --git a/src/tests/p4-int-routing-acl/topology/README.md b/src/tests/p4-int-routing-acl/topology/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..30d4d84bcf2771bb9732e9686a680de0a643fa79
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/topology/README.md
@@ -0,0 +1,166 @@
+# P4 Topology
+
+This directory contains scripts for deploying a single software-based Stratum switch on a VM or bare metal machine.
+
+## Prerequisites
+
+The machine on which Stratum will be deployed must have at least 3 network interfaces as follows:
+
+- a management interface for the switch to communicate with the control plane (i.e., TFS controller and INT collector)
+- a west data plane interface towards a certain subnet (we call it edge subnet in this example)
+- an est data plane interface towards another subnet (we call it corporate subnet in this example)
+
+Also, due to Stratum's restrictions, the desired OS of the machine shall be `Ubuntu server 20.04 LTS`.
+
+To build Stratum on this machine, follow the steps [here](https://github.com/stratum/stratum/blob/main/stratum/hal/bin/bmv2/README.md).
+It is preferred to run Stratum as a binary.
+
+## Steps to setup the environment and deploy the Stratum switch
+
+We create a Linux namespace for Stratum to live in an isolated space from the rest of the system.
+The two data plane interfaces of the VM need to be enclosed into this namespace, while for this namespace to interact with the outside world (i.e., root namespace and outside the VM), a dedicated virtual interface pair is created.
+
+Follow the steps below to create the environment, deploy Stratum, and restore the VM to its previous state (cleanup).
+Prior to this take a look at the environment configuration file, where one can change the names of the interfaces, according to your network setup.
+
+```shell
+nano p4-switch-conf-common.sh
+
+HOST_IFACE_EXT="ens3"     # Interface towards TFS (management)
+SW_IFACE_DATA_EDGE="ens4" # Interface towards the edge subnet (data plane)
+SW_IFACE_DATA_CORP="ens5" # Interface towards the corporate subnet (data plane)
+
+...
+```
+
+### Step 1: Setup environment
+
+Edit the `setup` script to modify the subnets' information according to your network setup:
+
+```shell
+nano p4-switch-setup.sh
+
+# Subnets managed by the switch
+DOMAIN_EDGE_IP="10.158.72.0/24"  # Left-hand side subnet
+DOMAIN_CORP_IP="172.16.10.0/24"  # Right-hand side subnet
+```
+
+Once your network setup is applied, run the `setup` script as follows:
+
+```shell
+sudo bash p4-switch-setup.sh
+```
+
+To verify that the switch namespace is in place, issue the following command:
+
+```shell
+sudo ip netns exec ns-switch ip a
+```
+
+The output should show 4 network interfaces, i.e., a `loopback` interface, 2 data planes interfaces (e.g., `ens4`, `ens5` in this example), and a virtual interface for sending telemetry data out of the switch (i.e., `veth-int-sw` in this example).
+From this latter interface you can ping towards the other end of the virtual interface pair (i.e., `veth-int-host`):
+
+```shell
+sudo ip netns exec ns-switch ping 10.0.0.254
+```
+
+This ensures that telemetry data leaves the switch and ends up on the host VM.
+To dispatch this telemetry data towards TFS, the `p4-switch-setup.sh` implements packet mirroring from `veth-int-host` to the VM's management interface (i.e., `ens3` in this example).
+We assume that TFS is deployed on a machine that is accessible via the management interface (i.e., `ens3`) of this VM.
+
+### Step 2: Deploy Stratum in the namespace
+
+Now the namespace is ready to host the Stratum switch.
+
+First you need to configure the chassis configuration file with the correct network interfaces names.
+To do so, modify the `name` field changing `ens4`, `ens5`, and `ens3` to your desired interfaces.
+These interface names must agree with the ones you added in `p4-switch-conf-common.sh`.
+
+```shell
+cat p4-switch-three-port-chassis-config-phy.pb.txt
+
+# Copyright 2018-present Open Networking Foundation
+# SPDX-License-Identifier: Apache-2.0
+
+description: "Chassis configuration for a single Stratum bmv2 switch with 3 ports"
+chassis {
+  platform: PLT_P4_SOFT_SWITCH
+  name: "bmv2-switch"
+}
+nodes {
+  id: 1
+  slot: 1
+  index: 1
+}
+singleton_ports {
+  id: 1
+  name: "ens4"
+  slot: 1
+  port: 1
+  channel: 1
+  speed_bps: 100000000000
+  config_params {
+    admin_state: ADMIN_STATE_ENABLED
+  }
+  node: 1
+}
+singleton_ports {
+  id: 2
+  name: "ens5"
+  slot: 1
+  port: 2
+  channel: 1
+  speed_bps: 100000000000
+  config_params {
+    admin_state: ADMIN_STATE_ENABLED
+  }
+  node: 1
+}
+singleton_ports {
+  id: 3
+  name: "veth-int-sw"
+  slot: 1
+  port: 3
+  channel: 1
+  speed_bps: 100000000000
+  config_params {
+    admin_state: ADMIN_STATE_ENABLED
+  }
+  node: 1
+}
+```
+
+To deploy Stratum, do:
+
+```shell
+sudo bash run-stratum.sh
+```
+
+To run Stratum will verbose logging, open the `run-stratum.sh` and change:
+
+```shell
+LOG_LEVEL="debug"
+```
+
+Then, re-deploy Stratum as shown above.
+
+To verify that Stratum has been correctly deployed, you should see the following output:
+
+```
+<timestamp> config_monitoring_service.cc:94] Pushing the saved chassis config read from p4-switch-three-port-chassis-config-phy.pb.txt...
+<timestamp> bmv2_chassis_manager.cc:519] Registered port status callbacks successfully for node 1.
+<timestamp> bmv2_chassis_manager.cc:453] State of port 1 in node 1: UP.
+<timestamp> bmv2_chassis_manager.cc:453] State of port 2 in node 1: UP.
+<timestamp> bmv2_chassis_manager.cc:453] State of port 3 in node 1: UP.
+<timestamp> bmv2_switch.cc:74] P4-based forwarding pipeline config pushed successfully to node with ID 1.
+<timestamp> hal.cc:220] Stratum external facing services are listening to 0.0.0.0:50000, 0.0.0.0:50001, 0.0.0.0:50101...
+```
+
+### Step 3: Restore to the original setup
+
+When your tests with Stratum and TFS are over, you may want to restore your setup.
+To do so, execute the following script:
+
+```shell
+sudo bash p4-switch-tear-down.sh
+```
diff --git a/src/tests/p4-int-routing-acl/topology/p4-switch-conf-common.sh b/src/tests/p4-int-routing-acl/topology/p4-switch-conf-common.sh
new file mode 100644
index 0000000000000000000000000000000000000000..3ba84651e7e9550ef4b47d28f9ce3efa1f8fd2c8
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/topology/p4-switch-conf-common.sh
@@ -0,0 +1,40 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+# Switch lives in a namespace
+SWITCH_NS="ns-switch"
+
+# Physical interfaces
+HOST_IFACE_EXT="ens3"     # Interface towards TFS (management)
+SW_IFACE_DATA_EDGE="ens4" # Interface towards the edge subnet (data plane)
+SW_IFACE_DATA_CORP="ens5" # Interface towards the corporate subnet (data plane)
+
+# Virtual interfaces for INT
+SW_IFACE_INT="veth-int-sw"
+HOST_IFACE_INT="veth-int-host"
+
+# IP subnet for INT
+TOPO_INT_NET="10.0.0.0/24"
+TOPO_INT_NET_IP="10.0.0.0"
+TOPO_INT_NET_MASK="255.255.255.0"
+
+# Transport port where the P4Runtime gRPC server is deployed on the switch
+SW_P4RT_GRPC_PORT="50001"
+
+# Transport port where the P4Runtime gNMI server is deployed on the switch
+SW_P4RT_GNMI_PORT="50000"
+
+# Transport port where Stratum listens to local calls
+SW_P4RT_LOCAL_PORT="50101"
diff --git a/src/tests/p4-int-routing-acl/topology/p4-switch-setup.sh b/src/tests/p4-int-routing-acl/topology/p4-switch-setup.sh
new file mode 100644
index 0000000000000000000000000000000000000000..1a5f37b2fbe2b1acd6c3ef69682d645591093f69
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/topology/p4-switch-setup.sh
@@ -0,0 +1,134 @@
+#!bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+# You must run this script as root
+if [ "$EUID" -ne 0 ]; then
+    echo "Please run as root"
+    exit 1
+fi
+
+source "p4-switch-conf-common.sh"
+
+# MAC addresses of the virtual INT interfaces
+SW_INT_MAC="00:11:22:33:44:11"
+HOST_INT_MAC="00:11:22:33:44:22"
+
+# IP addresses of the virtual INT interfaces
+SWITCH_INT_IP="10.0.0.1"
+HOST_INT_IP="10.0.0.254"
+
+SWITCH_INT_IP_NET=${SWITCH_INT_IP}"/24"
+HOST_INT_IP_NET=${HOST_INT_IP}"/24"
+
+# Subnets managed by the switch
+DOMAIN_EDGE_IP="10.158.72.22/24" # Edge domain side IP address
+DOMAIN_CORP_IP="172.16.10.4/24"  # Corporate domain side IP address
+
+# INT subnet MTU
+MTU_LEN=9000
+
+kill_stratum() {
+    pkill stratum
+}
+
+create_namespaces() {
+    ip netns add ${SWITCH_NS}
+}
+
+create_virtual_interfaces() {
+    ip link add ${HOST_IFACE_INT} type veth peer name ${SW_IFACE_INT}
+}
+
+assign_virtual_interfaces() {
+    ip link set ${SW_IFACE_DATA_EDGE} netns ${SWITCH_NS}
+    ip link set ${SW_IFACE_DATA_CORP} netns ${SWITCH_NS}
+    ip link set ${SW_IFACE_INT} netns ${SWITCH_NS}
+}
+
+set_mac_addresses() {
+    ip netns exec ${SWITCH_NS} ifconfig ${SW_IFACE_INT} hw ether ${SW_INT_MAC}
+    ifconfig ${HOST_IFACE_INT} hw ether ${HOST_INT_MAC}
+}
+
+set_mtu() {
+    ip netns exec ${SWITCH_NS} ip link set dev ${SW_IFACE_INT} mtu ${MTU_LEN}
+    ip link set dev ${HOST_IFACE_INT} mtu ${MTU_LEN}
+}
+
+set_ip_addresses() {
+    ip -n ${SWITCH_NS} addr add ${DOMAIN_EDGE_IP} dev ${SW_IFACE_DATA_EDGE}
+    ip -n ${SWITCH_NS} addr add ${DOMAIN_CORP_IP} dev ${SW_IFACE_DATA_CORP}
+    ip -n ${SWITCH_NS} addr add ${SWITCH_INT_IP_NET} dev ${SW_IFACE_INT}
+    ifconfig ${HOST_IFACE_INT} ${HOST_INT_IP_NET}
+}
+
+bring_interfaces_up() {
+    ip -n ${SWITCH_NS} link set ${SW_IFACE_DATA_EDGE} up
+    ip -n ${SWITCH_NS} link set ${SW_IFACE_DATA_CORP} up
+    ip -n ${SWITCH_NS} link set ${SW_IFACE_INT} up
+    ifconfig ${HOST_IFACE_INT} up
+}
+
+disable_csum_offloading() {
+    ip netns exec ${SWITCH_NS} ethtool -K ${SW_IFACE_DATA_EDGE} rx off tx off
+    ip netns exec ${SWITCH_NS} ethtool -K ${SW_IFACE_DATA_CORP} rx off tx off
+}
+
+switch_default_gw() {
+    ip netns exec ${SWITCH_NS} ip route add default via ${HOST_INT_IP}
+}
+
+enable_ip_fwd() {
+    sysctl net.ipv4.ip_forward=1
+    sysctl net.ipv4.conf.${HOST_IFACE_EXT}.forwarding=1
+    sysctl net.ipv4.conf.${HOST_IFACE_INT}.forwarding=1
+}
+
+switch_access_to_internet() {
+    iptables -P FORWARD DROP
+    iptables -t nat -A POSTROUTING -s ${TOPO_INT_NET_IP}/${TOPO_INT_NET_MASK} -o ${HOST_IFACE_EXT} -j MASQUERADE
+    iptables -A FORWARD -i ${HOST_IFACE_EXT} -o ${HOST_IFACE_INT} -j ACCEPT
+    iptables -A FORWARD -o ${HOST_IFACE_EXT} -i ${HOST_IFACE_INT} -j ACCEPT
+}
+
+grpc_port_forwarding() {
+    iptables -t nat -A PREROUTING -p tcp -i ${HOST_IFACE_EXT} --dport ${SW_P4RT_GRPC_PORT} -j DNAT --to-destination ${SWITCH_INT_IP}:${SW_P4RT_GRPC_PORT}
+    iptables -A FORWARD -p tcp -d ${SWITCH_INT_IP} --dport ${SW_P4RT_GRPC_PORT} -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
+}
+
+int_packet_mirroring() {
+    sudo tc qdisc add dev ${HOST_IFACE_INT} ingress
+    sudo tc filter add dev ${HOST_IFACE_INT} parent ffff: \
+        protocol all prio 2 u32 \
+        match u32 0 0 flowid 1:1 \
+        action mirred egress mirror dev ${HOST_IFACE_EXT}
+}
+
+kill_stratum
+create_namespaces
+create_virtual_interfaces
+assign_virtual_interfaces
+set_mac_addresses
+set_mtu
+set_ip_addresses
+bring_interfaces_up
+disable_csum_offloading
+switch_default_gw
+enable_ip_fwd
+switch_access_to_internet
+grpc_port_forwarding
+int_packet_mirroring
+
+exit 0
diff --git a/src/tests/p4-int-routing-acl/topology/p4-switch-tear-down.sh b/src/tests/p4-int-routing-acl/topology/p4-switch-tear-down.sh
new file mode 100644
index 0000000000000000000000000000000000000000..9d79343a37e8b65167992e53f7c3e54944adfb1a
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/topology/p4-switch-tear-down.sh
@@ -0,0 +1,84 @@
+#!bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+# You must run this script as root
+if [ "$EUID" -ne 0 ]; then
+    echo "Please run as root"
+    exit 1
+fi
+
+source "p4-switch-conf-common.sh"
+
+kill_stratum() {
+    pkill stratum
+}
+
+delete_virtual_interfaces() {
+    ip netns exec ${SWITCH_NS} ip link delete ${SW_IFACE_INT}
+}
+
+delete_namespaces() {
+    ip netns del ${SWITCH_NS}
+}
+
+bring_interfaces_up() {
+    ifconfig ${SW_IFACE_DATA_EDGE} up
+    ifconfig ${SW_IFACE_DATA_CORP} up
+}
+
+cleanup_iptables() {
+    # gRPC entries
+    entry_no=$(iptables --line-numbers -nvL | grep ${HOST_IFACE_INT} | cut -d " " -f 1 | head -1)
+    iptables -D FORWARD ${entry_no}
+    entry_no=$(iptables --line-numbers -nvL | grep ${HOST_IFACE_INT} | cut -d " " -f 1)
+    iptables -D FORWARD ${entry_no}
+    entry_no=$(iptables --line-numbers -nvL | grep ${SW_P4RT_GRPC_PORT} | cut -d " " -f 1)
+    iptables -D FORWARD ${entry_no}
+
+    entry_no=$(iptables -t nat --line-numbers -nvL | grep ${SW_P4RT_GRPC_PORT} | cut -d " " -f 1)
+    iptables -t nat -D PREROUTING ${entry_no}
+
+    entry_no=$(iptables -t nat --line-numbers -nvL | grep ${TOPO_INT_NET} | cut -d " " -f 1)
+    iptables -t nat -D POSTROUTING ${entry_no}
+
+    # Check new state
+    echo "Forwarding tables"
+    iptables --line-numbers -nvL
+    echo -e ""
+    echo "NAT tables"
+    iptables -t nat --line-numbers -nvL
+}
+
+cleanup_tc() {
+    sudo tc filter del dev ${HOST_IFACE_INT} parent ffff: \
+        protocol all prio 2 u32 \
+        match u32 0 0 flowid 1:1 \
+        action mirred egress mirror dev ${HOST_IFACE_EXT}
+    sudo tc qdisc del dev ${HOST_IFACE_INT} ingress
+
+    # Check new state
+    echo -e ""
+    echo -e "Linux tc status"
+    tc qdisc show
+}
+
+kill_stratum
+delete_virtual_interfaces
+delete_namespaces
+# bring_interfaces_up
+cleanup_iptables
+cleanup_tc
+
+exit 0
diff --git a/src/tests/p4-int-routing-acl/topology/p4-switch-three-port-chassis-config-phy.pb.txt b/src/tests/p4-int-routing-acl/topology/p4-switch-three-port-chassis-config-phy.pb.txt
new file mode 100644
index 0000000000000000000000000000000000000000..038d3626960e252a318edd5419ed887e2682a4b5
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/topology/p4-switch-three-port-chassis-config-phy.pb.txt
@@ -0,0 +1,63 @@
+# Copyright 2018-present Open Networking Foundation
+# SPDX-License-Identifier: Apache-2.0
+
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+description: "Chassis configuration for a single Stratum bmv2 switch with 3 ports"
+chassis {
+  platform: PLT_P4_SOFT_SWITCH
+  name: "bmv2-switch"
+}
+nodes {
+  id: 1
+  slot: 1
+  index: 1
+}
+singleton_ports {
+  id: 1
+  name: "ens4"
+  slot: 1
+  port: 1
+  channel: 1
+  speed_bps: 100000000000
+  config_params {
+    admin_state: ADMIN_STATE_ENABLED
+  }
+  node: 1
+}
+singleton_ports {
+  id: 2
+  name: "ens5"
+  slot: 1
+  port: 2
+  channel: 1
+  speed_bps: 100000000000
+  config_params {
+    admin_state: ADMIN_STATE_ENABLED
+  }
+  node: 1
+}
+singleton_ports {
+  id: 3
+  name: "veth-int-sw"
+  slot: 1
+  port: 3
+  channel: 1
+  speed_bps: 100000000000
+  config_params {
+    admin_state: ADMIN_STATE_ENABLED
+  }
+  node: 1
+}
diff --git a/src/tests/p4-int-routing-acl/topology/run-stratum.sh b/src/tests/p4-int-routing-acl/topology/run-stratum.sh
new file mode 100644
index 0000000000000000000000000000000000000000..29e4647793c79084dbc740d73af454cda16ac9d1
--- /dev/null
+++ b/src/tests/p4-int-routing-acl/topology/run-stratum.sh
@@ -0,0 +1,46 @@
+#!/bin/bash
+# Copyright 2022-2024 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/)
+#
+# 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.
+
+# You must run this script as root
+if [ "$EUID" -ne 0 ]; then
+    echo "Please run as root"
+    exit 1
+fi
+
+source "p4-switch-conf-common.sh"
+
+LOG_FILE_DIR="/var/log/stratum/"
+
+sudo mkdir -p "${LOG_FILE_DIR}"
+
+LOG_LEVEL="info"
+READ_LOGS_FILE_PATH=${LOG_FILE_DIR}"p4_reads.pb.txt"
+WRITE_LOGS_FILE_PATH=${LOG_FILE_DIR}"p4_writes.pb.txt"
+CHASSIS_CONFIG="p4-switch-three-port-chassis-config-phy.pb.txt"
+
+[ -f ${CHASSIS_CONFIG} ] || { echo "$CHASSIS_CONFIG not found!" ; exit 1 ;}
+
+touch "${READ_LOGS_FILE_PATH}"
+touch "${WRITE_LOGS_FILE_PATH}"
+
+ip netns exec ns-switch stratum_bmv2 \
+        -chassis_config_file=${CHASSIS_CONFIG} \
+        -read_req_log_file=${READ_LOGS_FILE_PATH} \
+        -write_req_log_file=${WRITE_LOGS_FILE_PATH} \
+        -external_stratum_urls="0.0.0.0:"${SW_P4RT_GNMI_PORT}",0.0.0.0:"${SW_P4RT_GRPC_PORT} \
+        -local_stratum_url="0.0.0.0:"${SW_P4RT_LOCAL_PORT} \
+        -bmv2_log_level=${LOG_LEVEL}
+
+exit 0
diff --git a/src/tests/sns4sns24/02-ietf-l3vpn-nbi.json b/src/tests/sns4sns24/02-ietf-l3vpn-nbi.json
index 31d7e0a6d1636af4572b10dd07cecc9a2aedeb9d..0d34cfe9adab63afc37bf4c618a5a6fc25dadbc7 100644
--- a/src/tests/sns4sns24/02-ietf-l3vpn-nbi.json
+++ b/src/tests/sns4sns24/02-ietf-l3vpn-nbi.json
@@ -11,7 +11,7 @@
                     "site-network-accesses": {
                         "site-network-access": [
                             {
-                                "site-network-access-id": "int",
+                                "site-network-access-id": "eth1",
                                 "site-network-access-type": "ietf-l3vpn-svc:multipoint",
                                 "device-reference": "core-net",
                                 "vpn-attachment": {"vpn-id": "ietf-l3vpn-edge-core", "site-role": "ietf-l3vpn-svc:spoke-role"},
@@ -48,7 +48,7 @@
                     "site-network-accesses": {
                         "site-network-access": [
                             {
-                                "site-network-access-id": "int",
+                                "site-network-access-id": "eth1",
                                 "site-network-access-type": "ietf-l3vpn-svc:multipoint",
                                 "device-reference": "edge-net",
                                 "vpn-attachment": {"vpn-id": "ietf-l3vpn-edge-core", "site-role": "ietf-l3vpn-svc:hub-role"},
diff --git a/src/vnt_manager/service/VNTManagerService.py b/src/vnt_manager/service/VNTManagerService.py
index b95ad089a454e9d73e99d9f14cbe525a6c9ca8cb..3f44c4a510245fc2ab145e35b8ff1f35e4ac0f78 100644
--- a/src/vnt_manager/service/VNTManagerService.py
+++ b/src/vnt_manager/service/VNTManagerService.py
@@ -12,19 +12,15 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import logging
-
 from common.Constants import ServiceNameEnum
-from common.proto.vnt_manager_pb2_grpc import add_VNTManagerServiceServicer_to_server
 from common.Settings import get_service_port_grpc
+from common.proto.vnt_manager_pb2 import DESCRIPTOR as VNT_MANAGER_DESCRIPTOR
+from common.proto.vnt_manager_pb2_grpc import add_VNTManagerServiceServicer_to_server
 from common.tools.service.GenericGrpcService import GenericGrpcService
 from .VNTManagerServiceServicerImpl import VNTManagerServiceServicerImpl
 
-LOGGER = logging.getLogger(__name__)
-
-
 class VNTManagerService(GenericGrpcService):
-    def __init__(self, cls_name: str = __name__):
+    def __init__(self, cls_name: str = __name__) -> None:
         port = get_service_port_grpc(ServiceNameEnum.VNTMANAGER)
         super().__init__(port, cls_name=cls_name)
         self.vntmanager_servicer = VNTManagerServiceServicerImpl()
@@ -33,3 +29,5 @@ class VNTManagerService(GenericGrpcService):
         add_VNTManagerServiceServicer_to_server(
             self.vntmanager_servicer, self.server
         )
+
+        self.add_reflection_service_name(VNT_MANAGER_DESCRIPTOR, 'VNTManagerService')
diff --git a/src/webui/service/device/routes.py b/src/webui/service/device/routes.py
index f3896bdd8f80ddcbcc55f91707caa5e462801cab..16b86c769c5af1b69db4b669f5689043d03536bd 100644
--- a/src/webui/service/device/routes.py
+++ b/src/webui/service/device/routes.py
@@ -13,10 +13,14 @@
 # limitations under the License.
 
 import json
-from flask import current_app, render_template, Blueprint, flash, session, redirect, url_for
+from flask import (
+    current_app, render_template, Blueprint, flash, session, redirect, url_for
+)
 from common.DeviceTypes import DeviceTypeEnum
 from common.proto.context_pb2 import (
-    ConfigActionEnum, Device, DeviceDriverEnum, DeviceId, DeviceList, DeviceOperationalStatusEnum, Empty)
+    ConfigActionEnum, Device, DeviceDriverEnum, DeviceId, DeviceList,
+    DeviceOperationalStatusEnum, Empty
+)
 from common.tools.context_queries.Device import get_device
 from common.tools.context_queries.Topology import get_topology
 from context.client.ContextClient import ContextClient
diff --git a/src/webui/service/link/routes.py b/src/webui/service/link/routes.py
index dacf77534711c97237ca1afd54c3646fe9809a28..42f5984a3c0957a0740690ad6e37bed7438449b7 100644
--- a/src/webui/service/link/routes.py
+++ b/src/webui/service/link/routes.py
@@ -13,8 +13,10 @@
 # limitations under the License.
 
 
-from flask import current_app, render_template, Blueprint, flash, session, redirect, url_for
-from common.proto.context_pb2 import Empty, Link, LinkId, LinkList
+from flask import (
+    current_app, render_template, Blueprint, flash, session, redirect, url_for
+)
+from common.proto.context_pb2 import Empty, Link, LinkId, LinkList, LinkTypeEnum
 from common.tools.context_queries.EndPoint import get_endpoint_names
 from common.tools.context_queries.Link import get_link
 from common.tools.context_queries.Topology import get_topology
@@ -50,7 +52,10 @@ def home():
         device_names, endpoints_data = get_endpoint_names(context_client, endpoint_ids)
     context_client.close()
 
-    return render_template('link/home.html', links=links, device_names=device_names, endpoints_data=endpoints_data)
+    return render_template(
+        'link/home.html', links=links, device_names=device_names,
+        endpoints_data=endpoints_data, lte=LinkTypeEnum
+    )
 
 
 @link.route('detail/<path:link_uuid>', methods=('GET', 'POST'))
@@ -64,7 +69,10 @@ def detail(link_uuid: str):
     else:
         device_names, endpoints_data = get_endpoint_names(context_client, link_obj.link_endpoint_ids)
     context_client.close()
-    return render_template('link/detail.html',link=link_obj, device_names=device_names, endpoints_data=endpoints_data)
+    return render_template(
+        'link/detail.html', link=link_obj, device_names=device_names,
+        endpoints_data=endpoints_data, lte=LinkTypeEnum
+    )
 
 @link.get('<path:link_uuid>/delete')
 def delete(link_uuid):
diff --git a/src/webui/service/templates/link/detail.html b/src/webui/service/templates/link/detail.html
index 7c5f732e33a209b6acbd36b4982da90d7f148f38..775e5392d3dad06eaf13414cda2c9cde2586fe12 100644
--- a/src/webui/service/templates/link/detail.html
+++ b/src/webui/service/templates/link/detail.html
@@ -39,6 +39,7 @@
     <div class="col-sm-4">
         <b>UUID: </b>{{ link.link_id.link_uuid.uuid }}<br>
         <b>Name: </b>{{ link.name }}<br>
+        <b>Type: </b>{{ lte.Name(link.link_type).replace('LINKTYPE_', '') }}<br>
     </div>
     <div class="col-sm-8">
         <table class="table table-striped table-hover">
diff --git a/src/webui/service/templates/link/home.html b/src/webui/service/templates/link/home.html
index d96da78147d344533bf94fcc1adecbecf8fe8dd2..6632898793c8601bf30f8d824e9090e3a2f7552e 100644
--- a/src/webui/service/templates/link/home.html
+++ b/src/webui/service/templates/link/home.html
@@ -12,87 +12,89 @@
     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.
-   -->
-   
-   {% extends 'base.html' %}
-   
-   {% block content %}
-       <h1>Links</h1>
-   
-       <div class="row">
-           <div class="col">
-               <!-- <a href="#" class="btn btn-primary" style="margin-bottom: 10px;">
-                   <i class="bi bi-plus"></i>
-                   Add New Link
-               </a> -->
-           </div>
-           <div class="col">
-               {{ links | length }} links found in context <i>{{ session['context_uuid'] }}</i>
-           </div>
-           <!-- <div class="col">
-               <form>
-                   <div class="input-group">
-                       <input type="text" aria-label="Search" placeholder="Search..." class="form-control"/>
-                       <button type="submit" class="btn btn-primary">Search</button>
-                     </div>
-               </form>
-           </div> -->
-       </div>
-   
-       <table class="table table-striped table-hover">
-           <thead>
-             <tr>
-               <th scope="col">UUID</th>
-               <th scope="col">Name</th>
-               <th scope="col">Endpoints</th>
-               <th scope="col"></th>
-             </tr>
-           </thead>
-           <tbody>
-               {% if links %}
-                   {% for link in links %}
-                   <tr>
-                       <td>
+-->
+
+{% extends 'base.html' %}
+
+{% block content %}
+    <h1>Links</h1>
+
+    <div class="row">
+        <div class="col">
+            <!-- <a href="#" class="btn btn-primary" style="margin-bottom: 10px;">
+                <i class="bi bi-plus"></i>
+                Add New Link
+            </a> -->
+        </div>
+        <div class="col">
+            {{ links | length }} links found in context <i>{{ session['context_uuid'] }}</i>
+        </div>
+        <!-- <div class="col">
+            <form>
+                <div class="input-group">
+                    <input type="text" aria-label="Search" placeholder="Search..." class="form-control"/>
+                    <button type="submit" class="btn btn-primary">Search</button>
+                </div>
+            </form>
+        </div> -->
+    </div>
+
+    <table class="table table-striped table-hover">
+        <thead>
+            <tr>
+                <th scope="col">UUID</th>
+                <th scope="col">Name</th>
+                <th scope="col">Type</th>
+                <th scope="col">Endpoints</th>
+                <th scope="col"></th>
+            </tr>
+        </thead>
+        <tbody>
+            {% if links %}
+                {% for link in links %}
+                    <tr>
+                        <td>
                             {{ link.link_id.link_uuid.uuid }}
-                       </td>
-                       <td>
+                        </td>
+                        <td>
                             {{ link.name }}
                         </td>
-
-                       <td>
-                           <ul>
-                               {% for endpoint in link.link_endpoint_ids %}
-                               <li>
-                                   {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, (endpoint.endpoint_uuid.uuid, ''))[0] }} / 
-                                   Device: 
-                                   <a href="{{ url_for('device.detail', device_uuid=endpoint.device_id.device_uuid.uuid) }}">
-                                       {{ device_names.get(endpoint.device_id.device_uuid.uuid, endpoint.device_id.device_uuid.uuid) }}
-                                       <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
-                                           <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
-                                           <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
-                                       </svg>
-                                   </a>
-                               </li>
-                               {% endfor %}
-                           </ul>
-                       </td>
+                        <td>
+                            {{ lte.Name(link.link_type).replace('LINKTYPE_', '') }}
+                        </td>
+                        <td>
+                            <ul>
+                                {% for endpoint in link.link_endpoint_ids %}
+                                <li>
+                                    {{ endpoints_data.get(endpoint.endpoint_uuid.uuid, (endpoint.endpoint_uuid.uuid, ''))[0] }} / 
+                                    Device: 
+                                    <a href="{{ url_for('device.detail', device_uuid=endpoint.device_id.device_uuid.uuid) }}">
+                                        {{ device_names.get(endpoint.device_id.device_uuid.uuid, endpoint.device_id.device_uuid.uuid) }}
+                                        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
+                                            <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
+                                            <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
+                                        </svg>
+                                    </a>
+                                </li>
+                                {% endfor %}
+                            </ul>
+                        </td>
    
-                       <td> 
+                        <td> 
                             <a href="{{ url_for('link.detail', link_uuid=link.link_id.link_uuid.uuid) }}">
-                               <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
-                                   <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
-                                   <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
-                               </svg> 
-                           </a>
-                       </td>
-                   </tr>
-                   {% endfor %}
-               {% else %}
-                   <tr>
-                       <td colspan="7">No links found</td>
-                   </tr>
-               {% endif %}
-           </tbody>
-       </table>
-   
-   {% endblock %}
\ No newline at end of file
+                                <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-eye" viewBox="0 0 16 16">
+                                    <path d="M16 8s-3-5.5-8-5.5S0 8 0 8s3 5.5 8 5.5S16 8 16 8zM1.173 8a13.133 13.133 0 0 1 1.66-2.043C4.12 4.668 5.88 3.5 8 3.5c2.12 0 3.879 1.168 5.168 2.457A13.133 13.133 0 0 1 14.828 8c-.058.087-.122.183-.195.288-.335.48-.83 1.12-1.465 1.755C11.879 11.332 10.119 12.5 8 12.5c-2.12 0-3.879-1.168-5.168-2.457A13.134 13.134 0 0 1 1.172 8z"/>
+                                    <path d="M8 5.5a2.5 2.5 0 1 0 0 5 2.5 2.5 0 0 0 0-5zM4.5 8a3.5 3.5 0 1 1 7 0 3.5 3.5 0 0 1-7 0z"/>
+                                </svg> 
+                            </a>
+                        </td>
+                    </tr>
+                {% endfor %}
+            {% else %}
+                <tr>
+                    <td colspan="7">No links found</td>
+                </tr>
+            {% endif %}
+        </tbody>
+    </table>
+{% endblock %}