diff --git a/.dockerignore b/.dockerignore index 8785e66f39f611c40050abfe73986b1a83557a82..77971a384b3dcfa0102684a6a3a2ab04ee1ce7bd 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/.gitignore b/.gitignore index d5af4f7f61348537a2d01f9ee356f9cfb1e19c34..e2c91eed7fa3c98a79fe35e57515027503bf14a1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -146,6 +146,7 @@ venv.bak/ # VSCode project settings .vscode/ +.github/ # Visual Studio project settings /.vs @@ -177,6 +178,8 @@ cython_debug/ # Sqlite *.db +#temp files to test telemetry +src/telemetry/backend/tempFiles/ # TeraFlowSDN-generated files tfs_runtime_env_vars.sh tfs_runtime_env_vars*.sh diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index e11c8474ae5ec34838b346e4fc9fc87faea06edf..cc8c151c98fdf95095bf2760a0d4ba9d18ecc352 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -20,6 +20,12 @@ stages: - unit_test - end2end_test +workflow: + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)' + when: always + - when: never + # include the individual .gitlab-ci.yml of each micro-service and tests include: #- local: '/manifests/.gitlab-ci.yml' diff --git a/clean_testing_environment.sh b/clean_testing_environment.sh index 11eaadabdaceaa37488af8b2fc254e44bfca290f..88478b9611434e81bfbdebde7f1292c8b5fe4f3c 100755 --- a/clean_testing_environment.sh +++ b/clean_testing_environment.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/common_requirements.in b/common_requirements.in index ebd726e415c46a5b350576c25ba1d9bd0a443091..ebf4a428b0a6bde88108ec419f797788d729cb12 100644 --- a/common_requirements.in +++ b/common_requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/common_requirements_py313.in b/common_requirements_py313.in index de1a6ed2003e91172006751f6659842189751fc4..b076f766583d178f4c41e4baf8fce4f98e0c9975 100644 --- a/common_requirements_py313.in +++ b/common_requirements_py313.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/coverage/.coveragerc.template b/coverage/.coveragerc.template index 73bfc086455ed7ebbd330145d064fe00a216a220..81e42d3bdde471548d79cc7f763b9af8991b98bd 100644 --- a/coverage/.coveragerc.template +++ b/coverage/.coveragerc.template @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/data/.gitignore b/data/.gitignore index 9c0df0f2b712d06f4ca341252f692ee77cf80162..d62909f1b8e98ee94d2d1fbb2bd2fd0b65c91689 100644 --- a/data/.gitignore +++ b/data/.gitignore @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/data/.gitkeep b/data/.gitkeep index 7363515f07a52d996229bcbd72932ce1423258d7..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 100644 --- a/data/.gitkeep +++ b/data/.gitkeep @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/data/perf/old/MW/generate.sh b/data/perf/old/MW/generate.sh index 83e4dc363b2da008ac80da8a9302f5cba29a1e19..7945a6e6b653eb78b63bf439c93b4ff39ad35f4a 100755 --- a/data/perf/old/MW/generate.sh +++ b/data/perf/old/MW/generate.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/data/perf/old/MW/generate_plot.py b/data/perf/old/MW/generate_plot.py index 3d09e9ceeaee8769d8c313d7e831da1e1f7dd318..2efda4c32d06753e9dc4e2413419f3a9837542d4 100644 --- a/data/perf/old/MW/generate_plot.py +++ b/data/perf/old/MW/generate_plot.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/data/perf/old/OpenConfig/generate.sh b/data/perf/old/OpenConfig/generate.sh index 3993975fa537ac9209fb417dc086f2d5b9610fdc..e7219da741682d7f8b76d9153395855ee31d7494 100755 --- a/data/perf/old/OpenConfig/generate.sh +++ b/data/perf/old/OpenConfig/generate.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/data/perf/old/OpenConfig/generate_plot.py b/data/perf/old/OpenConfig/generate_plot.py index 9d22298d673c90672cf0754f1c61f7170b6fea93..fba5c1d5f3c6f013025b05e227d1e6ab552cbe13 100644 --- a/data/perf/old/OpenConfig/generate_plot.py +++ b/data/perf/old/OpenConfig/generate_plot.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/data/perf/old/TE/te-cdf.py b/data/perf/old/TE/te-cdf.py index 336509b13298c9ea2cd29435eeda0ab74faf2a90..b172b77945c1ac23dc60afa856377e1e17b6fda3 100644 --- a/data/perf/old/TE/te-cdf.py +++ b/data/perf/old/TE/te-cdf.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/data/perf/old/XR/generate.sh b/data/perf/old/XR/generate.sh index effe9892dc111d85bb91f0bb2339e96f112bf27e..31714a78b0f784a36e6667eb4680b3fad650f52a 100755 --- a/data/perf/old/XR/generate.sh +++ b/data/perf/old/XR/generate.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/data/perf/old/XR/generate_plot.py b/data/perf/old/XR/generate_plot.py index 879c5bf8da7a3192b58952bafeec9a4e273884fc..d6854076911037cb96f4929b50733daf53d84181 100644 --- a/data/perf/old/XR/generate_plot.py +++ b/data/perf/old/XR/generate_plot.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/data/perf/old/emulated/generate.sh b/data/perf/old/emulated/generate.sh index 0cba875d3eb2e2625cc3ac00b8c482680e122bd1..1567120bc55a78e3e2ef08ad07482e37d677caf3 100755 --- a/data/perf/old/emulated/generate.sh +++ b/data/perf/old/emulated/generate.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/data/perf/old/emulated/generate_plot.py b/data/perf/old/emulated/generate_plot.py index 90a8a8bc0ad33ed2f549e2065f38aaee871b362e..35114bdf9642b2c06478a5efdb4827f0760a492a 100644 --- a/data/perf/old/emulated/generate_plot.py +++ b/data/perf/old/emulated/generate_plot.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/deploy/all.sh b/deploy/all.sh index cd33ff51600183ec4d282f2a48f82cb968a6e58a..0f71d6ded4da97ebafac18554138a0cb34189bbc 100755 --- a/deploy/all.sh +++ b/deploy/all.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/deploy/build-only.sh b/deploy/build-only.sh index 5db9e6e5d7fe1918bbdd8dae618ba4611e4470f5..0790ff1781134826cda35b1e5f38c569ed52e0b8 100755 --- a/deploy/build-only.sh +++ b/deploy/build-only.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/deploy/component.sh b/deploy/component.sh index 9e7c6ff5c4f0a8d507d423a436dd4fd3a45374be..ab347a9e141e73499c5ae8fe9c6726fb68431f1f 100755 --- a/deploy/component.sh +++ b/deploy/component.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/deploy/crdb.sh b/deploy/crdb.sh index 4d646194015f5c4ad1deea39ddcaa0a3a97b7f24..1bade068be7090ee02e955d9377327c833c033e4 100755 --- a/deploy/crdb.sh +++ b/deploy/crdb.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/deploy/expose_dashboard.sh b/deploy/expose_dashboard.sh index 3d8ffae43d0a707d935f11fe4e50233915202222..5d8757bda30afb81af5519a25f00361108dcf7b8 100755 --- a/deploy/expose_dashboard.sh +++ b/deploy/expose_dashboard.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/deploy/kafka.sh b/deploy/kafka.sh index a971c15d5401d8928f35d6c33e57d59d7d636e95..2a4808c885e3dea88fdc5887db2efb1cd3187286 100755 --- a/deploy/kafka.sh +++ b/deploy/kafka.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -61,7 +61,8 @@ function kfk_deploy_single() { else echo ">>> Deploy Kafka" cp "${KFK_MANIFESTS_PATH}/single-node.yaml" "${TMP_MANIFESTS_FOLDER}/kfk_single_node.yaml" - #sed -i "s//${KFK_NAMESPACE}/" "${TMP_MANIFESTS_FOLDER}/kfk_single_node.yaml" + # Set the correct advertised listeners based on the namespace + sed -i "s|kafka-service\.kafka\.svc\.cluster\.local|kafka-service.${KFK_NAMESPACE}.svc.cluster.local|g" "${TMP_MANIFESTS_FOLDER}/kfk_single_node.yaml" kubectl --namespace ${KFK_NAMESPACE} apply -f "${TMP_MANIFESTS_FOLDER}/kfk_single_node.yaml" echo ">>> Waiting Kafka statefulset to be created..." diff --git a/deploy/mock_blockchain.sh b/deploy/mock_blockchain.sh index 14773f2b2f0871307d64d543282c0ccf71e18ba5..53c16fb4c9d2a1f6580a2deafcb0bb9dd5422710 100755 --- a/deploy/mock_blockchain.sh +++ b/deploy/mock_blockchain.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/deploy/monitoring.sh b/deploy/monitoring.sh index a577c432fc2daf82cc834a748e7dbdf78b053810..bb006f2da2292543e4c37d0d2eece1a00e8adc0e 100755 --- a/deploy/monitoring.sh +++ b/deploy/monitoring.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/deploy/nats.sh b/deploy/nats.sh index 1915e732e1423410711e8a5c8a3c585b55580845..34b9d8907b313c97662ed7dd9d2b8643e18faa7b 100755 --- a/deploy/nats.sh +++ b/deploy/nats.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/deploy/qdb.sh b/deploy/qdb.sh index 17cec31036ff9156576737d477b05a57ba3e5815..e1275d8709cd518103653fd3eb05d6aaf8a3595b 100755 --- a/deploy/qdb.sh +++ b/deploy/qdb.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/deploy/show.sh b/deploy/show.sh index 0bb3c692677133ab17ea88eab408d3cd99bb5540..d491c30147a1ea3604d32aa1a66cf3b811483a30 100755 --- a/deploy/show.sh +++ b/deploy/show.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/deploy/tfs.sh b/deploy/tfs.sh index cd27f903c4c0c938ae374e18f77cdae14e665641..39ee95bedc4cffbd7abca77a182caabd6c75905d 100755 --- a/deploy/tfs.sh +++ b/deploy/tfs.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -133,7 +133,7 @@ kubectl create secret generic crdb-data --namespace ${TFS_K8S_NAMESPACE} --type= printf "\n" echo ">>> Create Secret with Apache Kafka..." -KFK_SERVER_PORT=$(kubectl --namespace ${KFK_NAMESPACE} get service kafka-public -o 'jsonpath={.spec.ports[0].port}') +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} \ --from-literal=KFK_SERVER_PORT=${KFK_SERVER_PORT} diff --git a/hackfest/commands.txt b/hackfest/commands.txt index 840b83a245f6adf823b8ec097b16437c7d052826..624339f091244c31d3560fcf1a921b6b975e4f1d 100644 --- a/hackfest/commands.txt +++ b/hackfest/commands.txt @@ -350,7 +350,7 @@ $ docker exec -it clab-srlinux-srl1 sr_cli $ sudo containerlab destroy --topo srlinux.clab.yml ## Install gNMIc -$ sudo bash -c "$(curl -sL https://get-gnmic.kmrd.dev)" +$ sudo bash -c "$(curl -sL https://get-gnmic.openconfig.net)" ## gNMI Capabilities request $ gnmic -a clab-srlinux-srl1 -u admin -p NokiaSrl1! --skip-verify capabilities diff --git a/hackfest/containerlab/.gitignore b/hackfest/containerlab/.gitignore index 01c328ee1cf6867738be5d0e16032d5478eea0f1..ca0f847bf0f8a0c9b47cf61848aa02ccf51ab515 100644 --- a/hackfest/containerlab/.gitignore +++ b/hackfest/containerlab/.gitignore @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/containerlab/commands.txt b/hackfest/containerlab/commands.txt index ac91d4b08b913209151e4024eb04b31384ed641a..884914560c73fc1cb134e1e931eef2de8a34470e 100644 --- a/hackfest/containerlab/commands.txt +++ b/hackfest/containerlab/commands.txt @@ -9,7 +9,7 @@ https://github.com/openconfig/kne/blob/v0.1.9/examples/nokia/srlinux-services/sr https://containerlab.dev/manual/kinds/srl/#default-node-configuration https://learn.srlinux.dev/tutorials/infrastructure/kne/srl-with-oc-services/ https://github.com/openconfig/reference/blob/master/rpc/gnmi/gnmi-specification.md -https://gnmic.kmrd.dev/cmd/get/ +https://gnmic.openconfig.net/#get-request IMPORTANT: for Nokia SR Linux, use kind "srl" and type "ixr6" @@ -57,7 +57,7 @@ docker exec -it clab-tfs-scenario-client2 bash ## Install gNMIc -$ sudo bash -c "$(curl -sL https://get-gnmic.kmrd.dev)" +$ sudo bash -c "$(curl -sL https://get-gnmic.openconfig.net)" ## gNMI Capabilities request $ gnmic -a clab-tfs-scenario-srl1 -u admin -p NokiaSrl1! --skip-verify capabilities diff --git a/hackfest/containerlab/tfs-descriptors/.gitkeep b/hackfest/containerlab/tfs-descriptors/.gitkeep index 7363515f07a52d996229bcbd72932ce1423258d7..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 100644 --- a/hackfest/containerlab/tfs-descriptors/.gitkeep +++ b/hackfest/containerlab/tfs-descriptors/.gitkeep @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/containerlab/tfs-scenario.clab.yml b/hackfest/containerlab/tfs-scenario.clab.yml index a86b174f11280e0b15ebbbf803303f286f1f7896..aacb00d05855c843b5265bf5e964fa0344721f12 100644 --- a/hackfest/containerlab/tfs-scenario.clab.yml +++ b/hackfest/containerlab/tfs-scenario.clab.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/gnmi/.gitkeep b/hackfest/gnmi/.gitkeep index 7363515f07a52d996229bcbd72932ce1423258d7..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 100644 --- a/hackfest/gnmi/.gitkeep +++ b/hackfest/gnmi/.gitkeep @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/gnmi/srlinux.clab.yml b/hackfest/gnmi/srlinux.clab.yml index deaea03a4578d6ddc535645d28b21cb29cea95af..0f80e5bf4c762851a027f4fa6fd34a4e10e1e821 100644 --- a/hackfest/gnmi/srlinux.clab.yml +++ b/hackfest/gnmi/srlinux.clab.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/grpc/connection.proto b/hackfest/grpc/connection.proto index d2dd3458b35c6a8c9631c7537650191dac8dbda3..63f3ed8bcef8ee758dc8091f8a1e7da972714d19 100644 --- a/hackfest/grpc/connection.proto +++ b/hackfest/grpc/connection.proto @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/hackfest/grpc/connection/create.py b/hackfest/grpc/connection/create.py index 3bcad8ffd811c752183a031be5ffb6e138a8f937..bc84971a442310d01ac5709ae03658415b2ef891 100644 --- a/hackfest/grpc/connection/create.py +++ b/hackfest/grpc/connection/create.py @@ -1,5 +1,5 @@ #! /usr/bin/env python3 -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/grpc/connection/list.py b/hackfest/grpc/connection/list.py index f90011ad109b0bdc764de0f38021bb3d24b4035c..5210f47fb485e1741ca9709e4855c17d0e55e207 100644 --- a/hackfest/grpc/connection/list.py +++ b/hackfest/grpc/connection/list.py @@ -1,5 +1,5 @@ #! /usr/bin/env python3 -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/grpc/connectionService.proto b/hackfest/grpc/connectionService.proto index 44dc5d07a3c3c6e7bc0bbf34e7d18ae950955a66..ae92f582dd30542202c79bdd6f2420d11b5e75e9 100644 --- a/hackfest/grpc/connectionService.proto +++ b/hackfest/grpc/connectionService.proto @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/hackfest/grpc/connectionService/connectionService_client.py b/hackfest/grpc/connectionService/connectionService_client.py index 032e885aa44513f34a704dc9c9800005ce6c32d6..610e7ae7d853501745437eb066b9d92348b12564 100644 --- a/hackfest/grpc/connectionService/connectionService_client.py +++ b/hackfest/grpc/connectionService/connectionService_client.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/grpc/connectionService/connectionService_server.py b/hackfest/grpc/connectionService/connectionService_server.py index 2e945eb76f850f89ff74ae314581d9ed672b3c7c..af1e762c212d38eff27935d804ef9352879ebe75 100644 --- a/hackfest/grpc/connectionService/connectionService_server.py +++ b/hackfest/grpc/connectionService/connectionService_server.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/grpc/connectionServiceWithNotif.proto b/hackfest/grpc/connectionServiceWithNotif.proto index 42aa7ccb4de5499a1dfb0121164c336a7c64be35..6fdab5fda51f8ca332048dc7352f2d86d45b02b7 100644 --- a/hackfest/grpc/connectionServiceWithNotif.proto +++ b/hackfest/grpc/connectionServiceWithNotif.proto @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_client.py b/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_client.py index 58c8a7905b4ef03e40cf1bd969059896cc3a2bc9..9f29de9e28b8405bc2523d31c38666e15a15d1cf 100644 --- a/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_client.py +++ b/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_client.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_server.py b/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_server.py index 5975dddaae1a94815a42aa14b2cf8d51c30aa063..9a37510700f272830d3c6fb334dfb0b26fc856cb 100644 --- a/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_server.py +++ b/hackfest/grpc/connectionServiceWithNotif/connectionServiceWithNotif_server.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/grpc/topologyService.proto b/hackfest/grpc/topologyService.proto index 43acfa2d43a28f186672f24a1fefb2a172d85cc3..661ca0fa29c09e585aebb41d38478ffbfd943a07 100644 --- a/hackfest/grpc/topologyService.proto +++ b/hackfest/grpc/topologyService.proto @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/hackfest/grpc/topologyService/topologyService_client.py b/hackfest/grpc/topologyService/topologyService_client.py index 321a663693c62137dd217cc398dc6a328b3831e7..8624599a0f978cdbbb0d620792bcfdf96ffa5f9a 100644 --- a/hackfest/grpc/topologyService/topologyService_client.py +++ b/hackfest/grpc/topologyService/topologyService_client.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/grpc/topologyService/topologyService_server.py b/hackfest/grpc/topologyService/topologyService_server.py index d080441f0f8200dfe55ec6c01dc20dcfa2a61f1e..3232a38130a8fbd22daa43819814c0b0c17a0d4d 100644 --- a/hackfest/grpc/topologyService/topologyService_server.py +++ b/hackfest/grpc/topologyService/topologyService_server.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/kafka/pub.py b/hackfest/kafka/pub.py index b54ae971e3b4899d949b942ee37886e77e23da07..07cf4213bb77e17ac28005de699b656cd8ffcd6f 100644 --- a/hackfest/kafka/pub.py +++ b/hackfest/kafka/pub.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/kafka/sub.py b/hackfest/kafka/sub.py index fe22e4e9601644e3627bdb8264f72f59a96eeda1..200e26fcc8cd3b75c3cf96b7222ea284bd6e3f11 100644 --- a/hackfest/kafka/sub.py +++ b/hackfest/kafka/sub.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/mock_osm/MockOSM.py b/hackfest/mock_osm/MockOSM.py index 2361b44b6ba5872f5490f3e030c8349b7c7f16ed..be206ff7802293cdd4d14923c84949a6f09339b4 100644 --- a/hackfest/mock_osm/MockOSM.py +++ b/hackfest/mock_osm/MockOSM.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/mock_osm/WimconnectorIETFL2VPN.py b/hackfest/mock_osm/WimconnectorIETFL2VPN.py index aa4ca045f41ffdc69d2ebf2fcd9b5db99ce45dbe..c3f35a2a5f7a8d09961e0430104f06bc857a7dc5 100644 --- a/hackfest/mock_osm/WimconnectorIETFL2VPN.py +++ b/hackfest/mock_osm/WimconnectorIETFL2VPN.py @@ -167,7 +167,7 @@ class WimconnectorIETFL2VPN(SdnConnectorBase): """ SETTINGS = { # min_endpoints, max_endpoints, vpn_service_type 'ELINE': (2, 2, 'vpws'), # Virtual Private Wire Service - 'ELAN' : (2, None, 'vpls'), # Virtual Private LAN Service + 'ELAN' : (2, None, 'bgp-vpls'), # Virtual Private LAN Service } settings = SETTINGS.get(service_type) if settings is None: raise NotImplementedError('Unsupported service_type({:s})'.format(str(service_type))) @@ -291,12 +291,12 @@ class WimconnectorIETFL2VPN(SdnConnectorBase): if access_priority is not None: availability = {} availability["access-priority"] = access_priority - availability["single-active"] = [None] + availability["single-active"] = None site_network_access["availability"] = availability constraint = {} constraint['constraint-type'] = 'end-to-end-diverse' - constraint['target'] = {'all-other-accesses': [None]} + constraint['target'] = {'all-other-accesses': None} access_diversity = {} access_diversity['constraints'] = {'constraint': []} diff --git a/hackfest/mock_osm/__init__.py b/hackfest/mock_osm/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/hackfest/mock_osm/__init__.py +++ b/hackfest/mock_osm/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/mock_osm/__main__.py b/hackfest/mock_osm/__main__.py index 8d4d101118aeb81bcb0d3882affce354b644102d..50c4a875af4d1b19c8d80a578abd275602ea09cb 100644 --- a/hackfest/mock_osm/__main__.py +++ b/hackfest/mock_osm/__main__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -15,6 +15,7 @@ import cmd, logging from .MockOSM import MockOSM +logging.basicConfig(level=logging.DEBUG) LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/hackfest/netconf-oc/device_definition.py b/hackfest/netconf-oc/device_definition.py index b2084601d7602476a9bd53aa420c661cbef82010..ccd4fe5525609cf11b9affcba7b5a6fcfdaaa913 100644 --- a/hackfest/netconf-oc/device_definition.py +++ b/hackfest/netconf-oc/device_definition.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/hackfest/netconf-oc/interfaces.xml b/hackfest/netconf-oc/interfaces.xml index a7c6b6be3debd2b6f42f5968923cdcbb7ceffc23..480d54c6c60534daed99b0bd7b0d006cfd26f2fc 100644 --- a/hackfest/netconf-oc/interfaces.xml +++ b/hackfest/netconf-oc/interfaces.xml @@ -1,6 +1,6 @@ Input KPIs {self.input_kpis}") + logger.info(f"|--> Output KPIs {self.output_kpis}") + logger.info(f"|--> Thresholds {self.thresholds}") try: - future = self.client.submit(select_handler(self.thresholds["task_type"]), "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)) + handler_fn = select_handler(handler_name) + future = self.client.submit( + handler_fn, + self.key, + self.batch, + self.input_kpis, + self.output_kpis, + self.thresholds + ) + logger.info(f"|--> Handler result {future.result()}") + 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}") @@ -132,6 +158,10 @@ class DaskStreamer(threading.Thread): logger.warning("Nothing to produce. Skipping.") return for record in result: + # Filter out records not related with the output KPI of interest + if record["kpi_id"] not in self.output_kpis: + continue + logger.info(f"Kafka Alarm - Record: {record}") try: self.producer.produce( destination_topic, diff --git a/src/analytics/backend/service/__init__.py b/src/analytics/backend/service/__init__.py index 7363515f07a52d996229bcbd72932ce1423258d7..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 100644 --- a/src/analytics/backend/service/__init__.py +++ b/src/analytics/backend/service/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/backend/service/__main__.py b/src/analytics/backend/service/__main__.py index 3c1878a5cfd2beaa5e954392c630788f344c5c08..fa8cbe8f0f3e89d538af9da5c7deefa8ffe9b24a 100644 --- a/src/analytics/backend/service/__main__.py +++ b/src/analytics/backend/service/__main__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/backend/tests/__init__.py b/src/analytics/backend/tests/__init__.py index 7363515f07a52d996229bcbd72932ce1423258d7..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 100644 --- a/src/analytics/backend/tests/__init__.py +++ b/src/analytics/backend/tests/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/backend/tests/messages.py b/src/analytics/backend/tests/messages.py index 34f3e7dc91afd854da1fab826ebb3e5357a4de42..734f0eb20d9e9ceada2be08b535c289e0aeb8774 100644 --- a/src/analytics/backend/tests/messages.py +++ b/src/analytics/backend/tests/messages.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/backend/tests/messages_analyzer.py b/src/analytics/backend/tests/messages_analyzer.py index bed594300be8f3f97047bb6d685ae7afa3f1dfec..f5c0c0cfd49cc4ce21813da3ec44002b0aa4cb4d 100644 --- a/src/analytics/backend/tests/messages_analyzer.py +++ b/src/analytics/backend/tests/messages_analyzer.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -15,6 +15,25 @@ import pandas as pd from analytics.backend.service.AnalyzerHandlers import Handlers +def create_analysis_request_message_for_mgon_agent(): + return { + "request_id": "test_request_mgon_001", + "oper_mode": "test_mode", + "input_kpi_list": ["6e22f180-ba28-4641-b190-2287bf448888"], + "output_kpi_list": ["6e22f180-ba28-4641-b190-2287bf181818"], + "task_type": Handlers.AGGREGATION_HANDLER.value, + "task_parameter": { + "avg": [-5, -20], + }, + "duration": 90, + "batch_duration": 20, + "window_size": None, + "batch_size": 5, + "interval": 5, + } + + + def get_input_kpi_list(): return ["1e22f180-ba28-4641-b190-2287bf446666", "6e22f180-ba28-4641-b190-2287bf448888", 'kpi_3'] diff --git a/src/analytics/backend/tests/test_backend.py b/src/analytics/backend/tests/test_backend.py index a44351c035881aa072e477e49a6370234689c0c1..b3ea4a627e26973afa30a4248568f3269ddebc16 100644 --- a/src/analytics/backend/tests/test_backend.py +++ b/src/analytics/backend/tests/test_backend.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -import time import json import pytest import logging @@ -22,7 +21,6 @@ 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 @@ -193,7 +191,8 @@ 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: + patch.object(dask_streamer.producer, 'produce') as mock_produce: + dask_streamer.output_kpis = ['kpi1'] dask_streamer.produce_result(result, "test_topic") mock_produce.assert_called_once_with( "test_topic", @@ -221,6 +220,8 @@ def test_run_with_valid_consumer(dask_streamer): with patch.object(dask_streamer.consumer, 'poll') as mock_poll, \ patch.object(dask_streamer, 'task_handler_selector') as mock_task_handler_selector: + dask_streamer.input_kpis = ['kpi1', 'kpi2'] + # Simulate valid messages without errors mock_message_1 = MagicMock() mock_message_1.value.return_value = b'{"kpi_id": "kpi1", "value": 100}' @@ -261,7 +262,7 @@ def test_aggregation_handler(): # Test aggregation_handler aggregated_df = aggregation_handler( - "test_batch", "test_key", batch, input_kpi_list, output_kpi_list, thresholds + "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) @@ -276,7 +277,7 @@ def test_threshold_handler(): result = threshold_handler("test_key", agg_df, thresholds["task_parameter"][0]) assert isinstance(result, pd.DataFrame) - assert result.shape == (1, 7) + assert result.shape == (1, 5) ########################### diff --git a/src/analytics/database/AnalyzerModel.py b/src/analytics/database/AnalyzerModel.py index c5f4d41e93a74466fe1ac88b2964004762891755..611b37fd7a4c7ea7fe9878404a1a2e29de4860c2 100644 --- a/src/analytics/database/AnalyzerModel.py +++ b/src/analytics/database/AnalyzerModel.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/database/Analyzer_DB.py b/src/analytics/database/Analyzer_DB.py index a92e32ac3b3f8a0cc7f43c5826bf90581de636e0..bee136dd86aaf55be08dbaf5d85749a628dd530b 100644 --- a/src/analytics/database/Analyzer_DB.py +++ b/src/analytics/database/Analyzer_DB.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/database/__init__.py b/src/analytics/database/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/analytics/database/__init__.py +++ b/src/analytics/database/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/frontend/Dockerfile b/src/analytics/frontend/Dockerfile index 50edd0aae4dd1d442bcc76eb6dc94ecb1260bd7d..b9069280a9ffdfd030459f0e372277f8e441cee4 100644 --- a/src/analytics/frontend/Dockerfile +++ b/src/analytics/frontend/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/frontend/__init__.py b/src/analytics/frontend/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/analytics/frontend/__init__.py +++ b/src/analytics/frontend/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/frontend/client/AnalyticsFrontendClient.py b/src/analytics/frontend/client/AnalyticsFrontendClient.py index 2bfe37ba43730b7fe333fcc0c59012c8ce3ab4a7..fd501f6ea87ffed397695b866d6350f3af6875bd 100644 --- a/src/analytics/frontend/client/AnalyticsFrontendClient.py +++ b/src/analytics/frontend/client/AnalyticsFrontendClient.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/frontend/client/__init__.py b/src/analytics/frontend/client/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/analytics/frontend/client/__init__.py +++ b/src/analytics/frontend/client/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/frontend/requirements.in b/src/analytics/frontend/requirements.in index d9abdea530ba791a507b6e3ed93cae438c9fd5a8..229fafdebbac444b0d1eb8c9ebec30eee641f7fa 100644 --- a/src/analytics/frontend/requirements.in +++ b/src/analytics/frontend/requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/frontend/service/AnalyticsFrontendService.py b/src/analytics/frontend/service/AnalyticsFrontendService.py index 2d5d63fb9a340f841786d6531e15adc024565934..f5d5ee3125756121d562affdd42c06aa63933e29 100644 --- a/src/analytics/frontend/service/AnalyticsFrontendService.py +++ b/src/analytics/frontend/service/AnalyticsFrontendService.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/frontend/service/AnalyticsFrontendServiceServicerImpl.py b/src/analytics/frontend/service/AnalyticsFrontendServiceServicerImpl.py index 4f8a30f94bf1b2f3ecd5f4a593ba1a513d14c862..4a72914129fae50b14aec8779ab10fadfeb069ef 100644 --- a/src/analytics/frontend/service/AnalyticsFrontendServiceServicerImpl.py +++ b/src/analytics/frontend/service/AnalyticsFrontendServiceServicerImpl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/frontend/service/__init__.py b/src/analytics/frontend/service/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/analytics/frontend/service/__init__.py +++ b/src/analytics/frontend/service/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/frontend/service/__main__.py b/src/analytics/frontend/service/__main__.py index beaecbae64d4524db729950214e3ebefaf6d53c0..8231c7a35b8cdfc46930fca8e5e9c65c99361741 100644 --- a/src/analytics/frontend/service/__main__.py +++ b/src/analytics/frontend/service/__main__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/frontend/tests/__init__.py b/src/analytics/frontend/tests/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/analytics/frontend/tests/__init__.py +++ b/src/analytics/frontend/tests/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/frontend/tests/messages.py b/src/analytics/frontend/tests/messages.py index 4dc5b96b86f50ffd99bca40a4174f38b54f50832..280d844fe4a5325223123bc25fddb829a7308445 100644 --- a/src/analytics/frontend/tests/messages.py +++ b/src/analytics/frontend/tests/messages.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -18,6 +18,8 @@ from common.proto.kpi_manager_pb2 import KpiId from common.proto.analytics_frontend_pb2 import ( AnalyzerOperationMode, AnalyzerId, Analyzer, AnalyzerFilter ) +# function to create analyzer based on + def create_analyzer_id(): _create_analyzer_id = AnalyzerId() _create_analyzer_id.analyzer_id.uuid = str(uuid.uuid4()) @@ -119,6 +121,58 @@ def create_analyzer_filter(): return _create_analyzer_filter +def create_analyzer_for_mgon_agent(): + """ + Create analyzer for MGON agent test with aggregation handler. + Returns: + Analyzer: Configured analyzer for MGON agent testing + """ + _create_analyzer = Analyzer() + + # Set analyzer ID + _create_analyzer.analyzer_id.analyzer_id.uuid = str(uuid.uuid4()) + + # Set algorithm name and operation mode + _create_analyzer.algorithm_name = "Test_MGON_Aggregation" + _create_analyzer.operation_mode = AnalyzerOperationMode.ANALYZEROPERATIONMODE_STREAMING + + # Input KPI ID + _input_kpi_id = KpiId() + _input_kpi_id.kpi_id.uuid = "6e22f180-ba28-4641-b190-2287bf448888" + _create_analyzer.input_kpi_ids.append(_input_kpi_id) + + # Output KPI ID + _output_kpi_id = KpiId() + _output_kpi_id.kpi_id.uuid = "6e22f180-ba28-4641-b190-2287bf181818" + _create_analyzer.output_kpi_ids.append(_output_kpi_id) + + # Task parameters - aggregation with average threshold + _threshold_dict = { + "task_type": Handlers.AGGREGATION_HANDLER.value, + "task_parameter": { + "avg": [-5, -10], + }, + } + + _create_analyzer.parameters['thresholds'] = json.dumps(_threshold_dict) + _create_analyzer.parameters['window_size'] = "0" # No sliding window + _create_analyzer.parameters['window_slider'] = "0" + _create_analyzer.parameters['store_aggregate'] = str(False) + _create_analyzer.parameters['interval'] = "5" # Interval for batch processing + + # Duration of the analyzer + _create_analyzer.duration_s = 900 + + # Batch duration settings + _create_analyzer.batch_min_duration_s = 20 + _create_analyzer.batch_max_duration_s = 20 + + # Batch size settings + _create_analyzer.batch_min_size = 5 + _create_analyzer.batch_max_size = 5 + + return _create_analyzer + # Added for testing to remove the dependency on the backend service from enum import Enum diff --git a/src/analytics/frontend/tests/test_frontend.py b/src/analytics/frontend/tests/test_frontend.py index b49062a8144a72aa3e7d4e59cb324b0bc4bae9f0..efae900ba036140a329ebadeefd93580a09ed589 100644 --- a/src/analytics/frontend/tests/test_frontend.py +++ b/src/analytics/frontend/tests/test_frontend.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -28,7 +28,7 @@ from common.tools.kafka.Variables import KafkaTopic from common.proto.analytics_frontend_pb2 import AnalyzerId, AnalyzerList from analytics.frontend.client.AnalyticsFrontendClient import AnalyticsFrontendClient from analytics.frontend.service.AnalyticsFrontendService import AnalyticsFrontendService -from analytics.frontend.tests.messages import ( create_analyzer_id, create_analyzer, +from analytics.frontend.tests.messages import ( create_analyzer_for_mgon_agent, create_analyzer_id, create_analyzer, create_analyzer_filter ) from analytics.frontend.service.AnalyticsFrontendServiceServicerImpl import AnalyticsFrontendServiceServicerImpl from apscheduler.schedulers.background import BackgroundScheduler @@ -38,15 +38,13 @@ from apscheduler.triggers.interval import IntervalTrigger ########################### # Tests Setup ########################### - +LOGGER = logging.getLogger(__name__) LOCAL_HOST = '127.0.0.1' ANALYTICS_FRONTEND_PORT = 10000 + int(get_service_port_grpc(ServiceNameEnum.ANALYTICS)) os.environ[get_env_var_name(ServiceNameEnum.ANALYTICS, ENVVAR_SUFIX_SERVICE_HOST )] = str(LOCAL_HOST) os.environ[get_env_var_name(ServiceNameEnum.ANALYTICS, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(ANALYTICS_FRONTEND_PORT) -LOGGER = logging.getLogger(__name__) - @pytest.fixture(scope='session') def analyticsFrontend_service(): LOGGER.info('Initializing AnalyticsFrontendService...') @@ -93,10 +91,10 @@ def log_all_methods(request): ########################### # --- "test_validate_kafka_topics" should be executed 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_validate_kafka_topics(): +# LOGGER.debug(" >>> test_validate_kafka_topics: START <<< ") +# response = KafkaTopic.create_all_topics() +# assert isinstance(response, bool) # To test start and stop listener together def test_StartAnalyzers(analyticsFrontend_client): @@ -133,3 +131,15 @@ def test_StartAnalyzers(analyticsFrontend_client): # for response in class_obj.StartResponseListener(analyzer_id.analyzer_id.uuid): # LOGGER.debug(response) # assert isinstance(response, tuple) + +# Additional tests can be added below following the same structure +# --- MGON Agent Tests --- +def test_StartAnalyzer_MGON_Agent(analyticsFrontend_client): + added_analyzer_id = analyticsFrontend_client.StartAnalyzer(create_analyzer_for_mgon_agent()) + LOGGER.debug(str(added_analyzer_id)) + LOGGER.info("waiting for timer to complete 3000 seconds ...") + time.sleep(60) + LOGGER.info('--> StopAnalyzer after timer completion') + response = analyticsFrontend_client.StopAnalyzer(added_analyzer_id) + LOGGER.debug(str(response)) +# --- End of MGON Agent Tests --- diff --git a/src/analytics/requirements.in b/src/analytics/requirements.in index 4686f2815e483233cd2072b213a6e8b20bc2b807..75d9e13a151f054ec002aec56a21e65fb6998546 100644 --- a/src/analytics/requirements.in +++ b/src/analytics/requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/tests/__init__.py b/src/analytics/tests/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/analytics/tests/__init__.py +++ b/src/analytics/tests/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/analytics/tests/test_analytics_db.py b/src/analytics/tests/test_analytics_db.py index b17fab7f517ff5d42dfb4d20a43c377f3d0c3c67..9262435b6a3e2e68ad521370cf7f6d055c7e753a 100644 --- a/src/analytics/tests/test_analytics_db.py +++ b/src/analytics/tests/test_analytics_db.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/.gitlab-ci.yml b/src/automation/.gitlab-ci.yml index 568292717b8d01df2ccb3b5d080b0962b64bc90f..bef688e1abc9e714a3d4c54eb46fb65e485b4abb 100644 --- a/src/automation/.gitlab-ci.yml +++ b/src/automation/.gitlab-ci.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/Config.py b/src/automation/Config.py index 8b378bc6118d7fa3e50475b0e3286fc618dea53a..20f367160d269e451b7f83787efc91bbaeb71902 100644 --- a/src/automation/Config.py +++ b/src/automation/Config.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/Dockerfile b/src/automation/Dockerfile index 03264745d00d14f05975597f0d4ecf6f93711e61..1c94444eb377aba70bbe129e53a0e3476152e9aa 100644 --- a/src/automation/Dockerfile +++ b/src/automation/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/README.md b/src/automation/README.md new file mode 100644 index 0000000000000000000000000000000000000000..b946732e1815581d2430be1e86f5bd84014255c3 --- /dev/null +++ b/src/automation/README.md @@ -0,0 +1,116 @@ +# ETSI TFS Automation Service + +The Automation service exposes a gPRC API with the following methods: +- ZSMCreate +- ZSMDelete +- ZSMGetById +- ZSMGetByService + +To Invoke this API follow the steps below: + +## Install grpcurl + +```bash +curl -sSL "https://github.com/fullstorydev/grpcurl/releases/download/v1.8.7/grpcurl_1.8.7_linux_x86_64.tar.gz" | sudo tar -xz -C /usr/local/bin +``` + +## Fetch available methods around Automation + +```bash +cd ~/tfs-ctrl/ +grpcurl -import-path ./proto -proto automation.proto list +grpcurl -import-path ./proto -proto automation.proto describe automation.AutomationService +grpcurl -import-path ./proto -proto automation.proto describe automation.AutomationService.ZSMCreate +``` + +## Try an example ZSMCreate + +TFS tests are now augmented with a new Automation example that shows the way to trigger a ZSM loop creaiton. +The following script invokes Automation on top of a specific example topology. + +```bash +bash src/tests/automation/run_test_automation.sh +``` + +More details are provided in `src/tests/automation/README.md` + +## Important Services + +WebUI + +``` +http://10.10.10.41/webui/ +``` + +Grafana + +``` +http://10.10.10.41/grafana +``` + +Prometheus + +``` +http://10.10.10.41:30090/ +``` + +## Check Kafka topics + +The following commands may help you debug a closed loop that involves Telemetry, Analytics, Policy, all managed by Automation. +Kafka is a key element for Automation as the KPIs managed by Analyzer create alarms that propagate to Policy via a dedicated Kafka topic. +Checking this topic is key for ensuring proper communication between Analytics and Policy. + +Get all pods in Kafka namespace: + +```bash +kubectl get pods -n kafka + +NAME READY STATUS RESTARTS AGE +kafka-0 1/1 Running 2 (90d ago) 104d +kafka-broker-5f9656cc68-d8fzz 1/1 Running 13 (44h ago) 429d +zookeeper-8664c6774d-nvbgg 1/1 Running 6 (90d ago) 429d +``` + +Query Kafka from within the Kafka broker's pod: + +```bash +kubectl exec -it kafka-0 -n kafka -- \ + kafka-consumer-groups.sh \ + --bootstrap-server kafka-service.kafka.svc.cluster.local:9092 \ + --list + +Output> + backend + KpiValueWriter + analytics-backend + policy +``` + +Now let's see the consumer groups. + +```bash +kubectl exec -it kafka-0 -n kafka -- \ + kafka-consumer-groups.sh \ + --bootstrap-server kafka-service.kafka.svc.cluster.local:9092 \ + --list + +Output> + backend + KpiValueWriter + analytics-backend + policy +``` + +Let's describe the policy group: + +```bash +kubectl exec -it kafka-0 -n kafka -- \ + kafka-consumer-groups.sh \ + --bootstrap-server kafka-service.kafka.svc.cluster.local:9092 \ + --describe \ + --group policy + +Output> +GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID +policy topic_alarms 0 40 41 1 kafka-consumer-topic_alarms-c8f09ac5-8c44-42ec-a13b-1af2c47fb86c /10.1.181.228 kafka-consumer-topic_alarms +``` diff --git a/src/automation/__init__.py b/src/automation/__init__.py index 8b378bc6118d7fa3e50475b0e3286fc618dea53a..20f367160d269e451b7f83787efc91bbaeb71902 100644 --- a/src/automation/__init__.py +++ b/src/automation/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/client/AutomationClient.py b/src/automation/client/AutomationClient.py new file mode 100644 index 0000000000000000000000000000000000000000..bdd2e81712c803742c4ef1ee39b25c085f6c216b --- /dev/null +++ b/src/automation/client/AutomationClient.py @@ -0,0 +1,54 @@ +# Copyright 2022-2026 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 grpc, logging +from common.Constants import ServiceNameEnum +from common.Settings import get_service_host, get_service_port_grpc +from common.proto.automation_pb2_grpc import AutomationServiceStub +from common.proto.automation_pb2 import ZSMCreateRequest, ZSMService +from common.tools.client.RetryDecorator import retry, delay_exponential +from common.tools.grpc.Tools import grpc_message_to_json_string + +LOGGER = logging.getLogger(__name__) +MAX_RETRIES = 15 +DELAY_FUNCTION = delay_exponential(initial=0.01, increment=2.0, maximum=5.0) +RETRY_DECORATOR = retry(max_retries=MAX_RETRIES, delay_function=DELAY_FUNCTION, prepare_method_name='connect') + +class AutomationClient: + def __init__(self, host=None, port=None): + if not host: host = get_service_host(ServiceNameEnum.AUTOMATION) + if not port: port = get_service_port_grpc(ServiceNameEnum.AUTOMATION) + self.endpoint = '{:s}:{:s}'.format(str(host), str(port)) + LOGGER.info('Creating channel to {:s}...'.format(str(self.endpoint))) + self.channel = None + self.stub = None + self.openconfig_stub = None + self.connect() + LOGGER.info('Channel created') + + def connect(self): + self.channel = grpc.insecure_channel(self.endpoint) + self.stub = AutomationServiceStub(self.channel) + + def close(self): + if self.channel is not None: self.channel.close() + self.channel = None + self.stub = None + + @RETRY_DECORATOR + def ZSMCreate(self, request : ZSMCreateRequest) -> ZSMService: # type: ignore + LOGGER.info('ZSMCreate request: {:s}'.format(grpc_message_to_json_string(request))) + response = self.stub.ZSMCreate(request) + LOGGER.info('ZSMCreate result: {:s}'.format(grpc_message_to_json_string(response))) + return response diff --git a/src/automation/client/PolicyClient.py b/src/automation/client/PolicyClient.py index 7b66049398fa7c6f5b4684245b8e1a18ad81bca7..d3febd5cf7d72291c57d000b889d220d800960e2 100644 --- a/src/automation/client/PolicyClient.py +++ b/src/automation/client/PolicyClient.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -47,8 +47,8 @@ class PolicyClient: self.stub = None @RETRY_DECORATOR - def PolicyAddService(self, request : PolicyRuleService) -> PolicyRuleState: - LOGGER.debug('AddPolicy request: {:s}'.format(grpc_message_to_json_string(request))) + def PolicyAddService(self, request : PolicyRuleService) -> PolicyRuleState: # type: ignore + LOGGER.info('AddPolicy request: {:s}'.format(grpc_message_to_json_string(request))) response = self.stub.PolicyAddService(request) - LOGGER.debug('AddPolicy result: {:s}'.format(grpc_message_to_json_string(response))) + LOGGER.info('AddPolicy result: {:s}'.format(grpc_message_to_json_string(response))) return response diff --git a/src/automation/client/__init__.py b/src/automation/client/__init__.py index 8b378bc6118d7fa3e50475b0e3286fc618dea53a..20f367160d269e451b7f83787efc91bbaeb71902 100644 --- a/src/automation/client/__init__.py +++ b/src/automation/client/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/requirements.in b/src/automation/requirements.in index d9abdea530ba791a507b6e3ed93cae438c9fd5a8..229fafdebbac444b0d1eb8c9ebec30eee641f7fa 100644 --- a/src/automation/requirements.in +++ b/src/automation/requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/service/AutomationService.py b/src/automation/service/AutomationService.py index 06cad5dc3f61f67ebb19a7077ce7305ec370ea1e..546c572bae2aeadc509609ffbe115e469f5b0ebe 100644 --- a/src/automation/service/AutomationService.py +++ b/src/automation/service/AutomationService.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/service/AutomationServiceServicerImpl.py b/src/automation/service/AutomationServiceServicerImpl.py index 187eba055cdfd614abd680cc8ef34ebe5911fe3a..d19f76f7d9cf534a68709b1cfed39b732a47e4ea 100644 --- a/src/automation/service/AutomationServiceServicerImpl.py +++ b/src/automation/service/AutomationServiceServicerImpl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,7 +13,6 @@ # limitations under the License. import grpc, logging -from uuid import uuid4 from common.method_wrappers.Decorator import MetricsPool, safe_and_metered_rpc_method from common.proto.automation_pb2_grpc import AutomationServiceServicer from common.method_wrappers.ServiceExceptions import NotFoundException @@ -23,7 +22,7 @@ from automation.service.database.AutomationDB import AutomationDB from automation.service.database.AutomationModel import AutomationModel from automation.service.zsm_handlers import ZSM_SERVICE_HANDLERS from automation.service.zsm_handler_api.ZSMFilterFields import ( - ZSMFilterFieldEnum, #TELEMETRY_SERVICE_TYPE_VALUES, TARGET_SERVICE_TYPE_VALUES, + ZSMFilterFieldEnum, ZSM_FILTER_FIELD_ALLOWED_VALUES ) from context.client.ContextClient import ContextClient @@ -38,27 +37,31 @@ class AutomationServiceServicerImpl(AutomationServiceServicer): @safe_and_metered_rpc_method(METRICS_POOL,LOGGER) def ZSMCreate(self, request : ZSMCreateRequest, context : grpc.ServicerContext) -> ZSMService: - LOGGER.info("Received gRPC message object: {:}".format(request)) + LOGGER.info("Received gRPC message object:\n{:}".format(request)) context_client = ContextClient() targetService = context_client.GetService(request.target_service_id) telemetryService = context_client.GetService(request.telemetry_service_id) + LOGGER.info(f"Target service type: {targetService.service_type}") + LOGGER.info(f"Telemetry service type: {telemetryService.service_type}") handler_cls = self.get_service_handler_based_on_service_types( targetService.service_type, telemetryService.service_type, ZSM_SERVICE_HANDLERS ) + response = None if handler_cls: handler_obj = handler_cls() # instantiate it - handler_obj.zsmCreate(request, context) + response = handler_obj.zsmCreate(request, context) else: - LOGGER.info("No matching handler found.") + LOGGER.info("No matching handler found") - response = ZSMService() - automation_id = str(uuid4()) - zsm_to_insert = AutomationModel.convert_Automation_to_row(automation_id , "Test Description") - if self.automation_db_obj.add_row_to_db(zsm_to_insert): - response.zsmServiceId.uuid.uuid = automation_id + zsm_to_insert = AutomationModel.convert_Automation_to_row( + response.zsmServiceId.uuid.uuid, "ZSM service" + ) + if not self.automation_db_obj.add_row_to_db(zsm_to_insert): + LOGGER.error("Failed to insert new ZSM service") + return response return response @@ -76,7 +79,7 @@ class AutomationServiceServicerImpl(AutomationServiceServicer): zsmServiceState = ZSMServiceState() zsmServiceState.zsmServiceState = 5 - zsmServiceState.zsmServiceStateMessage = "Removed id: {:}".format(request) + zsmServiceState.zsmServiceStateMessage = "Removed ZSM ID: {:}".format(request) return zsmServiceState @@ -86,21 +89,23 @@ class AutomationServiceServicerImpl(AutomationServiceServicer): zsm_id_to_search = request.uuid.uuid row = self.automation_db_obj.search_db_row_by_id(AutomationModel, 'zsm_id', zsm_id_to_search) if row is None: - LOGGER.info('No matching row found zsm id: {:}'.format(zsm_id_to_search)) - raise NotFoundException('ZsmID', zsm_id_to_search) + LOGGER.info('No matching row found for ZSM ID: {:}'.format(zsm_id_to_search)) + raise NotFoundException('ZSM ID', zsm_id_to_search) response = AutomationModel.convert_row_to_Automation(row) return response @safe_and_metered_rpc_method(METRICS_POOL,LOGGER) def ZSMGetByService(self, request : ServiceId, context : grpc.ServicerContext) -> ZSMService: - LOGGER.info('NOT IMPLEMENTED ZSMGetByService') + LOGGER.info('ZSMGetByService is not implemented') return ZSMService() def get_service_handler_based_on_service_types( - self, targetServiceType ,telemetryServiceType , ZSM_SERVICE_HANDLERS + self, targetServiceType, telemetryServiceType, ZSM_SERVICE_HANDLERS ): flag = True for handler_cls, filters in ZSM_SERVICE_HANDLERS: + LOGGER.info(f"Handler: {handler_cls}") # <<--P4INTZSMPlugin + LOGGER.info(f"Filters: {filters}") # <--ServiceTypeEnum.SERVICETYPE_OPTICAL_CONNECTIVITY for filter in filters: flag = self.check_if_requested_services_pass_filter_criteria( filter, targetServiceType, telemetryServiceType @@ -114,6 +119,7 @@ class AutomationServiceServicerImpl(AutomationServiceServicer): ): flag = True for filter_key, filter_value in filter.items(): + LOGGER.info(f"Filter value: {filter_value}") # <--ServiceTypeEnum.SERVICETYPE_OPTICAL_CONNECTIVITY if filter_value in ZSM_FILTER_FIELD_ALLOWED_VALUES[filter_key.value]: if filter_key.value == ZSMFilterFieldEnum.TARGET_SERVICE_TYPE.value: if filter_value != targetServiceType: diff --git a/src/automation/service/EventEngine.py b/src/automation/service/EventEngine.py index d7966b52c0319341d03540935edefca7ab861d31..60b79654496721a7f09827d3db4c471e222d6086 100644 --- a/src/automation/service/EventEngine.py +++ b/src/automation/service/EventEngine.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/service/Tools.py b/src/automation/service/Tools.py index 578c17f7a1dd48f403d2b76e96a769fbd0efa89c..2d3338558273798b0de64c34ab95c4e738f34012 100644 --- a/src/automation/service/Tools.py +++ b/src/automation/service/Tools.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/service/__init__.py b/src/automation/service/__init__.py index 8b378bc6118d7fa3e50475b0e3286fc618dea53a..20f367160d269e451b7f83787efc91bbaeb71902 100644 --- a/src/automation/service/__init__.py +++ b/src/automation/service/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/service/__main__.py b/src/automation/service/__main__.py index d8ea030baaa8f06841c5e701c0287f3f735c18d4..f09731140327df999a1f0540873e5c4b625d9954 100644 --- a/src/automation/service/__main__.py +++ b/src/automation/service/__main__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,7 +14,6 @@ import logging, signal, sys, threading from prometheus_client import start_http_server -from automation.service.EventEngine import EventEngine from common.Constants import ServiceNameEnum from common.Settings import ( ENVVAR_SUFIX_SERVICE_HOST, ENVVAR_SUFIX_SERVICE_PORT_GRPC, @@ -22,8 +21,6 @@ from common.Settings import ( wait_for_environment_variables ) from .AutomationService import AutomationService -from common.tools.database.GenericDatabase import Database -from automation.service.database.AutomationModel import AutomationModel from .database.Engine import Engine from .database.models._Base import rebuild_database @@ -34,11 +31,11 @@ LOGGER = logging.getLogger(__name__) terminate = threading.Event() def signal_handler(signal, frame): # pylint: disable=redefined-outer-name,unused-argument - LOGGER.warning('Terminate signal received') + LOGGER.warning("Terminate signal received") terminate.set() def main(): - LOGGER.info('Starting...') + LOGGER.info("Starting...") wait_for_environment_variables([ get_env_var_name(ServiceNameEnum.CONTEXT, ENVVAR_SUFIX_SERVICE_HOST ), @@ -63,16 +60,17 @@ def main(): start_http_server(metrics_port) # Get Database Engine instance and initialize database, if needed - LOGGER.info('Getting SQLAlchemy DB Engine...') + LOGGER.info("Getting SQLAlchemy DB Engine...") db_engine = Engine.get_engine() if db_engine is None: - LOGGER.error('Unable to get SQLAlchemy DB Engine...') + LOGGER.error("Unable to get SQLAlchemy DB Engine...") return -1 + # Create the database try: Engine.create_database(db_engine) - except: # pylint: disable=bare-except # pragma: no cover - LOGGER.exception('Failed to check/create the database: {:s}'.format(str(db_engine.url))) + except Exception as ex: + LOGGER.exception(f"Failed to check/create the database: {str(db_engine.url)}") rebuild_database(db_engine) @@ -83,12 +81,18 @@ def main(): # Wait for Ctrl+C or termination signal while not terminate.wait(timeout=1.0): pass - LOGGER.info('Terminating...') + LOGGER.info("Terminating...") grpc_service.stop() - event_engine.stop() + # event_engine.stop() - LOGGER.info('Bye') + # Drop the database + try: + Engine.drop_database(db_engine) + except Exception as ex: + LOGGER.exception(f"Failed to check/create the database: {str(db_engine.url)}") + + LOGGER.info("Bye") return 0 -if __name__ == '__main__': +if __name__ == "__main__": sys.exit(main()) diff --git a/src/automation/service/database/AutomationDB.py b/src/automation/service/database/AutomationDB.py index 0491cb590d1789f79af8508a44aa9baf93bbeff3..8281498be84e5a27214867eb2aea3902244c648a 100644 --- a/src/automation/service/database/AutomationDB.py +++ b/src/automation/service/database/AutomationDB.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -15,12 +15,11 @@ import logging from common.method_wrappers.Decorator import MetricsPool from common.tools.database.GenericDatabase import Database -from common.method_wrappers.ServiceExceptions import OperationFailedException -LOGGER = logging.getLogger(__name__) +LOGGER = logging.getLogger(__name__) METRICS_POOL = MetricsPool('Automation', 'Database') class AutomationDB(Database): def __init__(self, model) -> None: - LOGGER.info('Init AutomationService') + LOGGER.info('Init Automation database') super().__init__(model) diff --git a/src/automation/service/database/AutomationModel.py b/src/automation/service/database/AutomationModel.py index 156acbb93615be5e00bede49154271cb158b316d..84a837b9fa982609b4d19777210f4258a4695412 100644 --- a/src/automation/service/database/AutomationModel.py +++ b/src/automation/service/database/AutomationModel.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,26 +14,24 @@ import logging from sqlalchemy.dialects.postgresql import UUID -from sqlalchemy import Column, Integer, String, Text -from sqlalchemy.orm import registry +from sqlalchemy import Column, Text from .models._Base import _Base from common.proto.automation_pb2 import ZSMService -logging.basicConfig(level=logging.INFO) LOGGER = logging.getLogger(__name__) class AutomationModel(_Base): __tablename__ = 'automation' zsm_id = Column(UUID(as_uuid=False), primary_key=True) - zsm_description = Column(Text , nullable=False) + zsm_description = Column(Text, nullable=False) # helps in logging the information def __repr__(self): return (f"") @classmethod - def convert_Automation_to_row(cls, uuid , zsm_description): + def convert_Automation_to_row(cls, uuid, zsm_description): """ Create an instance of Automation from a request object. Args: request: The request object containing the data. @@ -47,10 +45,10 @@ class AutomationModel(_Base): @classmethod def convert_row_to_Automation(cls, row): """ - Create and return a dictionary representation of a Automation instance. + Create and return a dictionary representation of an Automation instance. Args: row: The Automation instance (row) containing the data. Returns: Automation object """ response = ZSMService() - response.zsmServiceId.uuid.uuid = row.zsm_id + response.zsmServiceId.uuid.uuid = row.zsm_id return response diff --git a/src/automation/service/database/Engine.py b/src/automation/service/database/Engine.py index 43690382e513093feda4dfa89ee75ef85c08b651..bdbdf750771ec764bb0e79dbd3a44f41034c216d 100644 --- a/src/automation/service/database/Engine.py +++ b/src/automation/service/database/Engine.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/service/database/__init__.py b/src/automation/service/database/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/automation/service/database/__init__.py +++ b/src/automation/service/database/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/service/database/models/_Base.py b/src/automation/service/database/models/_Base.py index 06c5f6b02597802e0dcb1f3a5f941c977eb126a8..9f00b724a5115be0c6b174cfe9dbb267bc6a5a17 100644 --- a/src/automation/service/database/models/_Base.py +++ b/src/automation/service/database/models/_Base.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,9 +14,7 @@ import sqlalchemy from typing import Any, List -from sqlalchemy.orm import Session, sessionmaker, declarative_base -from sqlalchemy.sql import text -from sqlalchemy_cockroachdb import run_transaction +from sqlalchemy.orm import declarative_base _Base = declarative_base() diff --git a/src/automation/service/zsm_handler_api/ZSMFilterFields.py b/src/automation/service/zsm_handler_api/ZSMFilterFields.py index 7b00de5bc474f8ac4a6a711acf9f7200723ddaae..52a3f34c20732720a77a976b9c8843c7d4bf3b0c 100644 --- a/src/automation/service/zsm_handler_api/ZSMFilterFields.py +++ b/src/automation/service/zsm_handler_api/ZSMFilterFields.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -16,19 +16,21 @@ from enum import Enum from common.proto.context_pb2 import ServiceTypeEnum class ZSMFilterFieldEnum(Enum): - TARGET_SERVICE_TYPE = 'target_service_type' + TARGET_SERVICE_TYPE = 'target_service_type' TELEMETRY_SERVICE_TYPE = 'telemetry_service_type' TARGET_SERVICE_TYPE_VALUES = { - ServiceTypeEnum.SERVICETYPE_L2NM + ServiceTypeEnum.SERVICETYPE_L2NM, + ServiceTypeEnum.SERVICETYPE_OPTICAL_CONNECTIVITY, } TELEMETRY_SERVICE_TYPE_VALUES = { - ServiceTypeEnum.SERVICETYPE_INT + ServiceTypeEnum.SERVICETYPE_INT, + ServiceTypeEnum.SERVICETYPE_OPTICAL_CONNECTIVITY, } # Maps filter fields to allowed values per Filter field. # If no restriction (free text) None is specified ZSM_FILTER_FIELD_ALLOWED_VALUES = { - ZSMFilterFieldEnum.TARGET_SERVICE_TYPE.value : TARGET_SERVICE_TYPE_VALUES, + ZSMFilterFieldEnum.TARGET_SERVICE_TYPE.value : TARGET_SERVICE_TYPE_VALUES, ZSMFilterFieldEnum.TELEMETRY_SERVICE_TYPE.value : TELEMETRY_SERVICE_TYPE_VALUES, } diff --git a/src/automation/service/zsm_handler_api/_ZSMHandler.py b/src/automation/service/zsm_handler_api/_ZSMHandler.py index e79601cf755ced11f734bdfa7f12f63d857b25cd..66b02c60a954817b3d46925dfb0c2ff31d824a4f 100644 --- a/src/automation/service/zsm_handler_api/_ZSMHandler.py +++ b/src/automation/service/zsm_handler_api/_ZSMHandler.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,26 +13,23 @@ # limitations under the License. import grpc , logging -from common.proto.automation_pb2 import ( - ZSMCreateRequest, #ZSMService, - ZSMServiceID, #ZSMServiceState, -) +from common.proto.automation_pb2 import ZSMCreateRequest, ZSMServiceID from common.proto.context_pb2 import ServiceId LOGGER = logging.getLogger(__name__) class _ZSMHandler: def __init__(self): - LOGGER.info('Init Scenario') + LOGGER.info('ZSM init') - def zsmCreate(self, request : ZSMCreateRequest, context : grpc.ServicerContext): + def zsmCreate(self, request : ZSMCreateRequest, context : grpc.ServicerContext): # type: ignore LOGGER.info('zsmCreate method') - def zsmDelete(self, request : ZSMServiceID, context : grpc.ServicerContext): + def zsmDelete(self, request : ZSMServiceID, context : grpc.ServicerContext): # type: ignore LOGGER.info('zsmDelete method') - def zsmGetById(self, request : ZSMServiceID, context : grpc.ServicerContext): + def zsmGetById(self, request : ZSMServiceID, context : grpc.ServicerContext): # type: ignore LOGGER.info('zsmGetById method') - def zsmGetByService(self, request : ServiceId, context : grpc.ServicerContext): + def zsmGetByService(self, request : ServiceId, context : grpc.ServicerContext): # type: ignore LOGGER.info('zsmGetByService method') diff --git a/src/automation/service/zsm_handler_api/__init__.py b/src/automation/service/zsm_handler_api/__init__.py index 7363515f07a52d996229bcbd72932ce1423258d7..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 100644 --- a/src/automation/service/zsm_handler_api/__init__.py +++ b/src/automation/service/zsm_handler_api/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/service/zsm_handlers/OpticalZSMPlugin.py b/src/automation/service/zsm_handlers/OpticalZSMPlugin.py new file mode 100644 index 0000000000000000000000000000000000000000..56418e8933b2fb9dde3ac1355bb1d7aa7e4f615e --- /dev/null +++ b/src/automation/service/zsm_handlers/OpticalZSMPlugin.py @@ -0,0 +1,104 @@ +# Copyright 2022-2026 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 grpc, logging +from uuid import uuid4 +from common.proto.analytics_frontend_pb2 import AnalyzerId +from common.proto.policy_pb2 import PolicyRuleState +from common.proto.automation_pb2 import ZSMCreateRequest, ZSMService + +from analytics.frontend.client.AnalyticsFrontendClient import AnalyticsFrontendClient +from automation.client.PolicyClient import PolicyClient +from context.client.ContextClient import ContextClient +from automation.service.zsm_handler_api._ZSMHandler import _ZSMHandler + + +LOGGER = logging.getLogger(__name__) + + +class OpticalZSMPlugin(_ZSMHandler): + def __init__(self): + LOGGER.info('Init OpticalZSMPlugin') + + def zsmCreate(self, request : ZSMCreateRequest, context : grpc.ServicerContext): # type: ignore + context_client = ContextClient() + policy_client = PolicyClient() + analytics_frontend_client = AnalyticsFrontendClient() + + # Verify the input target service ID + try: + target_service_id = context_client.GetService(request.target_service_id) + except grpc.RpcError as ex: + LOGGER.exception(f'Unable to get target service:\n{str(target_service_id)}') + if ex.code() != grpc.StatusCode.NOT_FOUND: raise # pylint: disable=no-member + context_client.close() + return self._zsm_create_response_empty() + + # Verify the input telemetry service ID + try: + telemetry_service_id = context_client.GetService(request.telemetry_service_id) + except grpc.RpcError as ex: + LOGGER.exception(f'Unable to get telemetry service:\n{str(telemetry_service_id)}') + if ex.code() != grpc.StatusCode.NOT_FOUND: raise # pylint: disable=no-member + context_client.close() + return self._zsm_create_response_empty() + + # Start an analyzer + try: + analyzer_id: AnalyzerId = analytics_frontend_client.StartAnalyzer(request.analyzer) # type: ignore + LOGGER.info('Analyzer_id:\n{:s}'.format(str(analyzer_id))) + except grpc.RpcError as ex: + LOGGER.exception(f'Unable to start Analyzer:\n{str(request.analyzer)}') + if ex.code() != grpc.StatusCode.NOT_FOUND: raise # pylint: disable=no-member + context_client.close() + analytics_frontend_client.close() + return self._zsm_create_response_empty() + + # Create a policy + try: + LOGGER.info(f'Policy:\n{str(request.policy)}') + policy_rule_state: PolicyRuleState = policy_client.PolicyAddService(request.policy) # type: ignore + LOGGER.info(f'Policy rule state:\n{policy_rule_state}') + except Exception as ex: + LOGGER.exception(f'Unable to create policy:\n{str(request.policy)}') + LOGGER.exception(ex.code()) + # ToDo: Investigate why PolicyAddService throws exception + # if ex.code() != grpc.StatusCode.NOT_FOUND: raise # pylint: disable=no-member + # context_client.close() + # policy_client.close() + # return self._zsm_create_response_empty() + + context_client.close() + analytics_frontend_client.close() + policy_client.close() + return self._zsm_create_response(request) + + def zsmDelete(self): + LOGGER.info('zsmDelete method') + + def zsmGetById(self): + LOGGER.info('zsmGetById method') + + def zsmGetByService(self): + LOGGER.info('zsmGetByService method') + + def _zsm_create_response(self, request): + response = ZSMService() + automation_id = str(uuid4()) + response.zsmServiceId.uuid.uuid = automation_id + response.serviceId.service_uuid.uuid = request.target_service_id.service_uuid.uuid + return response + + def _zsm_create_response_empty(self): + return ZSMService() diff --git a/src/automation/service/zsm_handlers/P4INTZSMPlugin.py b/src/automation/service/zsm_handlers/P4INTZSMPlugin.py index e71e2e6e3e87c43ee6b9b29997f7f674d3029227..f014cef7acc31bc18d4fe08f28c7ecc5ed221366 100644 --- a/src/automation/service/zsm_handlers/P4INTZSMPlugin.py +++ b/src/automation/service/zsm_handlers/P4INTZSMPlugin.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -12,7 +12,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -import grpc , logging +import grpc, logging +from uuid import uuid4 from common.proto.analytics_frontend_pb2 import AnalyzerId from common.proto.policy_pb2 import PolicyRuleState from common.proto.automation_pb2 import ZSMCreateRequest, ZSMService @@ -21,7 +22,7 @@ from analytics.frontend.client.AnalyticsFrontendClient import AnalyticsFrontendC from automation.client.PolicyClient import PolicyClient from context.client.ContextClient import ContextClient from automation.service.zsm_handler_api._ZSMHandler import _ZSMHandler -from common.proto.policy_condition_pb2 import PolicyRuleCondition + LOGGER = logging.getLogger(__name__) @@ -29,8 +30,7 @@ class P4INTZSMPlugin(_ZSMHandler): def __init__(self): LOGGER.info('Init P4INTZSMPlugin') - def zsmCreate(self,request : ZSMCreateRequest, context : grpc.ServicerContext): - # check that service does not exist + def zsmCreate(self, request : ZSMCreateRequest, context : grpc.ServicerContext): # type: ignore context_client = ContextClient() policy_client = PolicyClient() analytics_frontend_client = AnalyticsFrontendClient() @@ -39,55 +39,49 @@ class P4INTZSMPlugin(_ZSMHandler): try: target_service_id = context_client.GetService(request.target_service_id) except grpc.RpcError as ex: + LOGGER.exception(f'Unable to get target service:\n{str(target_service_id)}') if ex.code() != grpc.StatusCode.NOT_FOUND: raise # pylint: disable=no-member - LOGGER.exception('Unable to get target service({:s})'.format(str(target_service_id))) context_client.close() - return None + return self._zsm_create_response_empty() # Verify the input telemetry service ID try: telemetry_service_id = context_client.GetService(request.telemetry_service_id) except grpc.RpcError as ex: + LOGGER.exception(f'Unable to get telemetry service:\n{str(telemetry_service_id)}') if ex.code() != grpc.StatusCode.NOT_FOUND: raise # pylint: disable=no-member - LOGGER.exception('Unable to get telemetry service({:s})'.format(str(telemetry_service_id))) context_client.close() - return None + return self._zsm_create_response_empty() # Start an analyzer try: - analyzer_id_lat: AnalyzerId = analytics_frontend_client.StartAnalyzer(request.analyzer) # type: ignore - LOGGER.info('analyzer_id_lat({:s})'.format(str(analyzer_id_lat))) + analyzer_id: AnalyzerId = analytics_frontend_client.StartAnalyzer(request.analyzer) # type: ignore + LOGGER.info('Analyzer_id:\n{:s}'.format(str(analyzer_id))) except grpc.RpcError as ex: + LOGGER.exception(f'Unable to start Analyzer:\n{str(request.analyzer)}') if ex.code() != grpc.StatusCode.NOT_FOUND: raise # pylint: disable=no-member - LOGGER.exception('Unable to start analyzer({:s})'.format(str(request.analyzer))) context_client.close() analytics_frontend_client.close() - return None + return self._zsm_create_response_empty() # Create a policy try: - LOGGER.info('policy({:s})'.format(str(request.policy))) - # PolicyRuleCondition - policyRuleCondition = PolicyRuleCondition() - # policyRuleCondition.kpiId.kpi_id.uuid = request.analyzer.output_kpi_ids[0].kpi_id.uuid - # policyRuleCondition.numericalOperator = 5 - # policyRuleCondition.kpiValue.floatVal = 300 - # request.policy.policyRuleBasic.conditionList.append(policyRuleCondition) - LOGGER.info('policy after({:s})'.format(str(request.policy))) - + LOGGER.info(f'Policy:\n{str(request.policy)}') policy_rule_state: PolicyRuleState = policy_client.PolicyAddService(request.policy) # type: ignore - LOGGER.info('policy_rule_state({:s})'.format(str(policy_rule_state))) - except grpc.RpcError as ex: - if ex.code() != grpc.StatusCode.NOT_FOUND: raise # pylint: disable=no-member - LOGGER.exception('Unable to create policy({:s})'.format(str(request.policy))) + LOGGER.info(f'Policy rule state:\n{policy_rule_state}') + except Exception as ex: + LOGGER.exception(f'Unable to create policy:\n{str(request.policy)}') + LOGGER.exception(ex.code()) + # ToDo: Investigate why PolicyAddService throws exception + # if ex.code() != grpc.StatusCode.NOT_FOUND: raise # pylint: disable=no-member context_client.close() policy_client.close() - return None + return self._zsm_create_response_empty() context_client.close() analytics_frontend_client.close() policy_client.close() - return ZSMService() + return self._zsm_create_response(request) def zsmDelete(self): LOGGER.info('zsmDelete method') @@ -97,3 +91,13 @@ class P4INTZSMPlugin(_ZSMHandler): def zsmGetByService(self): LOGGER.info('zsmGetByService method') + + def _zsm_create_response(self, request): + response = ZSMService() + automation_id = str(uuid4()) + response.zsmServiceId.uuid.uuid = automation_id + response.serviceId.service_uuid.uuid = request.target_service_id.service_uuid.uuid + return response + + def _zsm_create_response_empty(self): + return ZSMService() \ No newline at end of file diff --git a/src/automation/service/zsm_handlers/__init__.py b/src/automation/service/zsm_handlers/__init__.py index 6a371461bd8ef89b77c8acfc4cfdfbb415c1f9ac..97be87e13d4ea8c4b212e6d6c6f7102b6cc199b9 100644 --- a/src/automation/service/zsm_handlers/__init__.py +++ b/src/automation/service/zsm_handlers/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -15,12 +15,19 @@ from common.proto.context_pb2 import ServiceTypeEnum from ..zsm_handler_api.ZSMFilterFields import ZSMFilterFieldEnum from automation.service.zsm_handlers.P4INTZSMPlugin import P4INTZSMPlugin +from automation.service.zsm_handlers.OpticalZSMPlugin import OpticalZSMPlugin ZSM_SERVICE_HANDLERS = [ (P4INTZSMPlugin, [ { - ZSMFilterFieldEnum.TARGET_SERVICE_TYPE : ServiceTypeEnum.SERVICETYPE_L2NM, + ZSMFilterFieldEnum.TARGET_SERVICE_TYPE : ServiceTypeEnum.SERVICETYPE_L2NM, ZSMFilterFieldEnum.TELEMETRY_SERVICE_TYPE : ServiceTypeEnum.SERVICETYPE_INT, } + ]), + (OpticalZSMPlugin, [ + { + ZSMFilterFieldEnum.TARGET_SERVICE_TYPE : ServiceTypeEnum.SERVICETYPE_OPTICAL_CONNECTIVITY, + ZSMFilterFieldEnum.TELEMETRY_SERVICE_TYPE : ServiceTypeEnum.SERVICETYPE_OPTICAL_CONNECTIVITY, + } ]) ] diff --git a/src/automation/tests/__init__.py b/src/automation/tests/__init__.py index 8b378bc6118d7fa3e50475b0e3286fc618dea53a..20f367160d269e451b7f83787efc91bbaeb71902 100644 --- a/src/automation/tests/__init__.py +++ b/src/automation/tests/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/tests/test_automation_handlers.py b/src/automation/tests/test_automation_handlers.py index 0530e7614ffcba5a07deeddf5a8326a4389b925e..3915b64594dd40505ae0627bbd3faacb2187751e 100644 --- a/src/automation/tests/test_automation_handlers.py +++ b/src/automation/tests/test_automation_handlers.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -38,7 +38,7 @@ ZSM_SERVICE_HANDLERS = [ def test_get_service_handler_based_on_service_types(): automation = AutomationServiceServicerImpl() - handler_cls = automation.get_service_handler_based_on_service_types(ServiceTypeEnum.SERVICETYPE_INT, ServiceTypeEnum.SERVICETYPE_L2NM , ZSM_SERVICE_HANDLERS) + handler_cls = automation.get_service_handler_based_on_service_types(ServiceTypeEnum.SERVICETYPE_INT, ServiceTypeEnum.SERVICETYPE_L2NM, ZSM_SERVICE_HANDLERS) if handler_cls: assert True else: @@ -48,7 +48,7 @@ def test_get_service_handler_based_on_service_types(): def test_get_service_handler_based_on_service_types_error(): automation = AutomationServiceServicerImpl() - handler_cls = automation.get_service_handler_based_on_service_types(ServiceTypeEnum.SERVICETYPE_INT , ServiceTypeEnum.SERVICETYPE_L2NM , ZSM_SERVICE_HANDLERS) + handler_cls = automation.get_service_handler_based_on_service_types(ServiceTypeEnum.SERVICETYPE_INT, ServiceTypeEnum.SERVICETYPE_L2NM, ZSM_SERVICE_HANDLERS) if handler_cls: assert True else: @@ -61,7 +61,7 @@ def test_check_if_requested_services_pass_filter_criteria(): } automation = AutomationServiceServicerImpl() - flag = automation.check_if_requested_services_pass_filter_criteria(filter , ServiceTypeEnum.SERVICETYPE_L2NM , ServiceTypeEnum.SERVICETYPE_INT) + flag = automation.check_if_requested_services_pass_filter_criteria(filter, ServiceTypeEnum.SERVICETYPE_L2NM, ServiceTypeEnum.SERVICETYPE_INT) if flag: assert True @@ -75,7 +75,7 @@ def test_check_if_requested_services_pass_filter_criteria_error(): } automation = AutomationServiceServicerImpl() - flag = automation.check_if_requested_services_pass_filter_criteria(filter , ServiceTypeEnum.SERVICETYPE_INT , ServiceTypeEnum.SERVICETYPE_L2NM) + flag = automation.check_if_requested_services_pass_filter_criteria(filter, ServiceTypeEnum.SERVICETYPE_INT, ServiceTypeEnum.SERVICETYPE_L2NM) if flag: assert False diff --git a/src/automation/tests/test_unitary_emulated.py b/src/automation/tests/test_unitary_emulated.py index cf3c5b56d5e5506f4b59f0a7686cd8aa1bf4eeb0..6a40a389f0092871dda4d48ac1e40c77a02e272b 100644 --- a/src/automation/tests/test_unitary_emulated.py +++ b/src/automation/tests/test_unitary_emulated.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/automation/tests/test_unitary_ietf_actn.py b/src/automation/tests/test_unitary_ietf_actn.py index a175a7d62933d025c106a2ed7ccf50a3bb7e4b4a..fa457145ba464be78dce52cfea5bdd68f6fe7172 100644 --- a/src/automation/tests/test_unitary_ietf_actn.py +++ b/src/automation/tests/test_unitary_ietf_actn.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/.gitlab-ci.yml b/src/bgpls_speaker/.gitlab-ci.yml index a3490ceebc8a7891a1f2f29b631496acbde30a59..0cf29edbb3d09f9927f176752bfee2e9cab04855 100644 --- a/src/bgpls_speaker/.gitlab-ci.yml +++ b/src/bgpls_speaker/.gitlab-ci.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/Config.py b/src/bgpls_speaker/Config.py index 7363515f07a52d996229bcbd72932ce1423258d7..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 100644 --- a/src/bgpls_speaker/Config.py +++ b/src/bgpls_speaker/Config.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/Dockerfile b/src/bgpls_speaker/Dockerfile index 316efca16f7067d486bb95f1b7d25de867e5f27c..4bc120eb0ac88558bd71cf0c926745bdc2b2ed65 100644 --- a/src/bgpls_speaker/Dockerfile +++ b/src/bgpls_speaker/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/__init__.py b/src/bgpls_speaker/__init__.py index 7363515f07a52d996229bcbd72932ce1423258d7..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 100644 --- a/src/bgpls_speaker/__init__.py +++ b/src/bgpls_speaker/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/client/BgplsClient.py b/src/bgpls_speaker/client/BgplsClient.py index bd29931dee483cccdb7f57ad2c15c7d457273232..cf2d095d73758b6e7c24110989b28dda49170c9e 100644 --- a/src/bgpls_speaker/client/BgplsClient.py +++ b/src/bgpls_speaker/client/BgplsClient.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/client/__init__.py b/src/bgpls_speaker/client/__init__.py index 7363515f07a52d996229bcbd72932ce1423258d7..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 100644 --- a/src/bgpls_speaker/client/__init__.py +++ b/src/bgpls_speaker/client/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/quick_deploy.sh b/src/bgpls_speaker/quick_deploy.sh index 5c443064f8ea19488ec7cf1117007ea8ea3ca869..5d601771df9b84ce0b258855269695b51e007ce3 100644 --- a/src/bgpls_speaker/quick_deploy.sh +++ b/src/bgpls_speaker/quick_deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/requirements.in b/src/bgpls_speaker/requirements.in index 8b0ae7f15c8c853a7de367e7dc118d5879b43b00..36024f463740ff5768a3f1f98064dcf6ffc9a934 100644 --- a/src/bgpls_speaker/requirements.in +++ b/src/bgpls_speaker/requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/BgplsService.py b/src/bgpls_speaker/service/BgplsService.py index f078896f7d82fc5d92ed723dfd478e7ea4e98c8e..727a72e74bee90e2ebeaf891cfeb43436de8a304 100644 --- a/src/bgpls_speaker/service/BgplsService.py +++ b/src/bgpls_speaker/service/BgplsService.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/BgplsServiceServicerImpl.py b/src/bgpls_speaker/service/BgplsServiceServicerImpl.py index 754a5a34eac029c0f515a070ae07551c10432538..d1bb2fac3cad38a0d6f9281c3473d0098df030c4 100644 --- a/src/bgpls_speaker/service/BgplsServiceServicerImpl.py +++ b/src/bgpls_speaker/service/BgplsServiceServicerImpl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/__init__.py b/src/bgpls_speaker/service/__init__.py index c985cb35bce23982bca39b434a5157be339c45d6..c49d8188b13a0548fac18b91dd599e5ab0a41282 100644 --- a/src/bgpls_speaker/service/__init__.py +++ b/src/bgpls_speaker/service/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/__main__.py b/src/bgpls_speaker/service/__main__.py index 255fd003e06ee39787026a338531ec423d621148..d48fe4f974562024dbaed25aa6c5da51ada04d58 100644 --- a/src/bgpls_speaker/service/__main__.py +++ b/src/bgpls_speaker/service/__main__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/BGP4Parameters_3.xml b/src/bgpls_speaker/service/java/BGP4Parameters_3.xml index ec13295652aa4c0985b380ca8910ea8998d4a22a..563582ba020b5dfa32d532316db71b84500966f2 100644 --- a/src/bgpls_speaker/service/java/BGP4Parameters_3.xml +++ b/src/bgpls_speaker/service/java/BGP4Parameters_3.xml @@ -1,4 +1,4 @@ - + diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4PeerInitiatedSession.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4PeerInitiatedSession.java index 9858d351a27d99cfd8a3803180b5d4a5917b9493..0ef6f143889aa12b906049eee2404914dee1b844 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4PeerInitiatedSession.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4PeerInitiatedSession.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4Session.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4Session.java index c2869c101d75c87c57c7ecc2cb7bd996caaaf544..86f3bff84e65b5779b19ad0f1637ff9f003d2e98 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4Session.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4Session.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4SessionClient.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4SessionClient.java index 50dd5ff1364d75073dcdf759c16a516424b4a066..e5f84a2c46cfb4db4ce6e6cde5f4e0619b1c1db1 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4SessionClient.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4SessionClient.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4SessionExistsException.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4SessionExistsException.java index 8d0fa86035fe2f33dadd1ed1b1be01d0027eedcf..e8d22dd9ce8ef61fb1d92b73bc1c2e6fd6f66837 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4SessionExistsException.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4SessionExistsException.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4SessionsInformation.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4SessionsInformation.java index 7d95fff0b15df8b5f8b93b06910050427c5334b5..63494179c05446212153435fbb005684ac3650fa 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4SessionsInformation.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4SessionsInformation.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4StateSession.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4StateSession.java index 397abb06e6e47f3ddae33e20f1c9c217b49049f4..05f7c4fe75892ac09e7135d7894a926ebbb53efe 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4StateSession.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/BGP4StateSession.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/ConnectRetryTimer.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/ConnectRetryTimer.java index c3257af5dfd1ddb1dc8bbace83442882d8908860..02ce4f0ac3e32728c08b4262209fe0d4ed799dd1 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/ConnectRetryTimer.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/ConnectRetryTimer.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/DeadTimerThread.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/DeadTimerThread.java index 589c71f1bb25799685b30e258a6d6a4fed6c588e..c4ddc9640efab138c84941c14fdb1f68de317f4c 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/DeadTimerThread.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/DeadTimerThread.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/GenericBGP4Session.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/GenericBGP4Session.java index 305f50b613f14e9056692c3d20b6d062324a4838..4602ba2aa63b8501255b1a48ac7471be42d6dc56 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/GenericBGP4Session.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/GenericBGP4Session.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/KeepAliveThread.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/KeepAliveThread.java index fbfcebf9c007e0f3a76f1562e5d07ccd41803a4e..d24e4c536b7702b9467eb5800ad2f2cedcda00e0 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/KeepAliveThread.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/KeepAliveThread.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/KeepWaitTimerTask.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/KeepWaitTimerTask.java index d8d6b8f0de0ba1ca438953867eba1c63e6b2d2c9..bc2e23996e7a254be4d4da17d8de3041f95e5ccb 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/KeepWaitTimerTask.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/KeepWaitTimerTask.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/OpenWaitTimerTask.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/OpenWaitTimerTask.java index aa3850f6db567db94c79334d4a09b01e162659bf..2eced8ea0da515ed7356b2dee229dc24d0643049 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/OpenWaitTimerTask.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/bgp4session/OpenWaitTimerTask.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcApp.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcApp.java index 7b9278855c52d24f4fbdbfa545485b0b012df821..b5f836e2a330b45b935ff27a026cd1af655526b0 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcApp.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcApp.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcClient.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcClient.java index 788ffbe6064ef9d131258e12657ea2c787914f21..5faaec8c9e2926053b8771df61b2bd811fe33f42 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcClient.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/grpcClient.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/updateServiceImpl.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/updateServiceImpl.java index bef121125fd0f49ddbfdb286c75382065274b640..40502348f9005c9891f7c4be00c543bbb3dea343 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/updateServiceImpl.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/grpc/updateServiceImpl.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/json/bgpMarshal.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/json/bgpMarshal.java index 32f826118071e314fe31219b9bd86848bc6e90af..d56733f9e9d5ea8111a7a3b6ea7fe160e33431a2 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/json/bgpMarshal.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/json/bgpMarshal.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/management/BGP4ManagementServer.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/management/BGP4ManagementServer.java index 97d4681bccae523642267ebbc3b3eb5606d5fcaa..3ed74bc6b501ed56614e2f0fa33a1cbe903b39a5 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/management/BGP4ManagementServer.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/management/BGP4ManagementServer.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/management/BGP4ManagementSession.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/management/BGP4ManagementSession.java index 8ddc27633fa0de708fc7a7721f79a3823da1719e..72a8ea32d0761ef944696ccf50f5ddd7d9907f06 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/management/BGP4ManagementSession.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/management/BGP4ManagementSession.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/LinkNLRIMsg.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/LinkNLRIMsg.java index c690ed05a2dfd9548a8e7609f38f5fd27804eae2..09bddb12417c1b7dd1ea3c3a99ca43873b0feb17 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/LinkNLRIMsg.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/LinkNLRIMsg.java @@ -1,5 +1,5 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/NodeNLRIMsg.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/NodeNLRIMsg.java index f3865c5d34724673953797ac3056bbb567469015..5ad4a1d5bb3e320d1bc05fb6a0c2c3dd7eba8845 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/NodeNLRIMsg.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/NodeNLRIMsg.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/PathAttributeMsg.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/PathAttributeMsg.java index bb35a7570a73b8480695815100897917c67541c6..2c3d9589d7a563e4e87a7d34bf0b7e0b1530449c 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/PathAttributeMsg.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/PathAttributeMsg.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/UpdateMsg.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/UpdateMsg.java index 37163c5dd74080161dec0d19161cb75c2b89bbb3..652ffdc4d61196168d6f8b490ceaf2453692cc7f 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/UpdateMsg.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/UpdateMsg.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/UpdateMsgList.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/UpdateMsgList.java index c0219518b74c78000c11b37ecfa5724e8191a1d5..39531531893b5052994c7c632411e40718ab2b32 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/UpdateMsgList.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/models/UpdateMsgList.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4Exception.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4Exception.java index bf2025511e50ad12636345cf9e3d50f7b4ecebbb..81afe38d70fca17eb693f52157cc70099ace1808 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4Exception.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4Exception.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4LSPeerInfo.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4LSPeerInfo.java index ea4cc5873752def0e7dfd2d44c00ca6922a64f83..0074ddef37da0a51aefc35a44d8139e7eb964161 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4LSPeerInfo.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4LSPeerInfo.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4Parameters.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4Parameters.java index e692e996ca612bb8c39303c71bd1ddb5893bba99..f8c39953a85b870b88379a79a922bc7dc571bf13 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4Parameters.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4Parameters.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4SessionClientManager.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4SessionClientManager.java index bacac162f3df3182155415cb71f3d00c4737f0f0..16c52f27ef5fdc0647b1a7090c53335c3a623f9d 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4SessionClientManager.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4SessionClientManager.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4SessionServerManager.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4SessionServerManager.java index eb533d7f33a0176d5e06370b619733f123dcb7ed..5d714aa39c8f99f8d87c81460da7eff047da1748 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4SessionServerManager.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGP4SessionServerManager.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGPPeer.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGPPeer.java index 6673cb33826e5f2c598c97db096c3543fa6410e1..75a3d112dbcbff44353832cd954f6e1e0ae4f27a 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGPPeer.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGPPeer.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGPPeerMain.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGPPeerMain.java index bd924a7c7cc1df60e96d820d80329c657b4e9262..3373419f086a71e8231fcc387a5662f447fba708 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGPPeerMain.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/BGPPeerMain.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/SaveTopologyinDB.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/SaveTopologyinDB.java index ad175aa7788590e7238f9d59bce9f80947d44696..62b16d9e64c7f8d1beda63c80ff2bf99f257134a 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/SaveTopologyinDB.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/SaveTopologyinDB.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/SendTopology.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/SendTopology.java index 6d6cd456fe7d0ede5b49dd5667ad3bc1ca7057e0..1bbd927f637e731c276d7e2f96a011e91329a88c 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/SendTopology.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/peer/SendTopology.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/tedb/BGP4DomainTEDB.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/tedb/BGP4DomainTEDB.java index d8121b17d4d1cc98e7f4a4471d697f590b0b1b92..91743871c46d4a0baf1215012c6ce182671264fa 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/tedb/BGP4DomainTEDB.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/tedb/BGP4DomainTEDB.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/tedb/BGP4IntradomainTEDB.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/tedb/BGP4IntradomainTEDB.java index 9aac25f26fe431e549367165798f9b721ee04254..1a558b1e2202df50cf9cc3cd371bf98979dafe24 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/tedb/BGP4IntradomainTEDB.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/tedb/BGP4IntradomainTEDB.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/tedb/IntraTEDBS.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/tedb/IntraTEDBS.java index 75f2b60d5a11eb21623b85ee30f57757755debc1..4ba81f6442d827e47d89b1d870e0b39d671a1f47 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/tedb/IntraTEDBS.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/tedb/IntraTEDBS.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateDispatcher.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateDispatcher.java index 1b21d1c208f2d197d8e4422843d7bad3d0a324d9..7f2d6b918d936e322be17354100349ad49c86791 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateDispatcher.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateDispatcher.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateLink.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateLink.java index c428f86c19a2960f66b516cf9b47a8d83d98fb55..f5e5e9c711f3372fa7de3ca8f62403899c089150 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateLink.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateLink.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateProccesorThread.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateProccesorThread.java index 13ad046314f1a6cbfd1db9d53cd07ceb0d78d667..bc647a8c5e5e4793e1129c3cd2824ef7bc2e2f5e 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateProccesorThread.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdateProccesorThread.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdaterThreadRedisTED.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdaterThreadRedisTED.java index c760f98aaab96b4817ea0b56526f3207d5addacf..3accc9f135519b06be31f300f3f10432aba91bf2 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdaterThreadRedisTED.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/bgp4Peer/updateTEDB/UpdaterThreadRedisTED.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/DatabaseControlSimplifiedLSA.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/DatabaseControlSimplifiedLSA.java index 42e2fd744997473cf3b1406f29765a4394709d0f..2fd8215a338cfdd203f1216bfe75897ab4d57c8a 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/DatabaseControlSimplifiedLSA.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/DatabaseControlSimplifiedLSA.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/DomainTEDB.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/DomainTEDB.java index ea7bf6d4e6b0df4f9e86712832174f2809456978..d2b0e75711edce8002f70e039ccd40a6b762853c 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/DomainTEDB.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/DomainTEDB.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/EdgeUtils.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/EdgeUtils.java index e5dc23b563e69a2891aed9acf204ff9a9094d3ab..40beec839ba2f82b8ebd202c1e730018a315df7d 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/EdgeUtils.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/EdgeUtils.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/FileTEDBUpdater.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/FileTEDBUpdater.java index c58dbd831dc78e8129565b27a2ddf77eab73f34b..60379c0bab156c523a5b623494df6cd1865e0562 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/FileTEDBUpdater.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/FileTEDBUpdater.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/IT_Resources.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/IT_Resources.java index d522ce1c20d06312251a1a232210380ed5cfc7ba..c86904b21438ca865f1528f03c43e38df30540d0 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/IT_Resources.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/IT_Resources.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/InterDomainEdge.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/InterDomainEdge.java index 827f2ef769ba33ccbe4024bd8085136dc80b3a69..b81e728931335c4e87bd3b6137d1da4fdd108354 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/InterDomainEdge.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/InterDomainEdge.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/IntraDomainEdge.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/IntraDomainEdge.java index 24462e001eaacaf6ac13813120f88506d2e056f9..420f75a87cc8b05637eac2a1e13478fe4e10fdb5 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/IntraDomainEdge.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/IntraDomainEdge.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/IntraDomainWeightEdge.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/IntraDomainWeightEdge.java index 1c42468edc4dde74f06523596f96546c2c740200..748c555dcebab7b0f408cbe0794ba63017c6d8d8 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/IntraDomainWeightEdge.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/IntraDomainWeightEdge.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/Layer.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/Layer.java index 8fb69df6bc23f82531ea97e1346b7b130e40e7ce..a7d8aa2f7ca83db7d86b1413047bc1a952ae96dc 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/Layer.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/Layer.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/MDTEDB.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/MDTEDB.java index c6403e3c5bdf95a8555da448c8c9a3143efabe58..06c59e2aab9ca966e3948f9776ce61d8dc427960 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/MDTEDB.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/MDTEDB.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/MultiDomainTEDB.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/MultiDomainTEDB.java index 6f680e69cc8c0d5fb6b28623d8c6376777e21f2d..7bfccdada5003c7c46882f3a4e50a16094c2af02 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/MultiDomainTEDB.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/MultiDomainTEDB.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/MultiLayerTEDB.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/MultiLayerTEDB.java index 1e9a311364d74a3a19bb4a616393c112f97c6d24..5691dd351c31b99063e76b7e183de9ad31589110 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/MultiLayerTEDB.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/MultiLayerTEDB.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/Node_Info.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/Node_Info.java index 9455e43dde92649f456ce5df20f8713b9a57c26f..923672a7818a9d9dc0570d04695e3b2880038c27 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/Node_Info.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/Node_Info.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/ReachabilityEntry.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/ReachabilityEntry.java index d1af19a4e921b6705ebf38cbbce6d4c987360846..8101272c508a1a26a5dc64daf6e528747b5e5218 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/ReachabilityEntry.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/ReachabilityEntry.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/ReachabilityManager.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/ReachabilityManager.java index dc11e55e5a12a702cb2ef162b2616ffcf7105dae..546ede9fc901426ca21852020b1a44721cd6c171 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/ReachabilityManager.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/ReachabilityManager.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/SSONInformation.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/SSONInformation.java index b8943ff8662af8fe9bbb9c8036b3757697071722..79fe937c90311b7fd66dcf3fdd679ee29d081334 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/SSONInformation.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/SSONInformation.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/SSONListener.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/SSONListener.java index 48927df64ce62840788076b9de3817e1813093fc..05d92dcf81c48c85f7e5a19f238eec34a3c9e642 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/SSONListener.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/SSONListener.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/SimpleTEDB.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/SimpleTEDB.java index 10260a5f85ccbecc498a64b935d488163407cd73..61ef97752f3f82c0b74f68e813f139dd246034d9 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/SimpleTEDB.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/SimpleTEDB.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TEDB.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TEDB.java index 4ceaf8d3b8da2536cb84558d9a3922b18772df8f..b1393a64388bb24b7636cc622c56917e0f8963df 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TEDB.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TEDB.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TEDBUpdater.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TEDBUpdater.java index e74353ce31642d96df56547dacde9fedc805a9f4..8e72b2a15515befd4665e58fab4ef67a5d2cee27 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TEDBUpdater.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TEDBUpdater.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TEDListener.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TEDListener.java index 77053128407ea86dddafdd4cd6e1d7c45109d4cb..7a6ca64dfce794fe477fae156e2d8cf8fe441e09 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TEDListener.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TEDListener.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TE_Information.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TE_Information.java index 308cc662999ce4ae62b41b2e32617d76f2ef961c..ec7c089d2eff7cb17cd5369eebe631c797554215 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TE_Information.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/TE_Information.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/WSONInformation.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/WSONInformation.java index 2ee27a563483191e7ae92406552b4afe34dc5095..526d123796a9f7a004fbf3bd3b51dd3805bb89da 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/WSONInformation.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/WSONInformation.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/WSONListener.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/WSONListener.java index 63a2bf5578f9b9417e64f2bf06213d25651fd4b6..c18ddddc374fcb5420bfe141e9625a153c0a4bda 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/WSONListener.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/WSONListener.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterController.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterController.java index c0c1280c215171e80aad638b44e6704ef717567d..4f743addd92077e0cb961cfba852e49435463630 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterController.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterController.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterFloodlight.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterFloodlight.java index 294025834a1bf9ed9115aa91c1a550cceab7ae3f..fe7ba8040834af72d3c3ee51fed3640ac9df1cdf 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterFloodlight.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterFloodlight.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterNOX.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterNOX.java index ff7c81f587e277fed0fe336a95da4acfd8f0b9ec..042ade191d3526f96ff4a32e22a84ea3375dbb8a 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterNOX.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterNOX.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterODL.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterODL.java index fc434fec3521f2ae6be2bc30e092fa5888c0b126..ccb64aa0da1f546a502a0fdd1ad4fc0b8cc612d8 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterODL.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterODL.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterRYU.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterRYU.java index fd4cc07532e821001fa8a05f0cc0aead5be12c9a..971239d2ccfab8273067ae94db798e58f1c3a4a4 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterRYU.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterRYU.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterTREMA.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterTREMA.java index af0edf1fc31bb033b9a05b08a50210bf1798374b..cdeef9d50aac01d700e45790d433c701336b9e95 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterTREMA.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/controllers/TEDUpdaterTREMA.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/AuthInfo.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/AuthInfo.java index fa42dc4aaa28f4ce1102459cc44620e61b2c8e9a..7d2ee017692c4dd31809c0ccae3a3c709fd9b42f 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/AuthInfo.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/AuthInfo.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Bandwidth.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Bandwidth.java index 02ea8ef58ad9271347b4cad83f7172984f6636d7..83e8f8db79d0616d91c8683207565819f031b565 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Bandwidth.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Bandwidth.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/BgpParams.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/BgpParams.java index 4fd0b416238a1ed027ce920875d511e52644fe75..22bfbf11afd9974f0100a8d2faf20bd779600be4 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/BgpParams.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/BgpParams.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/EndPoint.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/EndPoint.java index 6927add9e8788e576ff193673a0d140bf989a53e..b4c286d9fa7094108df8b65e1bf184d8617f5b31 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/EndPoint.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/EndPoint.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/IPNodeParams.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/IPNodeParams.java index 93b8c36f3c8cc2f07cbee2cfd85b0801681173e5..05df6f8df94d3ac5b1ef20e4e72747c254295261 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/IPNodeParams.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/IPNodeParams.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Intf.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Intf.java index 0d1951f75db4ddbce94420d170b3b9c519084e6a..c2a0ce161fb2ca81d3c35459733557e9ae774e7e 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Intf.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Intf.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/IsisParams.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/IsisParams.java index 45cb78a49e0c74d3d19b4bbdb143f946d439af8e..93e231a11645314a134ad5b47a158e1c6155e8fe 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/IsisParams.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/IsisParams.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Link.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Link.java index 60b1033aee6b893affff75a441f83270f26f4507..95cdce152cdd56b6f5304bbed0681ba7be3c5dd1 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Link.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Link.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Location.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Location.java index 1bc793f8788484f5f2672408335b28ec0df74fbe..a74ce9c313ce04aaf0f010b088c1ae0c8a7d79b7 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Location.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Location.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Node.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Node.java index c16ffb8073cfe34648f745a76233fa97534347dd..a189d5f080fa24cbf699d4c2217d27e253b83730 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Node.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Node.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/OspfParams.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/OspfParams.java index 928cd6eba25d67e62b558bcef9c9eb2327632f3f..787bba255d46e6aab02b78877a656423581aacaa 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/OspfParams.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/OspfParams.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Path.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Path.java index 8e9aa2e5b08775533b84c0bbda745d2871364646..71ca0435a7996f85758d3f1f0738b10831a16fde 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Path.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Path.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/PhyLinkParams.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/PhyLinkParams.java index a1f6f73a92ddf7a0db9d7bcec2c345f2cf13022e..56963c1203960ea3ea85d5c9d23e2ac41ef1ce5e 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/PhyLinkParams.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/PhyLinkParams.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/RouterDesc.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/RouterDesc.java index d5f2f5a3a2903ae8f47d845e4285a82da2e9fe52..4cddb18cb62d0c35b095829dacdcd970bb86d041 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/RouterDesc.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/RouterDesc.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/RouterInfoPM.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/RouterInfoPM.java index 4b96fd765fdbb3e984680f732b3a3d297cd0787f..9acf485eb3befc2408989ba092da05007fbb6f0b 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/RouterInfoPM.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/RouterInfoPM.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Service.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Service.java index 0cfabfdef88d936522702fbbd38e84147fd1e9b6..a66305bb25065531c3bc4a32e182c8fb1ee53cba 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Service.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/Service.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/StaticRoutingParams.java b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/StaticRoutingParams.java index 263bb4d6bd52d673cce1217da2478ca648e5b7e1..102d7563f0b88c3d81053ac045b6987e66d4d449 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/StaticRoutingParams.java +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/java/eu/teraflow/tid/tedb/elements/StaticRoutingParams.java @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/proto/grpcService.proto b/src/bgpls_speaker/service/java/netphony-topology/src/main/proto/grpcService.proto index b33516d7b48fba8dba4ee16f520226728e194211..fb439f68373da4afb2ae5870f5c5cde2697680fb 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/proto/grpcService.proto +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/proto/grpcService.proto @@ -1,4 +1,4 @@ -// Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +// Copyright 2022-2026 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. diff --git a/src/bgpls_speaker/service/java/netphony-topology/src/main/sample-config-files/TM_COP_example1/TMConfCOP.xml b/src/bgpls_speaker/service/java/netphony-topology/src/main/sample-config-files/TM_COP_example1/TMConfCOP.xml index e9f26a4cf5529815fbd7db0270428e146699e1cd..f8d235a007640ee7e6dd8f7c1c3bbde12dacf133 100644 --- a/src/bgpls_speaker/service/java/netphony-topology/src/main/sample-config-files/TM_COP_example1/TMConfCOP.xml +++ b/src/bgpls_speaker/service/java/netphony-topology/src/main/sample-config-files/TM_COP_example1/TMConfCOP.xml @@ -1,4 +1,4 @@ - + + + + + 2 + + 2 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + OUTPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D1 + + + + + + 12 + + 12 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + INPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D1 + + + + + + 3 + + 3 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + OUTPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D2 + + + + + + 13 + + 13 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + INPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D2 + + + + + + 4 + + 4 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + OUTPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D2 + + + + + + 14 + + 14 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + INPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D2 + + + + + + + 101 + + 101 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + OUTPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D2 + + + + + + 111 + + 111 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + INPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D2 + + + + + + \ No newline at end of file diff --git a/src/tests/ofc25/node-agents-config/platform_r2.xml b/src/tests/ofc25/node-agents-config/platform_r2.xml new file mode 100644 index 0000000000000000000000000000000000000000..ac85062193ffcac2decd16e1a9bc722f84965b21 --- /dev/null +++ b/src/tests/ofc25/node-agents-config/platform_r2.xml @@ -0,0 +1,253 @@ + + + + + + 2 + + 2 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + OUTPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D1 + + + + + + 12 + + 12 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + INPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D1 + + + + + + 3 + + 3 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + OUTPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D2 + + + + + + 13 + + 13 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + INPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D2 + + + + + + 4 + + 4 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + OUTPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D2 + + + + + + 14 + + 14 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + INPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D2 + + + + + + + 101 + + 101 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + OUTPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D2 + + + + + + 111 + + 111 + + + + MG_ON_PORT_TYPE + + MG_ON_PORT_TYPE + MG_ON_OPTICAL_PORT_WAVEBAND + + + + MG_ON_PORT_DIRECTION + + MG_ON_PORT_DIRECTION + INPUT + + + + MG_ON_PORT_DEGREE + + MG_ON_PORT_DEGREE + D2 + + + + + + \ No newline at end of file diff --git a/src/tests/ofc25/node-agents-config/platform_t1.xml b/src/tests/ofc25/node-agents-config/platform_t1.xml new file mode 100644 index 0000000000000000000000000000000000000000..2cd6635d94759ff345760ebc1dcda854e9c06a7f --- /dev/null +++ b/src/tests/ofc25/node-agents-config/platform_t1.xml @@ -0,0 +1,311 @@ + + + + + + device + + device + + + MellanoxSwitch + SSSA-CNIT + 1.0.0 + 1.0.0 + 1.0.0 + 610610 + typex:OPERATING_SYSTEM + + + + channel-1 + + channel-1 + + + channel-1 + typex:OPTICAL_CHANNEL + + + + 191600000 + 100 + 0 + transceiver-1 + + + 191600000 + 0 + 0 + transceiver-1 + 1 + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + + + + transceiver-1 + + transceiver-1 + + + transceiver-1 + typex:TRANSCEIVER + + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + Cisco + 400zr-QSFP-DD + 01 + 1567321 + + + + 1 + + 1 + channel-1 + + + + + + + + port-1 + + port-1 + + + port-1 + typex:PORT + + + + channel-1 + + channel-1 + + + channel-1 + + + + + + onos-index + + onos-index + 4 + + + onos-index + 4 + + + + odtn-port-type + + odtn-port-type + line + + + odtn-port-type + line + + + + + + + + + + + + 1 + + 1 + Logical channel 1 + DISABLED + type:PROT_OTN + NONE + + + 1 + Logical channel 1 + DISABLED + type:PROT_OTN + NONE + UP + + + + transceiver-1 + + + transceiver-1 + + + + + test1 + test1 + + + test1 + test1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + + + + 1 + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-1 + + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-1 + + + + + + + + 1 + + 1 + FEC1 + Ericsson + + + + 2 + + 2 + FEC2 + Ericsson + + + + + diff --git a/src/tests/ofc25/node-agents-config/platform_t2.xml b/src/tests/ofc25/node-agents-config/platform_t2.xml new file mode 100644 index 0000000000000000000000000000000000000000..8eb8e70656d63bbbfa05e55e3f7fd7ce80ec3539 --- /dev/null +++ b/src/tests/ofc25/node-agents-config/platform_t2.xml @@ -0,0 +1,311 @@ + + + + + + device + + device + + + MellanoxSwitch + SSSA-CNIT + 1.0.0 + 1.0.0 + 1.0.0 + 610610 + typex:OPERATING_SYSTEM + + + + channel-6 + + channel-6 + + + channel-6 + typex:OPTICAL_CHANNEL + + + + 191600000 + 100 + 0 + transceiver-6 + + + 191600000 + 0 + 0 + transceiver-6 + 1 + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + + + + transceiver-6 + + transceiver-6 + + + transceiver-6 + typex:TRANSCEIVER + + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + Cisco + 400zr-QSFP-DD + 01 + 1567321 + + + + 1 + + 1 + channel-6 + + + + + + + + port-6 + + port-6 + + + port-6 + typex:PORT + + + + channel-6 + + channel-6 + + + channel-6 + + + + + + onos-index + + onos-index + 4 + + + onos-index + 4 + + + + odtn-port-type + + odtn-port-type + line + + + odtn-port-type + line + + + + + + + + + + + + 4 + + 4 + Logical channel 4 + DISABLED + type:PROT_OTN + NONE + + + 4 + Logical channel 4 + DISABLED + type:PROT_OTN + NONE + UP + + + + transceiver-6 + + + transceiver-6 + + + + + test1 + test1 + + + test1 + test1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + + + + 1 + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-6 + + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-6 + + + + + + + + 1 + + 1 + FEC1 + Ericsson + + + + 2 + + 2 + FEC2 + Ericsson + + + + + diff --git a/src/tests/ofc25/node-agents-config/startNetconfAgent-mg-on.sh b/src/tests/ofc25/node-agents-config/startNetconfAgent-mg-on.sh new file mode 100755 index 0000000000000000000000000000000000000000..4ae137afa08b4d9e5d8272fccbcc78e4d262acae --- /dev/null +++ b/src/tests/ofc25/node-agents-config/startNetconfAgent-mg-on.sh @@ -0,0 +1,28 @@ +#!/bin/bash +# Copyright 2022-2026 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. + +echo 'Cleaning...' +make clean + +echo 'Rebuilding...' +make all + +echo 'Initializing database...' +cp platform.xml confd-cdb/ + +echo 'Starting ConfD...' +make start2 + +echo 'ConfD Ready!!' diff --git a/src/tests/ofc25/node-agents-config/startNetconfAgent-tp.sh b/src/tests/ofc25/node-agents-config/startNetconfAgent-tp.sh new file mode 100755 index 0000000000000000000000000000000000000000..217a29b9de45792afe3687dd1245fc14845e04fb --- /dev/null +++ b/src/tests/ofc25/node-agents-config/startNetconfAgent-tp.sh @@ -0,0 +1,30 @@ +#!/bin/bash +# Copyright 2022-2026 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. + +echo 'Cleaning...' +make clean + +echo 'Rebuilding...' +make all + +echo 'Initializing database...' +cp platform.xml confd-cdb/ +cp interfaces.xml confd-cdb/ +cp bgp.xml confd-cdb/ + +echo 'Starting ConfD...' +make start2 + +echo 'ConfD Ready!!' diff --git a/src/tests/ofc25/node-agents-config/transponders_x4.xml b/src/tests/ofc25/node-agents-config/transponders_x4.xml new file mode 100644 index 0000000000000000000000000000000000000000..09136dc4c22323a60fe58302c618fc0f05e4bbf9 --- /dev/null +++ b/src/tests/ofc25/node-agents-config/transponders_x4.xml @@ -0,0 +1,1055 @@ + + + + + + device + + device + + + MellanoxSwitch + SSSA-CNIT + 1.0.0 + 1.0.0 + 1.0.0 + 610610 + typex:OPERATING_SYSTEM + + + + channel-1 + + channel-1 + + + channel-1 + typex:OPTICAL_CHANNEL + + + + 191600000 + 100 + 0 + transceiver-1 + + + 191600000 + 0 + 0 + transceiver-1 + 1 + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + + + + channel-2 + + channel-2 + + + channel-2 + typex:OPTICAL_CHANNEL + + + + 191600000 + 100 + 0 + transceiver-2 + + + 191600000 + 0 + 0 + transceiver-2 + 1 + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + + + + channel-3 + + channel-3 + + + channel-3 + typex:OPTICAL_CHANNEL + + + + 191600000 + 100 + 0 + transceiver-3 + + + 191600000 + 0 + 0 + transceiver-3 + 1 + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + + + + channel-4 + + channel-4 + + + channel-4 + typex:OPTICAL_CHANNEL + + + + 191600000 + 100 + 0 + transceiver-4 + + + 191600000 + 0 + 0 + transceiver-4 + 1 + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + + + + transceiver-1 + + transceiver-1 + + + transceiver-1 + typex:TRANSCEIVER + + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + Cisco + 400zr-QSFP-DD + 01 + 1567321 + + + + 1 + + 1 + channel-1 + + + + + + + transceiver-2 + + transceiver-2 + + + transceiver-2 + typex:TRANSCEIVER + + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + Cisco + 400zr-QSFP-DD + 01 + 1567321 + + + + 1 + + 1 + channel-2 + + + + + + + transceiver-3 + + transceiver-3 + + + transceiver-3 + typex:TRANSCEIVER + + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + Cisco + 400zr-QSFP-DD + 01 + 1567321 + + + + 1 + + 1 + channel-3 + + + + + + + + transceiver-4 + + transceiver-4 + + + transceiver-4 + typex:TRANSCEIVER + + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + Cisco + 400zr-QSFP-DD + 01 + 1567321 + + + + 1 + + 1 + channel-4 + + + + + + + port-1 + + port-1 + + + port-1 + typex:PORT + + + + channel-1 + + channel-1 + + + channel-1 + + + + + + onos-index + + onos-index + 1 + + + onos-index + 1 + + + + odtn-port-type + + odtn-port-type + line + + + odtn-port-type + line + + + + + + port-2 + + port-2 + + + port-2 + typex:PORT + + + + channel-2 + + channel-2 + + + channel-2 + + + + + + onos-index + + onos-index + 2 + + + onos-index + 2 + + + + odtn-port-type + + odtn-port-type + line + + + odtn-port-type + line + + + + + + port-3 + + port-3 + + + port-3 + typex:PORT + + + + channel-3 + + channel-3 + + + channel-3 + + + + + + onos-index + + onos-index + 3 + + + onos-index + 3 + + + + odtn-port-type + + odtn-port-type + line + + + odtn-port-type + line + + + + + + port-4 + + port-4 + + + port-4 + typex:PORT + + + + channel-4 + + channel-4 + + + channel-4 + + + + + + onos-index + + onos-index + 4 + + + onos-index + 4 + + + + odtn-port-type + + odtn-port-type + line + + + odtn-port-type + line + + + + + + + + + + + 1 + + 1 + Logical channel 1 + DISABLED + type:PROT_OTN + NONE + + + 1 + Logical channel 1 + DISABLED + type:PROT_OTN + NONE + UP + + + + transceiver-1 + + + transceiver-1 + + + + + test1 + test1 + + + test1 + test1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + + + + 1 + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-1 + + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-1 + + + + + + + + 2 + + 2 + Logical channel 2 + DISABLED + type:PROT_OTN + NONE + + + 2 + Logical channel 2 + DISABLED + type:PROT_OTN + NONE + UP + + + + transceiver-2 + + + transceiver-2 + + + + + test1 + test1 + + + test1 + test1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + + + + 1 + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-2 + + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-2 + + + + + + + + 3 + + 3 + Logical channel 3 + DISABLED + type:PROT_OTN + NONE + + + 3 + Logical channel 3 + DISABLED + type:PROT_OTN + NONE + UP + + + + transceiver-3 + + + transceiver-3 + + + + + test1 + test1 + + + test1 + test1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + + + + 1 + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-3 + + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-3 + + + + + + + + 4 + + 4 + Logical channel 4 + DISABLED + type:PROT_OTN + NONE + + + 4 + Logical channel 4 + DISABLED + type:PROT_OTN + NONE + UP + + + + transceiver-4 + + + transceiver-4 + + + + + test1 + test1 + + + test1 + test1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + + + + 1 + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-4 + + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-4 + + + + + + + + 1 + + 1 + FEC1 + Ericsson + + + + 2 + + 2 + FEC2 + Ericsson + + + + + + diff --git a/src/tests/ofc25/node-agents-config/transponders_x4_2.xml b/src/tests/ofc25/node-agents-config/transponders_x4_2.xml new file mode 100644 index 0000000000000000000000000000000000000000..41aa190a3554a339841b064a581b289770fcf805 --- /dev/null +++ b/src/tests/ofc25/node-agents-config/transponders_x4_2.xml @@ -0,0 +1,1055 @@ + + + + + + device + + device + + + MellanoxSwitch + SSSA-CNIT + 1.0.0 + 1.0.0 + 1.0.0 + 610610 + typex:OPERATING_SYSTEM + + + + channel-5 + + channel-5 + + + channel-5 + typex:OPTICAL_CHANNEL + + + + 191600000 + 100 + 0 + transceiver-5 + + + 191600000 + 0 + 0 + transceiver-5 + 1 + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + + + + channel-6 + + channel-6 + + + channel-6 + typex:OPTICAL_CHANNEL + + + + 191600000 + 100 + 0 + transceiver-6 + + + 191600000 + 0 + 0 + transceiver-6 + 1 + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + + + + channel-7 + + channel-7 + + + channel-7 + typex:OPTICAL_CHANNEL + + + + 191600000 + 100 + 0 + transceiver-7 + + + 191600000 + 0 + 0 + transceiver-7 + 1 + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + + + + channel-8 + + channel-8 + + + channel-8 + typex:OPTICAL_CHANNEL + + + + 191600000 + 100 + 0 + transceiver-8 + + + 191600000 + 0 + 0 + transceiver-8 + 1 + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + 0 + 0 + 0 + + + + + + transceiver-5 + + transceiver-5 + + + transceiver-5 + typex:TRANSCEIVER + + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + Cisco + 400zr-QSFP-DD + 01 + 1567321 + + + + 1 + + 1 + channel-5 + + + + + + + transceiver-6 + + transceiver-6 + + + transceiver-6 + typex:TRANSCEIVER + + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + Cisco + 400zr-QSFP-DD + 01 + 1567321 + + + + 1 + + 1 + channel-6 + + + + + + + transceiver-7 + + transceiver-7 + + + transceiver-7 + typex:TRANSCEIVER + + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + Cisco + 400zr-QSFP-DD + 01 + 1567321 + + + + 1 + + 1 + channel-7 + + + + + + + + transceiver-8 + + transceiver-8 + + + transceiver-8 + typex:TRANSCEIVER + + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + + + true + typex:QSFP56_DD_TYPE1 + typex:ETH_400GBASE_ZR + typex:FEC_AUTO + typex:TYPE_DIGITAL_COHERENT_OPTIC + Cisco + 400zr-QSFP-DD + 01 + 1567321 + + + + 1 + + 1 + channel-8 + + + + + + + port-5 + + port-5 + + + port-5 + typex:PORT + + + + channel-5 + + channel-5 + + + channel-5 + + + + + + onos-index + + onos-index + 5 + + + onos-index + 5 + + + + odtn-port-type + + odtn-port-type + line + + + odtn-port-type + line + + + + + + port-6 + + port-6 + + + port-6 + typex:PORT + + + + channel-6 + + channel-6 + + + channel-6 + + + + + + onos-index + + onos-index + 6 + + + onos-index + 6 + + + + odtn-port-type + + odtn-port-type + line + + + odtn-port-type + line + + + + + + port-7 + + port-7 + + + port-7 + typex:PORT + + + + channel-7 + + channel-7 + + + channel-7 + + + + + + onos-index + + onos-index + 7 + + + onos-index + 7 + + + + odtn-port-type + + odtn-port-type + line + + + odtn-port-type + line + + + + + + port-8 + + port-8 + + + port-8 + typex:PORT + + + + channel-8 + + channel-8 + + + channel-8 + + + + + + onos-index + + onos-index + 8 + + + onos-index + 8 + + + + odtn-port-type + + odtn-port-type + line + + + odtn-port-type + line + + + + + + + + + + + 5 + + 5 + Logical channel 5 + DISABLED + type:PROT_OTN + NONE + + + 5 + Logical channel 5 + DISABLED + type:PROT_OTN + NONE + UP + + + + transceiver-5 + + + transceiver-5 + + + + + test1 + test1 + + + test1 + test1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + + + + 1 + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-5 + + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-5 + + + + + + + + 6 + + 6 + Logical channel 6 + DISABLED + type:PROT_OTN + NONE + + + 6 + Logical channel 6 + DISABLED + type:PROT_OTN + NONE + UP + + + + transceiver-6 + + + transceiver-6 + + + + + test1 + test1 + + + test1 + test1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + + + + 1 + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-6 + + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-6 + + + + + + + + 7 + + 7 + Logical channel 7 + DISABLED + type:PROT_OTN + NONE + + + 7 + Logical channel 7 + DISABLED + type:PROT_OTN + NONE + UP + + + + transceiver-7 + + + transceiver-7 + + + + + test1 + test1 + + + test1 + test1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + + + + 1 + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-7 + + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-7 + + + + + + + + 8 + + 8 + Logical channel 8 + DISABLED + type:PROT_OTN + NONE + + + 8 + Logical channel 8 + DISABLED + type:PROT_OTN + NONE + UP + + + + transceiver-8 + + + transceiver-8 + + + + + test1 + test1 + + + test1 + test1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + 0.0 + 0.0 + 0.0 + 0.0 + 0 + + + + + + 1 + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-8 + + + 1 + Optical channel assigned 100 + 100 + OPTICAL_CHANNEL + channel-8 + + + + + + + + 1 + + 1 + FEC1 + Ericsson + + + + 2 + + 2 + FEC2 + Ericsson + + + + + + diff --git a/src/tests/ofc25/requirements.in b/src/tests/ofc25/requirements.in new file mode 100644 index 0000000000000000000000000000000000000000..2d92213be0e0816c9b9be9fbdae81263f65e8fee --- /dev/null +++ b/src/tests/ofc25/requirements.in @@ -0,0 +1,15 @@ +# Copyright 2022-2026 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. + +requests==2.27.* diff --git a/src/tests/ofc25/run_test.sh b/src/tests/ofc25/run_test.sh new file mode 100755 index 0000000000000000000000000000000000000000..1c8c8be704f048a0f8ada1ca2f05488f007b837c --- /dev/null +++ b/src/tests/ofc25/run_test.sh @@ -0,0 +1,124 @@ +#!/bin/bash +# Copyright 2022-2026 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 +echo "Running OFC 25 tests from $PROJECTDIR/src ..." + +# Determine which test suite to run based on argument +TEST_SUITE=${1:-"all"} + +case "$TEST_SUITE" in + "all") + echo "=== Running Full Test Suite ===" + + echo "--- Running Optical Layer Initialization ---" + pytest --verbose tests/ofc25/tests/test_functional_bootstrap.py \ + --tfs-runtime-script=tfs_runtime_env_vars_opt.sh \ + --tfs-profile=opt \ + --tfs-topology-descriptor=topology_opt.json + echo "Waiting 5 seconds for initialization ..." + sleep 5 + + echo "--- Running IP/Packet Layer Initialization ---" + pytest --verbose tests/ofc25/tests/test_functional_bootstrap.py \ + --tfs-runtime-script=tfs_runtime_env_vars_ip.sh \ + --tfs-profile=ip \ + --tfs-topology-descriptor=topology_ip.json + echo "Waiting 5 seconds for initialization ..." + sleep 5 + + echo "--- Running E2E Layer Initialization ---" + pytest --verbose tests/ofc25/tests/test_functional_bootstrap.py \ + --tfs-runtime-script=tfs_runtime_env_vars_e2e.sh \ + --tfs-profile=e2e \ + --tfs-topology-descriptor=topology_e2e.json + echo "Waiting 5 seconds for initialization ..." + sleep 5 + + echo "--- Running Service Creation/Deletion ---" + pytest --verbose tests/ofc25/tests/test_functional_create_vlinks.py + sleep 5 + pytest --verbose tests/ofc25/tests/test_functional_delete_vlinks.py + + echo "--- Running Cleanup In Reverse Order ---" + pytest --verbose tests/ofc25/tests/test_functional_cleanup.py \ + --tfs-runtime-script=tfs_runtime_env_vars_e2e.sh \ + --tfs-profile=e2e \ + --tfs-topology-descriptor=topology_e2e.json + pytest --verbose tests/ofc25/tests/test_functional_cleanup.py \ + --tfs-runtime-script=tfs_runtime_env_vars_ip.sh \ + --tfs-profile=ip \ + --tfs-topology-descriptor=topology_ip.json + pytest --verbose tests/ofc25/tests/test_functional_cleanup.py \ + --tfs-runtime-script=tfs_runtime_env_vars_opt.sh \ + --tfs-profile=opt \ + --tfs-topology-descriptor=topology_opt.json + ;; + + "init_opt") + echo "=== Running Optical Layer Initialization ===" + pytest --verbose tests/ofc25/tests/test_functional_cleanup.py \ + --tfs-runtime-script=tfs_runtime_env_vars_opt.sh \ + --tfs-profile=opt \ + --tfs-topology-descriptor=topology_opt.json + pytest --verbose tests/ofc25/tests/test_functional_bootstrap.py \ + --tfs-runtime-script=tfs_runtime_env_vars_opt.sh \ + --tfs-profile=opt \ + --tfs-topology-descriptor=topology_opt.json + ;; + + "init_ip") + echo "=== Running IP/Packet Layer Initialization ===" + pytest --verbose tests/ofc25/tests/test_functional_cleanup.py \ + --tfs-runtime-script=tfs_runtime_env_vars_ip.sh \ + --tfs-profile=ip \ + --tfs-topology-descriptor=topology_ip.json + pytest --verbose tests/ofc25/tests/test_functional_bootstrap.py \ + --tfs-runtime-script=tfs_runtime_env_vars_ip.sh \ + --tfs-profile=ip \ + --tfs-topology-descriptor=topology_ip.json + ;; + + "init_e2e") + echo "=== Running E2E Layer Initialization ===" + pytest --verbose tests/ofc25/tests/test_functional_cleanup.py \ + --tfs-runtime-script=tfs_runtime_env_vars_e2e.sh \ + --tfs-profile=e2e \ + --tfs-topology-descriptor=topology_e2e.json + pytest --verbose tests/ofc25/tests/test_functional_bootstrap.py \ + --tfs-runtime-script=tfs_runtime_env_vars_e2e.sh \ + --tfs-profile=e2e \ + --tfs-topology-descriptor=topology_e2e.json + ;; + + "service") + echo "=== Running Service Creation/Deletion ===" + pytest --verbose tests/ofc25/tests/test_functional_create_vlinks.py + sleep 5 + pytest --verbose tests/ofc25/tests/test_functional_delete_vlinks.py + ;; + + *) + echo "Usage: $0 [init_opt|init_ip|init_e2e|service|all]" + echo " init_opt - Run optical layer initialization only" + echo " init_ip - Run IP/packet layer initialization only" + echo " init_e2e - Run E2E orchestration layer initialization only" + echo " service - Run service creation/deletion only" + echo " all - Run complete test suite (default)" + exit 1 + ;; +esac diff --git a/src/tests/ofc25/separate_vms/deploy_e2e.sh b/src/tests/ofc25/separate_vms/deploy_e2e.sh index 0dfc1589c2b13e0ff4a099ba8f81f6654d37522d..a13fa8234dc304962a83e6ba41a376612ffb33ba 100755 --- a/src/tests/ofc25/separate_vms/deploy_e2e.sh +++ b/src/tests/ofc25/separate_vms/deploy_e2e.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ofc25/separate_vms/deploy_opt.sh b/src/tests/ofc25/separate_vms/deploy_opt.sh index 0bf224f43854fd156fbb3a6f6a99f87bdbb74da2..dd3f5355d1b6ba6440daf59a61b0850089f939f1 100755 --- a/src/tests/ofc25/separate_vms/deploy_opt.sh +++ b/src/tests/ofc25/separate_vms/deploy_opt.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ofc25/separate_vms/deploy_pkt.sh b/src/tests/ofc25/separate_vms/deploy_pkt.sh index afff178fc50e0f1cf52b7e52b6165831da7d949e..f0a1f502a6c095acb44f3ea48bb9d2bcd5fca8ea 100755 --- a/src/tests/ofc25/separate_vms/deploy_pkt.sh +++ b/src/tests/ofc25/separate_vms/deploy_pkt.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ofc25/separate_vms/deploy_specs_e2e.sh b/src/tests/ofc25/separate_vms/deploy_specs_e2e.sh index 1b47cdabdec3e06150dcd401fe0c73983785b3a5..770015780c53f9e90e5ca27ba22af732516ca754 100755 --- a/src/tests/ofc25/separate_vms/deploy_specs_e2e.sh +++ b/src/tests/ofc25/separate_vms/deploy_specs_e2e.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ofc25/separate_vms/deploy_specs_opt.sh b/src/tests/ofc25/separate_vms/deploy_specs_opt.sh index ef6d5af1d7ea0be338e3fc5e6f47b4b29e3b820c..84a25abf421fc6aa23ae30791094aea1baf65862 100755 --- a/src/tests/ofc25/separate_vms/deploy_specs_opt.sh +++ b/src/tests/ofc25/separate_vms/deploy_specs_opt.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ofc25/separate_vms/deploy_specs_pkt.sh b/src/tests/ofc25/separate_vms/deploy_specs_pkt.sh index 455b1ea5343b9357f1fec519a03037512e910bf3..3438cb1b7f97aa7366502110e8b3bb9cfa3426c6 100755 --- a/src/tests/ofc25/separate_vms/deploy_specs_pkt.sh +++ b/src/tests/ofc25/separate_vms/deploy_specs_pkt.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ofc25/show_deploy.sh b/src/tests/ofc25/show_deploy.sh index 6851a7f9022c495b86e42e4bc1f7851144e2aa7d..3f6a5efdf4009404ab9072cf9fc6074cfb49dc31 100755 --- a/src/tests/ofc25/show_deploy.sh +++ b/src/tests/ofc25/show_deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ofc25/tests/Fixtures.py b/src/tests/ofc25/tests/Fixtures.py new file mode 100644 index 0000000000000000000000000000000000000000..e798a0fefa45477c2548e34df1f7c781e726a549 --- /dev/null +++ b/src/tests/ofc25/tests/Fixtures.py @@ -0,0 +1,154 @@ +# Copyright 2022-2026 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 re +from dataclasses import dataclass +from pathlib import Path +from typing import Dict, Mapping, Optional + +import pytest + +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from service.client.ServiceClient import ServiceClient +from vnt_manager.client.VNTManagerClient import VNTManagerClient + +PROFILE_OPT = 'opt' +PROFILE_IP = 'ip' +PROFILE_E2E = 'e2e' + +RUNTIME_ENV_DIR = Path('/var/teraflow') +PROFILE_FILENAMES = { + PROFILE_OPT: 'tfs_runtime_env_vars_opt.sh', + PROFILE_IP: 'tfs_runtime_env_vars_ip.sh', + PROFILE_E2E: 'tfs_runtime_env_vars_e2e.sh', +} +EXPORT_REGEX = re.compile(r'^export\s+([A-Za-z_][A-Za-z0-9_]*)=(.*)$') + + +@dataclass(frozen=True) +class ServiceEndpoint: + host: str + port: int + + +@dataclass(frozen=True) +class TfsProfile: + name: str + env_vars: Mapping[str, str] + context: ServiceEndpoint + device: ServiceEndpoint + service: ServiceEndpoint + vnt_manager: Optional[ServiceEndpoint] + + +@dataclass(frozen=True) +class TfsClientBundle: + context: ContextClient + device: DeviceClient + service: ServiceClient + vnt_manager: Optional[VNTManagerClient] + env_vars: Mapping[str, str] + + +def _parse_runtime_env_file(filepath: Path) -> Dict[str, str]: + env_vars: Dict[str, str] = {} + for raw_line in filepath.read_text(encoding='utf-8').splitlines(): + line = raw_line.strip() + if not line or line.startswith('#'): + continue + match = EXPORT_REGEX.match(line) + if match is None: + continue + key, value = match.groups() + value = value.strip() + if (value.startswith('"') and value.endswith('"')) or \ + (value.startswith("'") and value.endswith("'")): + value = value[1:-1] + env_vars[key] = value + return env_vars + + +def _read_service_endpoint(env_vars: Mapping[str, str], service_name: str) -> ServiceEndpoint: + host_key = '{:s}_SERVICE_HOST'.format(service_name) + port_key = '{:s}_SERVICE_PORT_GRPC'.format(service_name) + + if host_key not in env_vars: + raise KeyError('Missing key "{:s}" in runtime env vars'.format(host_key)) + if port_key not in env_vars: + raise KeyError('Missing key "{:s}" in runtime env vars'.format(port_key)) + + return ServiceEndpoint(host=env_vars[host_key], port=int(env_vars[port_key])) + + +def _read_optional_service_endpoint(env_vars: Mapping[str, str], service_name: str) -> Optional[ServiceEndpoint]: + host_key = '{:s}_SERVICE_HOST'.format(service_name) + port_key = '{:s}_SERVICE_PORT_GRPC'.format(service_name) + if host_key not in env_vars or port_key not in env_vars: + return None + return ServiceEndpoint(host=env_vars[host_key], port=int(env_vars[port_key])) + + +def _load_tfs_profile(profile_name: str) -> TfsProfile: + filepath = RUNTIME_ENV_DIR / PROFILE_FILENAMES[profile_name] + if not filepath.exists(): + raise FileNotFoundError('Runtime env file not found: {:s}'.format(str(filepath))) + + env_vars = _parse_runtime_env_file(filepath) + return TfsProfile( + name=profile_name, + env_vars=env_vars, + context=_read_service_endpoint(env_vars, 'CONTEXTSERVICE'), + device=_read_service_endpoint(env_vars, 'DEVICESERVICE'), + service=_read_service_endpoint(env_vars, 'SERVICESERVICE'), + vnt_manager=_read_optional_service_endpoint(env_vars, 'VNT_MANAGERSERVICE'), + ) + + +@pytest.fixture(scope='session') +def tfs_profiles() -> Dict[str, TfsProfile]: + profiles: Dict[str, TfsProfile] = {} + for profile_name in [PROFILE_OPT, PROFILE_IP, PROFILE_E2E]: + filepath = RUNTIME_ENV_DIR / PROFILE_FILENAMES[profile_name] + if not filepath.exists(): + continue + profiles[profile_name] = _load_tfs_profile(profile_name) + if len(profiles) == 0: + raise FileNotFoundError('No runtime env files found in {:s}'.format(str(RUNTIME_ENV_DIR))) + return profiles + + +@pytest.fixture(scope='session') +def tfs_clients(tfs_profiles: Dict[str, TfsProfile]) -> Dict[str, TfsClientBundle]: + clients: Dict[str, TfsClientBundle] = {} + for profile_name, profile in tfs_profiles.items(): + clients[profile_name] = TfsClientBundle( + context=ContextClient(profile.context.host, profile.context.port), + device=DeviceClient(profile.device.host, profile.device.port), + service=ServiceClient(profile.service.host, profile.service.port), + vnt_manager=( + VNTManagerClient(profile.vnt_manager.host, profile.vnt_manager.port) + if profile.vnt_manager is not None else None + ), + env_vars=profile.env_vars, + ) + + yield clients + + for bundle in clients.values(): + bundle.context.close() + bundle.device.close() + bundle.service.close() + if bundle.vnt_manager is not None: + bundle.vnt_manager.close() diff --git a/src/tests/ofc25/tests/Helper.py b/src/tests/ofc25/tests/Helper.py new file mode 100644 index 0000000000000000000000000000000000000000..99f51849877812306a3834aae54e0937067b56a2 --- /dev/null +++ b/src/tests/ofc25/tests/Helper.py @@ -0,0 +1,400 @@ +# Copyright 2022-2026 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 os +import time +from typing import Dict, List, Optional, Set, Tuple + +from common.Constants import DEFAULT_CONTEXT_NAME +from common.proto.context_pb2 import ContextId, Device, Empty, Link, LinkTypeEnum, ServiceStatusEnum, ServiceTypeEnum +from common.tools.grpc.Tools import grpc_message_list_to_json_string, grpc_message_to_json, grpc_message_to_json_string +from common.tools.object_factory.Context import json_context_id + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)) + +VIRTUAL_LINK_DESCRIPTORS = [ + ('virtual_link_01.json', 'IP1/PORT-xe1==IP2/PORT-xe1'), + ('virtual_link_02.json', 'IP1/PORT-xe2==IP2/PORT-xe2'), + ('virtual_link_03.json', 'IP1/PORT-xe3==IP2/PORT-xe3'), +] +DESCRIPTORS_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'descriptors') + + +def is_imported_device(device: Device) -> bool: + return device.HasField('controller_id') and bool(device.controller_id.device_uuid.uuid) + + +def split_imported_devices(devices: List[Device]) -> Tuple[List[Device], List[Device]]: + imported_devices = [device for device in devices if is_imported_device(device)] + local_devices = [device for device in devices if not is_imported_device(device)] + return local_devices, imported_devices + + +def log_device_inventory(context_client, profile_name: str, log_prefix: str = 'Device inventory') -> Tuple[List[Device], List[Device]]: + response = context_client.ListDevices(Empty()) + local_devices, imported_devices = split_imported_devices(response.devices) + + LOGGER.info( + '[%s] %s: total=%d local=%d imported=%d', + profile_name, + log_prefix, + len(response.devices), + len(local_devices), + len(imported_devices), + ) + LOGGER.info('[%s] Local devices: %s', profile_name, grpc_message_list_to_json_string(local_devices)) + LOGGER.info('[%s] Imported devices: %s', profile_name, grpc_message_list_to_json_string(imported_devices)) + return local_devices, imported_devices + + +def split_descriptor_links( + links: List[Link], descriptor_link_aliases: Set[str] +) -> Tuple[List[Link], List[Link], List[Link]]: + descriptor_links = [] + management_links = [] + imported_links = [] + + for link in links: + runtime_aliases = {link.link_id.link_uuid.uuid} + if link.name: + runtime_aliases.add(link.name) + + if runtime_aliases.intersection(descriptor_link_aliases): + descriptor_links.append(link) + elif _is_management_link(link): + management_links.append(link) + else: + imported_links.append(link) + + return descriptor_links, management_links, imported_links + + +def log_link_inventory(context_client, descriptor_loader, profile_name: str) -> Tuple[List[Link], List[Link], List[Link]]: + response = context_client.ListLinks(Empty()) + descriptor_link_aliases = set() + for link in descriptor_loader.links: + link_uuid = link.get('link_id', {}).get('link_uuid', {}).get('uuid') + if link_uuid: + descriptor_link_aliases.add(link_uuid) + link_name = link.get('name') + if link_name: + descriptor_link_aliases.add(link_name) + + descriptor_links, management_links, imported_links = split_descriptor_links( + response.links, descriptor_link_aliases + ) + + LOGGER.info( + '[%s] Descriptor validation link inventory: total=%d descriptor=%d management=%d imported=%d', + profile_name, + len(response.links), + len(descriptor_links), + len(management_links), + len(imported_links), + ) + LOGGER.info('[%s] Descriptor links: %s', profile_name, grpc_message_list_to_json_string(descriptor_links)) + LOGGER.info('[%s] Management links: %s', profile_name, grpc_message_list_to_json_string(management_links)) + LOGGER.info('[%s] Imported links: %s', profile_name, grpc_message_list_to_json_string(imported_links)) + return descriptor_links, management_links, imported_links + + +def _is_management_link(link: Link) -> bool: + if link.link_type == LinkTypeEnum.LINKTYPE_MANAGEMENT: + return True + + if 'mgmt' in link.name.lower(): + return True + + for endpoint_id in link.link_endpoint_ids: + if 'mgmt' in endpoint_id.endpoint_uuid.uuid.lower(): + return True + + return False + + +def validate_descriptor_state(context_client, descriptor_loader, profile_name: str) -> None: + contexts = context_client.ListContexts(Empty()) + assert len(contexts.contexts) == descriptor_loader.num_contexts + + for context_uuid, num_topologies in descriptor_loader.num_topologies.items(): + response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid))) + assert len(response.topologies) == num_topologies + + local_devices, imported_devices = log_device_inventory( + context_client, profile_name, log_prefix='Descriptor validation device inventory' + ) + assert len(local_devices) == descriptor_loader.num_devices + if imported_devices: + LOGGER.info( + '[%s] Ignoring %d imported devices for descriptor validation because they are learned via controllers', + profile_name, + len(imported_devices), + ) + + descriptor_links, management_links, imported_links = log_link_inventory( + context_client, descriptor_loader, profile_name + ) + assert len(descriptor_links) == descriptor_loader.num_links + if management_links: + LOGGER.info( + '[%s] Found %d management links auto-added during device import', + profile_name, + len(management_links), + ) + if imported_links: + LOGGER.info( + '[%s] Ignoring %d imported non-descriptor links during descriptor validation', + profile_name, + len(imported_links), + ) + + response = context_client.GetOpticalLinkList(Empty()) + assert len(response.optical_links) == descriptor_loader.num_optical_links + + for context_uuid, num_services in descriptor_loader.num_services.items(): + response = context_client.ListServices(ContextId(**json_context_id(context_uuid))) + assert len(response.services) == num_services + + for context_uuid, num_slices in descriptor_loader.num_slices.items(): + response = context_client.ListSlices(ContextId(**json_context_id(context_uuid))) + assert len(response.slices) == num_slices + + +def list_active_optical_services(context_client) -> List: + response = context_client.ListServices(ADMIN_CONTEXT_ID) + LOGGER.info('Services[%d] = %s', len(response.services), grpc_message_to_json_string(response)) + + active_optical_services = [] + for service in response.services: + if service.service_type != ServiceTypeEnum.SERVICETYPE_OPTICAL_CONNECTIVITY: + continue + if service.service_status.service_status != ServiceStatusEnum.SERVICESTATUS_ACTIVE: + continue + active_optical_services.append(service) + return active_optical_services + + +def count_service_connections(context_client, service) -> int: + response = context_client.ListConnections(service.service_id) + LOGGER.info( + 'ServiceId[%s] => Connections[%d] = %s', + grpc_message_to_json_string(service.service_id), + len(response.connections), + grpc_message_to_json_string(response), + ) + return len(response.connections) + + +def describe_services(context_client, profile_name: str) -> str: + response = context_client.ListServices(ADMIN_CONTEXT_ID) + services = [] + for service in response.services: + service_json = grpc_message_to_json(service) + status_value = service.service_status.service_status + service_json['service_status_name'] = ServiceStatusEnum.Name(status_value) + try: + service_json['num_connections'] = count_service_connections(context_client, service) + except Exception as exc: # pylint: disable=broad-except + service_json['num_connections_error'] = str(exc) + services.append(service_json) + LOGGER.info('[%s] Service snapshot: %s', profile_name, str(services)) + return str(services) + + +def get_virtual_link_identifiers(context_client) -> Tuple[Set[str], Set[str]]: + response = context_client.ListLinks(Empty()) + virtual_link_uuids = set() + virtual_link_names = set() + for link in response.links: + if link.link_type != LinkTypeEnum.LINKTYPE_VIRTUAL: + continue + virtual_link_uuids.add(link.link_id.link_uuid.uuid) + if len(link.name) > 0: + virtual_link_names.add(link.name) + + LOGGER.info('VirtualLinkNames[%d] = %s', len(virtual_link_names), str(sorted(virtual_link_names))) + LOGGER.info('VirtualLinkUuids[%d] = %s', len(virtual_link_uuids), str(sorted(virtual_link_uuids))) + return virtual_link_uuids, virtual_link_names + + +def describe_links(context_client, profile_name: str) -> str: + response = context_client.ListLinks(Empty()) + links = [] + for link in response.links: + link_json = grpc_message_to_json(link) + link_json['link_type_name'] = LinkTypeEnum.Name(link.link_type) + links.append(link_json) + LOGGER.info('[%s] Link snapshot: %s', profile_name, str(links)) + return str(links) + + +def log_global_state(ip_context_client, e2e_context_client, opt_context_client) -> None: + describe_links(ip_context_client, 'ip') + describe_services(ip_context_client, 'ip') + describe_services(e2e_context_client, 'e2e') + describe_services(opt_context_client, 'opt') + + +def assert_expected_set(actual_items: Set[str], expected_items: Optional[Set[str]], label: str) -> None: + if expected_items is None: + return + + assert actual_items == expected_items, ( + '{:s} mismatch: expected={:s} actual={:s}'.format( + label, str(sorted(expected_items)), str(sorted(actual_items)) + ) + ) + + +def get_service_identifiers(service) -> Set[str]: + identifiers = {service.service_id.service_uuid.uuid} + if len(service.name) > 0: + identifiers.add(service.name) + return identifiers + + +def build_expected_optical_connections(expected_virtual_link_names: Set[str]) -> Dict[str, int]: + expected_connections = dict() + first_optical_service_name = VIRTUAL_LINK_DESCRIPTORS[0][1] + + for _, virtual_link_name in VIRTUAL_LINK_DESCRIPTORS: + if virtual_link_name not in expected_virtual_link_names: + continue + expected_connections[virtual_link_name] = 2 if virtual_link_name == first_optical_service_name else 1 + + return expected_connections + + +def assert_global_state( + ip_context_client, + e2e_context_client, + opt_context_client, + expected_virtual_link_uuids: Optional[Set[str]], + expected_virtual_link_names: Optional[Set[str]], + expected_e2e_services: int, + expected_opt_services: int, + expected_opt_connections: Optional[Dict[str, int]], +) -> None: + response = ip_context_client.ListServices(ADMIN_CONTEXT_ID) + assert len(response.services) == 0 + + virtual_link_uuids, virtual_link_names = get_virtual_link_identifiers(ip_context_client) + assert_expected_set(virtual_link_uuids, expected_virtual_link_uuids, 'Virtual link UUIDs') + assert_expected_set(virtual_link_names, expected_virtual_link_names, 'Virtual link names') + + e2e_services = list_active_optical_services(e2e_context_client) + if expected_e2e_services == 0: + response = e2e_context_client.ListServices(ADMIN_CONTEXT_ID) + assert len(response.services) == 0 + else: + assert len(e2e_services) == expected_e2e_services + for service in e2e_services: + assert count_service_connections(e2e_context_client, service) == 1 + + opt_services = list_active_optical_services(opt_context_client) + if expected_opt_services == 0: + response = opt_context_client.ListServices(ADMIN_CONTEXT_ID) + assert len(response.services) == 0 + else: + assert len(opt_services) == expected_opt_services + + if expected_opt_connections is not None: + unmatched_expected = dict(expected_opt_connections) + for service in opt_services: + service_identifiers = get_service_identifiers(service) + matching_identifiers = [ + identifier for identifier in service_identifiers if identifier in unmatched_expected + ] + assert len(matching_identifiers) == 1, ( + 'Unable to match optical service identifiers={:s} against expected={:s}'.format( + str(sorted(service_identifiers)), str(sorted(unmatched_expected.keys())) + ) + ) + + service_identifier = matching_identifiers[0] + actual_connections = count_service_connections(opt_context_client, service) + expected_connections = unmatched_expected.pop(service_identifier) + assert actual_connections == expected_connections, ( + 'Optical service {:s} connections mismatch: expected={:d} actual={:d}'.format( + service_identifier, expected_connections, actual_connections + ) + ) + + assert len(unmatched_expected) == 0, ( + 'Missing optical services for expected connection checks: {:s}'.format( + str(sorted(unmatched_expected.keys())) + ) + ) + + +def wait_for_state_or_raise( + ip_context_client, + e2e_context_client, + opt_context_client, + expected_virtual_link_uuids: Optional[Set[str]], + expected_virtual_link_names: Optional[Set[str]], + expected_e2e_services: int, + expected_opt_services: int, + expected_opt_connections: Optional[Dict[str, int]], + max_retry: int = 5, + wait_seconds: float = 15.0, +) -> None: + last_error: Exception = Exception('state not reached') + for attempt in range(1, max_retry + 1): + try: + LOGGER.info( + 'Checking expected state attempt %d/%d: virtual_link_uuids=%s virtual_link_names=%s ' + 'e2e_services=%d opt_services=%d opt_connections=%s', + attempt, + max_retry, + '' if expected_virtual_link_uuids is None else str(sorted(expected_virtual_link_uuids)), + '' if expected_virtual_link_names is None else str(sorted(expected_virtual_link_names)), + expected_e2e_services, + expected_opt_services, + expected_opt_connections, + ) + assert_global_state( + ip_context_client=ip_context_client, + e2e_context_client=e2e_context_client, + opt_context_client=opt_context_client, + expected_virtual_link_uuids=expected_virtual_link_uuids, + expected_virtual_link_names=expected_virtual_link_names, + expected_e2e_services=expected_e2e_services, + expected_opt_services=expected_opt_services, + expected_opt_connections=expected_opt_connections, + ) + return + except Exception as error: # pylint: disable=broad-except + last_error = error + LOGGER.warning( + 'Expected state not reached on attempt %d/%d: %s', + attempt, max_retry, str(error) + ) + log_global_state(ip_context_client, e2e_context_client, opt_context_client) + time.sleep(wait_seconds) + + LOGGER.error( + 'Timed out waiting expected state: virtual_link_uuids=%s virtual_link_names=%s ' + 'e2e_services=%d opt_services=%d opt_connections=%s', + '' if expected_virtual_link_uuids is None else str(sorted(expected_virtual_link_uuids)), + '' if expected_virtual_link_names is None else str(sorted(expected_virtual_link_names)), + expected_e2e_services, + expected_opt_services, + expected_opt_connections, + ) + raise last_error diff --git a/src/tests/ofc25/tests/__init__.py b/src/tests/ofc25/tests/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/ofc25/tests/__init__.py +++ b/src/tests/ofc25/tests/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ofc25/tests/conftest.py b/src/tests/ofc25/tests/conftest.py new file mode 100644 index 0000000000000000000000000000000000000000..d1a2e25fa9d9a0ac8752436c84bca56c06c9a5b4 --- /dev/null +++ b/src/tests/ofc25/tests/conftest.py @@ -0,0 +1,131 @@ +# Copyright 2022-2026 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 +import os +import tempfile +from pathlib import Path + +import pytest + +# pylint: disable=unused-import +from .Fixtures import ( + PROFILE_FILENAMES, PROFILE_E2E, PROFILE_IP, PROFILE_OPT, + RUNTIME_ENV_DIR, tfs_clients, tfs_profiles +) + +E2E_TOPOLOGY_DESCRIPTOR = 'topology_e2e.json' + + +def pytest_addoption(parser): + parser.addoption( + '--tfs-profile', + action='store', + choices=[PROFILE_OPT, PROFILE_IP, PROFILE_E2E], + default=None, + help='TFS deployment profile to use (opt|ip|e2e).', + ) + parser.addoption( + '--tfs-runtime-script', + action='store', + default=None, + help='Runtime env script filename under /var/teraflow.', + ) + parser.addoption( + '--tfs-topology-descriptor', + action='store', + default=None, + help='Topology descriptor filename (or absolute path).', + ) + + +def _require_option(request: pytest.FixtureRequest, option_name: str) -> str: + value = request.config.getoption(option_name) + if value is None: + raise ValueError('Missing required pytest option: --{:s}'.format(option_name.replace('_', '-'))) + return value + + +def _require_runner_ip() -> str: + runner_ip = os.environ.get('TFS_RUNNER_IP') + if runner_ip: + return runner_ip + raise RuntimeError( + 'Missing TFS_RUNNER_IP environment variable required to materialize the OFC25 E2E topology descriptor' + ) + + +def _materialize_e2e_descriptor(descriptor_path: Path) -> str: + runner_ip = _require_runner_ip() + descriptor_data = json.loads(descriptor_path.read_text(encoding='utf-8')) + + for device in descriptor_data.get('devices', []): + config_rules = device.get('device_config', {}).get('config_rules', []) + for config_rule in config_rules: + custom = config_rule.get('custom', {}) + if custom.get('resource_key') == '_connect/address': + custom['resource_value'] = runner_ip + + tmp_file = tempfile.NamedTemporaryFile( + mode='w', suffix='-ofc25-topology-e2e.json', prefix='codex-', delete=False, encoding='utf-8' + ) + with tmp_file: + json.dump(descriptor_data, tmp_file, indent=4) + tmp_file.write('\n') + + return tmp_file.name + + +@pytest.fixture(scope='session') +def selected_tfs_profile(request: pytest.FixtureRequest) -> str: + return _require_option(request, 'tfs_profile') + + +@pytest.fixture(scope='session') +def selected_runtime_script(request: pytest.FixtureRequest, selected_tfs_profile: str) -> str: + runtime_script = _require_option(request, 'tfs_runtime_script') + expected_script = PROFILE_FILENAMES[selected_tfs_profile] + if runtime_script != expected_script: + msg = 'Runtime script "{:s}" does not match profile "{:s}" (expected "{:s}")' + raise ValueError(msg.format(runtime_script, selected_tfs_profile, expected_script)) + runtime_file = RUNTIME_ENV_DIR / runtime_script + if not runtime_file.exists(): + raise FileNotFoundError('Runtime env file not found: {:s}'.format(str(runtime_file))) + return runtime_script + + +@pytest.fixture(scope='session') +def selected_topology_descriptor(request: pytest.FixtureRequest) -> str: + descriptor = _require_option(request, 'tfs_topology_descriptor') + descriptor_path = Path(descriptor) + if not descriptor_path.is_absolute(): + descriptor_path = Path(__file__).resolve().parent.parent / 'descriptors' / descriptor + if not descriptor_path.exists(): + raise FileNotFoundError('Topology descriptor not found: {:s}'.format(str(descriptor_path))) + + if descriptor_path.name == E2E_TOPOLOGY_DESCRIPTOR: + return _materialize_e2e_descriptor(descriptor_path) + + return str(descriptor_path) + + +@pytest.fixture(scope='session') +def selected_tfs_client_bundle( + tfs_clients, + selected_tfs_profile: str, + selected_runtime_script: str, # pylint: disable=unused-argument +): + if selected_tfs_profile not in tfs_clients: + raise KeyError('Profile "{:s}" not loaded in tfs_clients'.format(selected_tfs_profile)) + return tfs_clients[selected_tfs_profile] diff --git a/src/tests/ofc25/tests/create_service.py b/src/tests/ofc25/tests/create_service.py deleted file mode 100644 index 9e1fa73b065bfbdc295d11281657413260f138be..0000000000000000000000000000000000000000 --- a/src/tests/ofc25/tests/create_service.py +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright 2022-2025 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 requests - -url = "http://localhost:8002/tfs-api/link/CSGW1_xe5-CSGW2_xe5" - -payload = { - "link_id": {"link_uuid": {"uuid": "CSGW1_xe5-CSGW2_xe5"}}, - "link_endpoint_ids": [ - { - "device_id": {"device_uuid": {"uuid": "CSGW1"}}, - "endpoint_uuid": {"uuid": "PORT-xe5"} - }, - { - "device_id": {"device_uuid": {"uuid": "CSGW2"}}, - "endpoint_uuid": {"uuid": "PORT-xe5"} - } - ], - "link_type": "LINKTYPE_VIRTUAL_COPPER", - "attributes": {"total_capacity_gbps": 1} -} -headers = { - "cookie": "session%3Aaa82129ced5debbb=eyJjc3JmX3Rva2VuIjoiZGI1ZjY5Yjg0MDgxMjk3YmU3ZTY2MDMxZTljYzdiYTZmMWVjZjc0NCJ9.ZijdlQ.xdcOryRyoRgXCJ2XYwczsHw4yIQ; session%3A53cf1bf28136ee51=eyJjc3JmX3Rva2VuIjoiMDFlNWQwNzUyNDM3MDU1NWZhZjE3MGFiYzg4NGY2YmE3Y2M5MjM4OCJ9.ZikGzQ.KkIdiPPvqaO2pyBi7-mnlTKnmWs; session%3Ae52730446648c30a=eyJjc3JmX3Rva2VuIjoiODI4NTUwOTc4MWMxYzVjNmQ2ZDBiNGViMmU4ZDJmMzYzMzUxY2M2OSJ9.ZyOPuA.LWyhgLGjWOCb1H6wKlsG0evCV-A", - "Content-Type": "application/json" -} - -response = requests.request("PUT", url, json=payload, headers=headers) - -print(response.text) \ No newline at end of file diff --git a/src/tests/ofc25/tests/delete_service.py b/src/tests/ofc25/tests/delete_service.py deleted file mode 100644 index 2ffaf16a2ef4487918d1124d56150871fcc2cf58..0000000000000000000000000000000000000000 --- a/src/tests/ofc25/tests/delete_service.py +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright 2022-2025 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 requests - -url = "http://localhost:8002/tfs-api/link/CSGW1_xe5-CSGW2_xe5" - -payload = "" -headers = {"cookie": "session%3Aaa82129ced5debbb=eyJjc3JmX3Rva2VuIjoiZGI1ZjY5Yjg0MDgxMjk3YmU3ZTY2MDMxZTljYzdiYTZmMWVjZjc0NCJ9.ZijdlQ.xdcOryRyoRgXCJ2XYwczsHw4yIQ; session%3A53cf1bf28136ee51=eyJjc3JmX3Rva2VuIjoiMDFlNWQwNzUyNDM3MDU1NWZhZjE3MGFiYzg4NGY2YmE3Y2M5MjM4OCJ9.ZikGzQ.KkIdiPPvqaO2pyBi7-mnlTKnmWs; session%3Ae52730446648c30a=eyJjc3JmX3Rva2VuIjoiODI4NTUwOTc4MWMxYzVjNmQ2ZDBiNGViMmU4ZDJmMzYzMzUxY2M2OSJ9.ZyOPuA.LWyhgLGjWOCb1H6wKlsG0evCV-A"} - -response = requests.request("DELETE", url, data=payload, headers=headers) - -print(response.text) \ No newline at end of file diff --git a/src/tests/ofc25/tests/test_functional_bootstrap.py b/src/tests/ofc25/tests/test_functional_bootstrap.py new file mode 100644 index 0000000000000000000000000000000000000000..66296110d764b168fc3d1c9f96970f0755339ac3 --- /dev/null +++ b/src/tests/ofc25/tests/test_functional_bootstrap.py @@ -0,0 +1,104 @@ +# Copyright 2022-2026 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 + +from common.Constants import DEFAULT_CONTEXT_NAME +from common.proto.context_pb2 import ContextId, DeviceOperationalStatusEnum, Empty +from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results, validate_empty_scenario +from common.tools.grpc.Tools import grpc_message_list_to_json_string, grpc_message_to_json, grpc_message_to_json_string +from common.tools.object_factory.Context import json_context_id + +# pylint: disable=unused-import +from .conftest import ( + selected_tfs_client_bundle, selected_tfs_profile, selected_topology_descriptor +) +from .Helper import split_imported_devices, validate_descriptor_state + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)) + + +def _check_devices_enabled_or_raise(context_client, profile_name: str, max_retry: int = 10, wait_seconds: float = 1.0) -> None: + op_status_enabled = DeviceOperationalStatusEnum.DEVICEOPERATIONALSTATUS_ENABLED + + num_devices = -1 + num_devices_enabled = 0 + num_retry = 0 + disabled_devices = list() + + while (num_retry < max_retry) and (num_devices != num_devices_enabled): + time.sleep(wait_seconds) + response = context_client.ListDevices(Empty()) + num_devices = len(response.devices) + local_devices, imported_devices = split_imported_devices(response.devices) + num_devices_enabled = 0 + disabled_devices = list() + for device in response.devices: + if device.device_operational_status == op_status_enabled: + num_devices_enabled += 1 + else: + disabled_devices.append(grpc_message_to_json(device)) + LOGGER.info( + '[%s] Num Devices enabled: %d/%d (local=%d imported=%d)', + profile_name, + num_devices_enabled, + num_devices, + len(local_devices), + len(imported_devices), + ) + LOGGER.info('[%s] Local devices: %s', profile_name, grpc_message_list_to_json_string(local_devices)) + LOGGER.info('[%s] Imported devices: %s', profile_name, grpc_message_list_to_json_string(imported_devices)) + num_retry += 1 + + if num_devices_enabled != num_devices: + msg = '[{:s}] Devices enabled timeout after {:d} retries: {:d}/{:d}; disabled={:s}' + raise Exception(msg.format(profile_name, max_retry, num_devices_enabled, num_devices, str(disabled_devices))) + + LOGGER.info('[%s] Devices: %s', profile_name, grpc_message_to_json_string(response)) + + +def test_scenario_bootstrap( + selected_tfs_client_bundle, + selected_tfs_profile: str, + selected_topology_descriptor: str, +) -> None: + context_client = selected_tfs_client_bundle.context + device_client = selected_tfs_client_bundle.device + + validate_empty_scenario(context_client) + + descriptor_loader = DescriptorLoader( + descriptors_file=selected_topology_descriptor, + context_client=context_client, + device_client=device_client, + ) + results = descriptor_loader.process() + check_descriptor_load_results(results, descriptor_loader) + validate_descriptor_state(context_client, descriptor_loader, selected_tfs_profile) + + response = context_client.GetContext(ADMIN_CONTEXT_ID) + assert len(response.service_ids) == 0 + assert len(response.slice_ids) == 0 + + +def test_scenario_devices_enabled( + selected_tfs_client_bundle, + selected_tfs_profile: str, +) -> None: + context_client = selected_tfs_client_bundle.context + _check_devices_enabled_or_raise(context_client, selected_tfs_profile) diff --git a/src/tests/ofc25/tests/test_functional_cleanup.py b/src/tests/ofc25/tests/test_functional_cleanup.py new file mode 100644 index 0000000000000000000000000000000000000000..0b42903d3f17b4396b52b823cd877951102d758d --- /dev/null +++ b/src/tests/ofc25/tests/test_functional_cleanup.py @@ -0,0 +1,53 @@ +# Copyright 2022-2026 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.Constants import DEFAULT_CONTEXT_NAME +from common.proto.context_pb2 import ContextId +from common.tools.descriptor.Loader import DescriptorLoader, validate_empty_scenario +from common.tools.object_factory.Context import json_context_id + +# pylint: disable=unused-import +from .conftest import ( + selected_tfs_client_bundle, selected_tfs_profile, selected_topology_descriptor +) +from .Helper import validate_descriptor_state + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)) + + +def test_scenario_cleanup( + selected_tfs_client_bundle, + selected_tfs_profile: str, + selected_topology_descriptor: str, +) -> None: + context_client = selected_tfs_client_bundle.context + device_client = selected_tfs_client_bundle.device + + response = context_client.GetContext(ADMIN_CONTEXT_ID) + assert len(response.service_ids) == 0 + assert len(response.slice_ids) == 0 + + descriptor_loader = DescriptorLoader( + descriptors_file=selected_topology_descriptor, + context_client=context_client, + device_client=device_client, + ) + validate_descriptor_state(context_client, descriptor_loader, selected_tfs_profile) + descriptor_loader.unload() + validate_empty_scenario(context_client) diff --git a/src/tests/ofc25/tests/test_functional_create_vlinks.py b/src/tests/ofc25/tests/test_functional_create_vlinks.py new file mode 100644 index 0000000000000000000000000000000000000000..a4d38a510e1a2679a60beaffd5e24e8647135b90 --- /dev/null +++ b/src/tests/ofc25/tests/test_functional_create_vlinks.py @@ -0,0 +1,89 @@ +# Copyright 2022-2026 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 os +from typing import Set + +from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results + +# pylint: disable=unused-import +from .Fixtures import PROFILE_E2E, PROFILE_IP, PROFILE_OPT, tfs_clients +from .Helper import ( + DESCRIPTORS_DIR, + VIRTUAL_LINK_DESCRIPTORS, + build_expected_optical_connections, + wait_for_state_or_raise, +) + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +def test_create_virtual_link( + tfs_clients, +) -> None: + ip_context_client = tfs_clients[PROFILE_IP].context + ip_device_client = tfs_clients[PROFILE_IP].device + ip_vnt_manager_client = tfs_clients[PROFILE_IP].vnt_manager + e2e_context_client = tfs_clients[PROFILE_E2E].context + opt_context_client = tfs_clients[PROFILE_OPT].context + + assert ip_vnt_manager_client is not None + + # Initial state: no services in any TFS and no virtual links in IP. + wait_for_state_or_raise( + ip_context_client=ip_context_client, + e2e_context_client=e2e_context_client, + opt_context_client=opt_context_client, + expected_virtual_link_uuids=None, + expected_virtual_link_names=set(), + expected_e2e_services=0, + expected_opt_services=0, + expected_opt_connections={}, + ) + + expected_virtual_link_names: Set[str] = set() + for index, (descriptor_name, virtual_link_name) in enumerate(VIRTUAL_LINK_DESCRIPTORS, start=1): + descriptor_file = os.path.join(DESCRIPTORS_DIR, descriptor_name) + LOGGER.info( + 'Creating virtual link step %d/%d from descriptor %s', + index, len(VIRTUAL_LINK_DESCRIPTORS), descriptor_file + ) + descriptor_loader = DescriptorLoader( + descriptors_file=descriptor_file, + context_client=ip_context_client, + device_client=ip_device_client, + vntm_client=ip_vnt_manager_client, + ) + results = descriptor_loader.process() + check_descriptor_load_results(results, descriptor_loader) + LOGGER.info('Virtual link request submitted successfully for %s', virtual_link_name) + + expected_virtual_link_names.add(virtual_link_name) + LOGGER.info( + 'Waiting for propagated state after creating %s: expected_virtual_link_names=%s ' + 'expected_e2e_services=%d', + virtual_link_name, str(sorted(expected_virtual_link_names)), index + ) + expected_opt_connections = build_expected_optical_connections(expected_virtual_link_names) + wait_for_state_or_raise( + ip_context_client=ip_context_client, + e2e_context_client=e2e_context_client, + opt_context_client=opt_context_client, + expected_virtual_link_uuids=None, + expected_virtual_link_names=expected_virtual_link_names, + expected_e2e_services=index, + expected_opt_services=index, + expected_opt_connections=expected_opt_connections, + ) diff --git a/src/tests/ofc25/tests/test_functional_delete_vlinks.py b/src/tests/ofc25/tests/test_functional_delete_vlinks.py new file mode 100644 index 0000000000000000000000000000000000000000..1a280c758077a17968e38beee452ed4fc754851c --- /dev/null +++ b/src/tests/ofc25/tests/test_functional_delete_vlinks.py @@ -0,0 +1,88 @@ +# Copyright 2022-2026 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 os + +from common.tools.descriptor.Loader import DescriptorLoader + +# pylint: disable=unused-import +from .Fixtures import PROFILE_E2E, PROFILE_IP, PROFILE_OPT, tfs_clients +from .Helper import ( + DESCRIPTORS_DIR, + VIRTUAL_LINK_DESCRIPTORS, + build_expected_optical_connections, + wait_for_state_or_raise, +) + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + + +def test_delete_virtual_links( + tfs_clients, +) -> None: + ip_context_client = tfs_clients[PROFILE_IP].context + ip_device_client = tfs_clients[PROFILE_IP].device + ip_vnt_manager_client = tfs_clients[PROFILE_IP].vnt_manager + e2e_context_client = tfs_clients[PROFILE_E2E].context + opt_context_client = tfs_clients[PROFILE_OPT].context + + assert ip_vnt_manager_client is not None + + expected_virtual_link_names = {link_name for _, link_name in VIRTUAL_LINK_DESCRIPTORS} + wait_for_state_or_raise( + ip_context_client=ip_context_client, + e2e_context_client=e2e_context_client, + opt_context_client=opt_context_client, + expected_virtual_link_uuids=None, + expected_virtual_link_names=expected_virtual_link_names, + expected_e2e_services=len(VIRTUAL_LINK_DESCRIPTORS), + expected_opt_services=len(VIRTUAL_LINK_DESCRIPTORS), + expected_opt_connections=build_expected_optical_connections(expected_virtual_link_names), + ) + + for remaining, (descriptor_name, virtual_link_name) in zip( + [2, 1, 0], reversed(VIRTUAL_LINK_DESCRIPTORS) + ): + descriptor_file = os.path.join(DESCRIPTORS_DIR, descriptor_name) + LOGGER.info( + 'Deleting virtual link from descriptor %s; expecting %d remaining E2E services afterwards', + descriptor_file, remaining + ) + descriptor_loader = DescriptorLoader( + descriptors_file=descriptor_file, + context_client=ip_context_client, + device_client=ip_device_client, + vntm_client=ip_vnt_manager_client, + ) + descriptor_loader.unload() + LOGGER.info('Virtual link removal submitted successfully for %s', virtual_link_name) + + expected_virtual_link_names.remove(virtual_link_name) + LOGGER.info( + 'Waiting for propagated state after deleting %s: expected_virtual_link_names=%s ' + 'expected_e2e_services=%d', + virtual_link_name, str(sorted(expected_virtual_link_names)), remaining + ) + wait_for_state_or_raise( + ip_context_client=ip_context_client, + e2e_context_client=e2e_context_client, + opt_context_client=opt_context_client, + expected_virtual_link_uuids=None, + expected_virtual_link_names=expected_virtual_link_names, + expected_e2e_services=remaining, + expected_opt_services=remaining, + expected_opt_connections=build_expected_optical_connections(expected_virtual_link_names), + ) diff --git a/src/tests/ofc25/tfs-ingress-e2e.yaml b/src/tests/ofc25/tfs-ingress-e2e.yaml index 27f140f3df549eee89f25d901e5ed824f688d754..8be20970ac90775e1bc74792606b88a44409e449 100644 --- a/src/tests/ofc25/tfs-ingress-e2e.yaml +++ b/src/tests/ofc25/tfs-ingress-e2e.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -15,10 +15,40 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: tfs-ingress-e2e + name: tfs-ingress-e2e-web annotations: nginx.ingress.kubernetes.io/rewrite-target: "/$2" - + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/limit-rps: "50" # max requests per second per source IP + nginx.ingress.kubernetes.io/limit-connections: "50" # max concurrent connections per source IP + nginx.ingress.kubernetes.io/proxy-connect-timeout: "60" # max timeout for connecting to server + nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # max timeout between two successive read operations + nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" # max timeout between two successive write operations +spec: + ingressClassName: tfs-ingress-class-e2e + rules: + - http: + paths: + - path: /webui(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: webuiservice + port: + number: 8004 + - path: /grafana(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: webuiservice + port: + number: 3000 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: tfs-ingress-e2e-nbi + annotations: # Enable websocket services and configure sticky cookies (seems not to work) #nginx.org/websocket-services: "nbiservice" #nginx.org/sticky-cookie-services: "serviceName=nbiservice tfs-nbi-session expires=1h path=/socket.io" @@ -44,49 +74,63 @@ spec: rules: - http: paths: - - path: /webui(/|$)(.*) + - path: /.well-known pathType: Prefix backend: service: - name: webuiservice + name: nbiservice port: - number: 8004 - - path: /grafana(/|$)(.*) + number: 8080 + - path: /restconf pathType: Prefix backend: service: - name: webuiservice + name: nbiservice port: - number: 3000 - - path: /()(restconf/.*) + number: 8080 + - path: /socket.io + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /tfs-api + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /bmw pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(socket.io/.*) + - path: /qkd_app pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(tfs-api/.*) + - path: /camara pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(bmw/.*) + - path: /agent-probes pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(qkd_app/.*) + - path: /osm-api pathType: Prefix backend: service: diff --git a/src/tests/ofc25/tfs-ingress-ip.yaml b/src/tests/ofc25/tfs-ingress-ip.yaml index cde7accf12c7364361dbab671eceb6bbb6143acf..bb515e011bc4a47035b7834c0a28deea8ac73b08 100644 --- a/src/tests/ofc25/tfs-ingress-ip.yaml +++ b/src/tests/ofc25/tfs-ingress-ip.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -15,10 +15,40 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: tfs-ingress-ip + name: tfs-ingress-ip-web annotations: nginx.ingress.kubernetes.io/rewrite-target: "/$2" - + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/limit-rps: "50" # max requests per second per source IP + nginx.ingress.kubernetes.io/limit-connections: "50" # max concurrent connections per source IP + nginx.ingress.kubernetes.io/proxy-connect-timeout: "60" # max timeout for connecting to server + nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # max timeout between two successive read operations + nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" # max timeout between two successive write operations +spec: + ingressClassName: tfs-ingress-class-ip + rules: + - http: + paths: + - path: /webui(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: webuiservice + port: + number: 8004 + - path: /grafana(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: webuiservice + port: + number: 3000 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: tfs-ingress-ip-nbi + annotations: # Enable websocket services and configure sticky cookies (seems not to work) #nginx.org/websocket-services: "nbiservice" #nginx.org/sticky-cookie-services: "serviceName=nbiservice tfs-nbi-session expires=1h path=/socket.io" @@ -44,49 +74,63 @@ spec: rules: - http: paths: - - path: /webui(/|$)(.*) + - path: /.well-known pathType: Prefix backend: service: - name: webuiservice + name: nbiservice port: - number: 8004 - - path: /grafana(/|$)(.*) + number: 8080 + - path: /restconf pathType: Prefix backend: service: - name: webuiservice + name: nbiservice port: - number: 3000 - - path: /()(restconf/.*) + number: 8080 + - path: /socket.io + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /tfs-api + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /bmw pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(socket.io/.*) + - path: /qkd_app pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(tfs-api/.*) + - path: /camara pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(bmw/.*) + - path: /agent-probes pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(qkd_app/.*) + - path: /osm-api pathType: Prefix backend: service: diff --git a/src/tests/ofc25/tfs-ingress-opt.yaml b/src/tests/ofc25/tfs-ingress-opt.yaml index cf5fd09e9ba601eb1980fc5e99f98d4a326d544c..f2f651bae0d26cc6681543656c16c96756579e31 100644 --- a/src/tests/ofc25/tfs-ingress-opt.yaml +++ b/src/tests/ofc25/tfs-ingress-opt.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -15,10 +15,40 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: tfs-ingress-opt + name: tfs-ingress-opt-web annotations: nginx.ingress.kubernetes.io/rewrite-target: "/$2" - + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/limit-rps: "50" # max requests per second per source IP + nginx.ingress.kubernetes.io/limit-connections: "50" # max concurrent connections per source IP + nginx.ingress.kubernetes.io/proxy-connect-timeout: "60" # max timeout for connecting to server + nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # max timeout between two successive read operations + nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" # max timeout between two successive write operations +spec: + ingressClassName: tfs-ingress-class-opt + rules: + - http: + paths: + - path: /webui(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: webuiservice + port: + number: 8004 + - path: /grafana(/|$)(.*) + pathType: ImplementationSpecific + backend: + service: + name: webuiservice + port: + number: 3000 +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: tfs-ingress-opt-nbi + annotations: # Enable websocket services and configure sticky cookies (seems not to work) #nginx.org/websocket-services: "nbiservice" #nginx.org/sticky-cookie-services: "serviceName=nbiservice tfs-nbi-session expires=1h path=/socket.io" @@ -44,49 +74,63 @@ spec: rules: - http: paths: - - path: /webui(/|$)(.*) + - path: /.well-known pathType: Prefix backend: service: - name: webuiservice + name: nbiservice port: - number: 8004 - - path: /grafana(/|$)(.*) + number: 8080 + - path: /restconf pathType: Prefix backend: service: - name: webuiservice + name: nbiservice port: - number: 3000 - - path: /()(restconf/.*) + number: 8080 + - path: /socket.io + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /tfs-api + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /bmw pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(socket.io/.*) + - path: /qkd_app pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(tfs-api/.*) + - path: /camara pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(bmw/.*) + - path: /agent-probes pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(qkd_app/.*) + - path: /osm-api pathType: Prefix backend: service: diff --git a/src/tests/ofc25/undeploy.sh b/src/tests/ofc25/undeploy_all_in_one.sh similarity index 96% rename from src/tests/ofc25/undeploy.sh rename to src/tests/ofc25/undeploy_all_in_one.sh index 3def62d48247b31b01dcbe09972188b19c566aba..4b560001afa9f8fe1066cec02e7392c1ec253445 100755 --- a/src/tests/ofc25/undeploy.sh +++ b/src/tests/ofc25/undeploy_all_in_one.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ofc26_flexscale/Fixtures.py b/src/tests/ofc26_flexscale/Fixtures.py new file mode 100644 index 0000000000000000000000000000000000000000..40f65d8009b58a106d2ab7c91bcac00fcbda598a --- /dev/null +++ b/src/tests/ofc26_flexscale/Fixtures.py @@ -0,0 +1,76 @@ +# Copyright 2022-2026 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 pytest +import logging +import os +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from service.client.ServiceClient import ServiceClient +from kpi_manager.client.KpiManagerClient import KpiManagerClient +from telemetry.frontend.client.TelemetryFrontendClient import TelemetryFrontendClient + +# Import ENV variables +_ip_kpi_address = os.getenv('IP_KPI', None) +_ip_tele_address = os.getenv('IP_TELE', None) + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + + +@pytest.fixture(scope='session') +def context_client(): + _client = ContextClient(host="10.152.183.180") + _client.connect() + LOGGER.info('Yielding Connected ContextClient...') + yield _client + LOGGER.info('Closing ContextClient...') + _client.close() + +@pytest.fixture(scope='session') +def device_client(): + _client = DeviceClient(host="10.152.183.212") + _client.connect() + LOGGER.info('Yielding Connected DeviceClient...') + yield _client + LOGGER.info('Closing DeviceClient...') + _client.close() + +@pytest.fixture(scope='session') +def service_client(): + _client = ServiceClient(host="10.152.183.98") + _client.connect() + LOGGER.info('Yielding Connected ServiceClient...') + yield _client + LOGGER.info('Closing ServiceClient...') + _client.close() + +@pytest.fixture(scope='session') +def kpi_manager_client(): + _client = KpiManagerClient(host=_ip_kpi_address) + _client.connect() + LOGGER.info('Yielding Connected KpiManagerClient...') + yield _client + LOGGER.info('Closed KpiManagerClient...') + _client.close() + + +@pytest.fixture(scope='session') +def telemetry_frontend_client(): + _client = TelemetryFrontendClient(host=_ip_tele_address) + _client.connect() + LOGGER.info('Yielding Connected TelemetryFrontendClient...') + yield _client + LOGGER.info('Closed TelemetryFrontendClient...') + _client.close() diff --git a/src/tests/ofc26_flexscale/__init__.py b/src/tests/ofc26_flexscale/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 --- /dev/null +++ b/src/tests/ofc26_flexscale/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2022-2026 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/ofc26_flexscale/deploy_specs.sh b/src/tests/ofc26_flexscale/deploy_specs.sh new file mode 100755 index 0000000000000000000000000000000000000000..b2697cca7300af9780b93636f74906e300c7285d --- /dev/null +++ b/src/tests/ofc26_flexscale/deploy_specs.sh @@ -0,0 +1,240 @@ +#!/bin/bash +# Copyright 2022-2026 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 opticalcontroller 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 VNT Manager +#export TFS_COMPONENTS="${TFS_COMPONENTS} vnt_manager" + +# Uncomment to activate OSM Client +#export TFS_COMPONENTS="${TFS_COMPONENTS} osm_client" + +# 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 + +# Uncomment to activate SIMAP Connector +#export TFS_COMPONENTS="${TFS_COMPONENTS} simap_connector" + +# Uncomment to activate Load Generator +#export TFS_COMPONENTS="${TFS_COMPONENTS} load_generator" + +# Uncomment to activate Pluggables Component +#export TFS_COMPONENTS="${TFS_COMPONENTS} pluggables" + + +# 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="YES" + + +# ----- 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="" + + +# ----- 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_EXT_PORT_CLIENT="9092" + +# Set Kafka installation mode to 'single'. This option is convenient for development and testing. +# See ./deploy/all.sh or ./deploy/kafka.sh for additional details +export KFK_DEPLOY_MODE="single" + +# Disable flag for re-deploying Kafka from scratch. +export KFK_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="" + +# Disable flag for re-deploying QuestDB from scratch. +export QDB_REDEPLOY="" + + +# ----- Time Series Storage - Prometheus / Grafana Mimir ----------------------- + +# Set Time Series Storage installation mode to 'single' (i.e., Prometheus only). +# This option is convenient for development and testing. See ./deploy/all.sh or +# ./deploy/monitoring.sh for additional details. +export TSDB_DEPLOY_MODE="single" + + +# ----- 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" + + +# ----- Telemetry Config ------------------------------------------------------ + +# Define a Load Balancer IP for Telemetry Collector components +export LOAD_BALANCER_IP="192.168.5.250" # <-- Change this to match your network diff --git a/src/tests/ofc26_flexscale/mock_tfs_services.py b/src/tests/ofc26_flexscale/mock_tfs_services.py new file mode 100644 index 0000000000000000000000000000000000000000..04f5a1e5955a185733bbfecb539ca295dc823eb0 --- /dev/null +++ b/src/tests/ofc26_flexscale/mock_tfs_services.py @@ -0,0 +1,86 @@ +# Copyright 2022-2026 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, pytest +import logging +from typing import Union + +from common.Constants import ServiceNameEnum +from common.Settings import ( + ENVVAR_SUFIX_SERVICE_HOST, ENVVAR_SUFIX_SERVICE_PORT_GRPC, get_env_var_name, get_service_port_grpc) +from common.tests.MockServicerImpl_Context import MockServicerImpl_Context +from common.proto.context_pb2_grpc import add_ContextServiceServicer_to_server + +from common.tools.service.GenericGrpcService import GenericGrpcService + +from kpi_manager.service.KpiManagerService import KpiManagerService +from kpi_manager.client.KpiManagerClient import KpiManagerClient + + + +LOGGER = logging.getLogger(__name__) + +LOCAL_HOST = '127.0.0.1' + +KPIMANAGER_SERVICE_PORT = get_service_port_grpc(ServiceNameEnum.KPIMANAGER) # type: ignore +os.environ[get_env_var_name(ServiceNameEnum.KPIMANAGER, ENVVAR_SUFIX_SERVICE_HOST )] = str(LOCAL_HOST) +os.environ[get_env_var_name(ServiceNameEnum.KPIMANAGER, ENVVAR_SUFIX_SERVICE_PORT_GRPC)] = str(KPIMANAGER_SERVICE_PORT) + + +# NOTE: ---> For local testing, without need of running TFS services. + +class MockContextService(GenericGrpcService): + # Mock Service implementing Context to simplify unitary tests of Monitoring + + def __init__(self, bind_port: Union[str, int]) -> None: + super().__init__(bind_port, LOCAL_HOST, enable_health_servicer=False, cls_name='MockService') + + # pylint: disable=attribute-defined-outside-init + def install_servicers(self): + self.context_servicer = MockServicerImpl_Context() + add_ContextServiceServicer_to_server(self.context_servicer, self.server) + +# This fixture will be requested by test cases and last during testing session +@pytest.fixture(scope='session') +def kpi_manager_service(): + LOGGER.info('Initializing KpiManagerService...') + _service = KpiManagerService() + _service.start() + + # yield the server, when test finishes, execution will resume to stop it + LOGGER.info('Yielding KpiManagerService...') + yield _service + + LOGGER.info('Terminating KpiManagerService...') + _service.stop() + + LOGGER.info('Terminated KpiManagerService...') + +# This fixture will be requested by test cases and last during testing session. +# The client requires the server, so client fixture has the server as dependency. +# def monitoring_client(monitoring_service : MonitoringService): (Add for better understanding) +@pytest.fixture(scope='session') +def kpi_manager_client(kpi_manager_service : KpiManagerService): # pylint: disable=redefined-outer-name,unused-argument + LOGGER.info('Initializing KpiManagerClient...') + _client = KpiManagerClient() + + # yield the server, when test finishes, execution will resume to stop it + LOGGER.info('Yielding KpiManagerClient...') + yield _client + + LOGGER.info('Closing KpiManagerClient...') + _client.close() + + LOGGER.info('Closed KpiManagerClient...') \ No newline at end of file diff --git a/src/tests/ofc26_flexscale/run_ofc26_test.sh b/src/tests/ofc26_flexscale/run_ofc26_test.sh new file mode 100755 index 0000000000000000000000000000000000000000..1760b0d7513751f2e37ea9beafc67d0e9680b98f --- /dev/null +++ b/src/tests/ofc26_flexscale/run_ofc26_test.sh @@ -0,0 +1,47 @@ +#!/bin/bash +# Copyright 2022-2026 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 folder containing the script the root folder for its execution +cd $(dirname $0)/../../../ +echo "Running OFC26 test from folder: $(pwd)" +cd src/ +CRDB_SQL_ADDRESS=$(kubectl get service --namespace ${CRDB_NAMESPACE} cockroachdb-public -o 'jsonpath={.spec.clusterIP}') +export CRDB_URI="cockroachdb://tfs:tfs123@${CRDB_SQL_ADDRESS}:26257/tfs_kpi_mgmt?sslmode=require" + +#added for kafka exposure +export KFK_SERVER_ADDRESS='127.0.0.1:9092' + +kubectl port-forward -n kafka service/kafka-service 9092:9092 > /dev/null 2>&1 & +KAFKA_PF_PID=$! + +# Function to cleanup port-forward on exit +cleanup() { + # echo "Cleaning up Kafka port-forward (PID: ${KAFKA_PF_PID})..." + kill ${KAFKA_PF_PID} 2>/dev/null || true + wait ${KAFKA_PF_PID} 2>/dev/null || true +} + + +IP_KPI=$(kubectl get all --all-namespaces | grep service/kpi-managerservice | awk '{print $4}') +export IP_KPI +echo "KPI Manager Service IP: ${IP_KPI}" + +IP_TELE=$(kubectl get all --all-namespaces | grep service/telemetryservice | awk '{print $4}') +export IP_TELE +echo "Telemetry Frontend Service IP: ${IP_TELE}" + + +python -m pytest --log-level=INFO --log-cli-level=INFO --verbose \ + tests/ofc26_flexscale/test_ofc26_mgon_integration_V2.py diff --git a/src/tests/ofc26_flexscale/test_ofc26_messages.py b/src/tests/ofc26_flexscale/test_ofc26_messages.py new file mode 100644 index 0000000000000000000000000000000000000000..6df0435ddf58d10a345fa7215443e250881f5c87 --- /dev/null +++ b/src/tests/ofc26_flexscale/test_ofc26_messages.py @@ -0,0 +1,84 @@ +# Copyright 2022-2026 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 +from common.proto import kpi_manager_pb2 +from common.proto.kpi_sample_types_pb2 import KpiSampleType +from src.telemetry.backend.service.collectors.gnmi_oc.KPI import KPI +from common.proto import telemetry_frontend_pb2 + + +# ---> KPI Manager messages creation for testing + +def create_kpi_descriptor_request(descriptor_name: str = "Test_name"): + _create_kpi_request = kpi_manager_pb2.KpiDescriptor() + _create_kpi_request.kpi_id.kpi_id.uuid = "6e22f180-ba28-4641-b190-2287bf447777" + _create_kpi_request.kpi_description = descriptor_name + _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_OPTICAL_TOTAL_INPUT_POWER + _create_kpi_request.device_id.device_uuid.uuid = "ddb3ef8e-ee65-5cf9-9d21-dac56a27f85b" # confirm for TFS + _create_kpi_request.service_id.service_uuid.uuid = "b2a60c5b-8c46-5707-a64a-9c6539d395f2" + # _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC1' + _create_kpi_request.endpoint_id.endpoint_uuid.uuid = "2" + # _create_kpi_request.connection_id.connection_uuid.uuid = 'CON1' + # _create_kpi_request.link_id.link_uuid.uuid = 'LNK1' + return _create_kpi_request + + +# ---> Telemetry messages creation for testing + +devices = { + 'mgon': { + 'host' : '172.17.254.24', + 'port' : '50061', + 'username' : 'admin', + 'password' : 'admin', + 'insecure' : True, + 'kpi' : KPI.KPISAMPLETYPE_OPTICAL_TOTAL_INPUT_POWER, + #'resource': 'oc-wave-router:wavelength-router/fsmgon:optical-bands/optical-band[index=4]/state/optical-power-total-input/instant', + 'resource' : 'wavelength-router', #TODO: verify resource name form mg-on model + 'endpoint' : '2', + 'skip_verify': True + }, +} + +def create_basic_sub_request_parameters() -> dict: + + device = devices['mgon'] + if device: + return { + 'host' : device['host'], + 'port' : device['port'], + 'username' : device['username'], + 'password' : device['password'], + 'connect_timeout' : 15, + 'insecure' : device['insecure'], + 'mode' : 'sample', # Subscription internal mode posibly: on_change, poll, sample + 'sample_interval' : 10, # This should be in seconds units + 'duration' : 300.0, # Duration in seconds for how long to receive samples + 'kpi' : device['kpi'], + 'resource' : device['resource'], + 'endpoint' : device['endpoint'], + } + return {} + + +def create_collector_request(): + _create_collector_request = telemetry_frontend_pb2.Collector() + _create_collector_request.collector_id.collector_id.uuid = "efef4d95-1cf1-43c4-9742-95c283dddddd" + _create_collector_request.kpi_id.kpi_id.uuid = "6e22f180-ba28-4641-b190-2287bf447777" + _create_collector_request.duration_s = 300 + _create_collector_request.interval_s = 10 + _create_collector_request.int_collector.context_id = "43813baf-195e-5da6-af20-b3d0922e71a7" + return _create_collector_request diff --git a/src/tests/ofc26_flexscale/test_ofc26_mgon_integration_V2.py b/src/tests/ofc26_flexscale/test_ofc26_mgon_integration_V2.py new file mode 100644 index 0000000000000000000000000000000000000000..cef7455f80d1d5367ee56ca720c84e18fd74ebd8 --- /dev/null +++ b/src/tests/ofc26_flexscale/test_ofc26_mgon_integration_V2.py @@ -0,0 +1,171 @@ +# Copyright 2022-2026 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 +from common.proto.kpi_manager_pb2 import KpiId +from common.proto.telemetry_frontend_pb2 import CollectorId +import time +import threading + +from common.proto import kpi_manager_pb2 +from common.proto.kpi_sample_types_pb2 import KpiSampleType + +from src.telemetry.backend.service.collector_api import DriverFactory +from tests.ofc26_flexscale.test_ofc26_messages import create_kpi_descriptor_request, create_collector_request +from src.tests.ofc26_flexscale.test_ofc26_messages import create_basic_sub_request_parameters + +from src.telemetry.backend.service.TelemetryBackendService import DriverInstanceCache, TelemetryBackendService + + +WITH_TFS = True #True/False +if WITH_TFS: + from .Fixtures import kpi_manager_client, telemetry_frontend_client +else: + from .mock_tfs_services import kpi_manager_client + +LOGGER = logging.getLogger(__name__) + + +def create_kpi_descriptor_request(descriptor_name: str = "Test_name"): + _create_kpi_request = kpi_manager_pb2.KpiDescriptor() + _create_kpi_request.kpi_id.kpi_id.uuid = "6e22f180-ba28-4641-b190-2287bf447777" + _create_kpi_request.kpi_description = descriptor_name + _create_kpi_request.kpi_sample_type = KpiSampleType.KPISAMPLETYPE_OPTICAL_TOTAL_INPUT_POWER + _create_kpi_request.device_id.device_uuid.uuid = "ddb3ef8e-ee65-5cf9-9d21-dac56a27f85b" # confirm for TFS + _create_kpi_request.service_id.service_uuid.uuid = "b2a60c5b-8c46-5707-a64a-9c6539d395f2" + # _create_kpi_request.slice_id.slice_uuid.uuid = 'SLC1' + # _create_kpi_request.endpoint_id.endpoint_uuid.uuid = str(uuid.uuid4()) + # _create_kpi_request.connection_id.connection_uuid.uuid = 'CON1' + # _create_kpi_request.link_id.link_uuid.uuid = 'LNK1' + return _create_kpi_request + +# def create_collector_filter(): +# _create_collector_filter = telemetry_frontend_pb2.CollectorFilter() +# kpi_id_obj = KpiId() +# # kpi_id_obj.kpi_id.uuid = str(uuid.uuid4()) +# kpi_id_obj.kpi_id.uuid = "8c5ca114-cdc7-4081-b128-b667fd159832" +# _create_collector_filter.kpi_id.append(kpi_id_obj) +# return _create_collector_filter + + +def test_Complete_MGON_Integration(kpi_manager_client, telemetry_frontend_client): + + # 1. KPI Descriptor Creation + LOGGER.info(" >>> test_Complete_MGON_Integration: START <<< ") + kpi_descriptor_obj = create_kpi_descriptor_request() + _search_kpi_id = kpi_descriptor_obj.kpi_id + + try: + response = kpi_manager_client.GetKpiDescriptor(_search_kpi_id) + if isinstance(response, kpi_manager_pb2.KpiDescriptor): + LOGGER.info("KPI Descriptor already exists with ID: %s. Skipping creation.", _search_kpi_id.kpi_id.uuid) + except Exception as e: + LOGGER.info("No existing KPI Descriptor found with ID: %s. Proceeding to create it. Error: %s", _search_kpi_id.kpi_id.uuid, str(e)) + response = kpi_manager_client.SetKpiDescriptor(kpi_descriptor_obj) + LOGGER.info("Response gRPC message object: {:}".format(response)) + assert isinstance(response, KpiId) + + # 2. Telemetry Collector Creation + + # _collector_request = create_collector_request() + # _search_collector_id = CollectorId() + # _search_collector_id = _collector_request.collector_id + # try: + # response_col = telemetry_frontend_client.StopCollector(_search_collector_id) + # LOGGER.info("Response gRPC message object: {:}".format(response_col)) + # if response is not None: + # response = telemetry_frontend_client.StartCollector(_collector_request) + # LOGGER.info("Response gRPC message object: {:}".format(response)) + # assert isinstance(response, CollectorId) + # except Exception as e: + # LOGGER.info("Error finding the collector with ID: %s. Proceeding to create it.", _search_collector_id.collector_id.uuid) + # response = telemetry_frontend_client.StartCollector(_collector_request) + # LOGGER.info("Response gRPC message object: {:}".format(response)) + # assert isinstance(response, CollectorId) + + # step 2: Telemetry Collector backup option + from telemetry.backend.service.collectors import COLLECTORS + from telemetry.backend.service.collector_api.DriverFactory import DriverFactory + from telemetry.backend.service.collector_api.DriverInstanceCache import DriverInstanceCache, preload_drivers + + driver_factory = DriverFactory(COLLECTORS) + driver_instance_cache = DriverInstanceCache(driver_factory) + _service = TelemetryBackendService(driver_instance_cache) + + _collector_request = create_collector_request() + _collector = create_basic_sub_request_parameters() + _coll_id = "mgon_collector_id" + LOGGER.info("Subscription for collector %s parameters: %s", _coll_id, _collector) + + _duration = _collector_request.duration_s + _interval = _collector_request.interval_s + + stop_event = threading.Event() + collector_thread = threading.Thread( + target=_service.GenericCollectorHandler, + args=( + _coll_id, _collector, "6e22f180-ba28-4641-b190-2287bf447777", _duration, _interval, + None, None, None, "43813baf-195e-5da6-af20-b3d0922e71a7", stop_event + ), + daemon=False + ) + collector_thread.start() + + def stop_after_duration(completion_time, stop_event): + time.sleep(completion_time) + if not stop_event.is_set(): + LOGGER.warning(f"Execution duration ({completion_time}) completed for Collector: {_coll_id}") + stop_event.set() + + duration_thread = threading.Thread( + target=stop_after_duration, daemon=True, name=f"stop_after_duration_{_coll_id}", + args=(_duration, stop_event) + ) + duration_thread.start() + + LOGGER.info("Sleeping for %d seconds...", _duration) + time.sleep(_duration) + + LOGGER.info("Setting stop event for Collector: %s", _coll_id) + stop_event.set() + + # Wait for collector thread to complete + collector_thread.join(timeout=10) + if collector_thread.is_alive(): + LOGGER.warning("Collector thread did not terminate within timeout") + + LOGGER.info("Done sleeping.") + LOGGER.info(" >>> test_Complete_MGON_Integration: END <<< ") + + +# def test_get_state_updates(collector, subscription_data): +# """Test getting state updates.""" +# LOGGER.info("----- Testing State Updates -----") +# collector.SubscribeState(subscription_data) + +# LOGGER.info("Requesting state updates for 300 seconds ...") +# updates_received = [] +# for samples in collector.GetState(duration=300, blocking=True): +# LOGGER.info("Received state update: %s", samples) +# updates_received.append(samples) + +# assert len(updates_received) > 0 + + +if __name__ == "__main__": + test_Complete_MGON_Integration(kpi_manager_client, telemetry_frontend_client) + + diff --git a/src/tests/ofc26_flexscale/topology/CNIT/1.context.json b/src/tests/ofc26_flexscale/topology/CNIT/1.context.json new file mode 100644 index 0000000000000000000000000000000000000000..36b3c44fd61fdec9d208a82a11d5a16c3671d004 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/CNIT/1.context.json @@ -0,0 +1,19 @@ +{ + "contexts": [ + { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "topology_ids": [], + "service_ids": [] + } + ], + "topologies": [ + { + "topology_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "topology_uuid": {"uuid": "admin"} + }, + "device_ids": [], + "link_ids": [] + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/CNIT/2.0nodes-links_no_slots.json b/src/tests/ofc26_flexscale/topology/CNIT/2.0nodes-links_no_slots.json new file mode 100644 index 0000000000000000000000000000000000000000..d9f643f0918e70981e3adc6680f572603d8c16d9 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/CNIT/2.0nodes-links_no_slots.json @@ -0,0 +1,1378 @@ +{ + "devices": [ + { + "device_id": { + "device_uuid": { + "uuid": "T1.1" + } + }, + "device_type": "optical-transponder", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.17.254.51" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "2022" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-transponder", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T1.2" + } + }, + "device_type": "optical-transponder", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.17.254.51" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "2022" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-transponder", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T1.3" + } + }, + "device_type": "optical-transponder", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.17.254.51" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "2022" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-transponder", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T2.1" + } + }, + "device_type": "optical-transponder", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.17.254.52" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "2022" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-transponder", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T2.2" + } + }, + "device_type": "optical-transponder", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.17.254.52" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "2022" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-transponder", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T2.3" + } + }, + "device_type": "optical-transponder", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.17.254.52" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "2022" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-transponder", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "device_type": "optical-roadm", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.17.254.21" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "2022" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-roadm", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "device_type": "optical-roadm", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.17.254.22" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "2022" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-roadm", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "device_type": "optical-roadm", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.17.254.23" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "2022" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-roadm", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "device_type": "optical-roadm", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.17.254.24" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "2022" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-roadm", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + } + ], + "optical_links": [ + { + "name": "T1.1-MGON1", + "link_id": { + "link_uuid": { + "uuid": "T1.1->MGON1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "T1.1" + } + }, + "endpoint_uuid": { + "uuid": "1" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-33-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "1", + "dst_port": "port-33-in", + "local_peer_port": "1", + "remote_peer_port": "port-33-out", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "T1.2-MGON1", + "link_id": { + "link_uuid": { + "uuid": "T1.2->MGON1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "T1.2" + } + }, + "endpoint_uuid": { + "uuid": "2" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-34-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "2", + "dst_port": "port-34-in", + "local_peer_port": "2", + "remote_peer_port": "port-34-out", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "T1.3-MGON1", + "link_id": { + "link_uuid": { + "uuid": "T1.3->MGON1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "T1.3" + } + }, + "endpoint_uuid": { + "uuid": "3" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-35-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "3", + "dst_port": "port-35-in", + "local_peer_port": "3", + "remote_peer_port": "port-35-out", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON1-T1.1", + "link_id": { + "link_uuid": { + "uuid": "MGON1->T1.1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-33-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T1.1" + } + }, + "endpoint_uuid": { + "uuid": "1" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-33-out", + "dst_port": "1", + "local_peer_port": "port-33-in", + "remote_peer_port": "1", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON1-T1.2", + "link_id": { + "link_uuid": { + "uuid": "MGON1->T1.2" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-34-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T1.2" + } + }, + "endpoint_uuid": { + "uuid": "2" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-34-out", + "dst_port": "2", + "local_peer_port": "port-34-in", + "remote_peer_port": "2", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON1-T1.3", + "link_id": { + "link_uuid": { + "uuid": "MGON1->T1.3" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-35-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T1.3" + } + }, + "endpoint_uuid": { + "uuid": "3" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-35-out", + "dst_port": "3", + "local_peer_port": "port-35-in", + "remote_peer_port": "3", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON1-MGON2", + "link_id": { + "link_uuid": { + "uuid": "MGON1->MGON2" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-9-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "endpoint_uuid": { + "uuid": "port-3-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-9-out", + "dst_port": "port-3-in", + "local_peer_port": "port-9-in", + "remote_peer_port": "port-3-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON2-MGON1", + "link_id": { + "link_uuid": { + "uuid": "MGON2->MGON1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "endpoint_uuid": { + "uuid": "port-3-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-9-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-3-out", + "dst_port": "port-9-in", + "local_peer_port": "port-3-in", + "remote_peer_port": "port-9-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON1-MGON3", + "link_id": { + "link_uuid": { + "uuid": "MGON1->MGON3" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-1-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "endpoint_uuid": { + "uuid": "port-3-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-1-out", + "dst_port": "port-3-in", + "local_peer_port": "port-1-in", + "remote_peer_port": "port-3-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON3-MGON1", + "link_id": { + "link_uuid": { + "uuid": "MGON3->MGON1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "endpoint_uuid": { + "uuid": "port-3-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-1-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-3-out", + "dst_port": "port-1-in", + "local_peer_port": "port-3-in", + "remote_peer_port": "port-1-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON2-MGON4", + "link_id": { + "link_uuid": { + "uuid": "MGON2->MGON4" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "endpoint_uuid": { + "uuid": "port-1-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-1-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-1-out", + "dst_port": "port-1-in", + "local_peer_port": "port-1-in", + "remote_peer_port": "port-1-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON4-MGON2", + "link_id": { + "link_uuid": { + "uuid": "MGON4->MGON2" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-1-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "endpoint_uuid": { + "uuid": "port-1-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-1-out", + "dst_port": "port-1-in", + "local_peer_port": "port-1-in", + "remote_peer_port": "port-1-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON3-MGON4", + "link_id": { + "link_uuid": { + "uuid": "MGON3->MGON4" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "endpoint_uuid": { + "uuid": "port-1-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-9-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-1-out", + "dst_port": "port-9-in", + "local_peer_port": "port-1-in", + "remote_peer_port": "port-9-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON4-MGON3", + "link_id": { + "link_uuid": { + "uuid": "MGON4->MGON3" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-9-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "endpoint_uuid": { + "uuid": "port-1-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-9-out", + "dst_port": "port-1-in", + "local_peer_port": "port-9-in", + "remote_peer_port": "port-1-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "T2.1-MGON4", + "link_id": { + "link_uuid": { + "uuid": "T2.1->MGON4" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "T2.1" + } + }, + "endpoint_uuid": { + "uuid": "1" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-33-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "1", + "dst_port": "port-33-in", + "local_peer_port": "1", + "remote_peer_port": "port-33-out", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "T2.2-MGON4", + "link_id": { + "link_uuid": { + "uuid": "T2.2->MGON4" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "T2.2" + } + }, + "endpoint_uuid": { + "uuid": "2" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-34-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "2", + "dst_port": "port-34-in", + "local_peer_port": "2", + "remote_peer_port": "port-34-out", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "T2.3-MGON4", + "link_id": { + "link_uuid": { + "uuid": "T2.3->MGON4" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "T2.3" + } + }, + "endpoint_uuid": { + "uuid": "3" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-35-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "3", + "dst_port": "port-35-in", + "local_peer_port": "3", + "remote_peer_port": "port-35-out", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON4-T2.1", + "link_id": { + "link_uuid": { + "uuid": "MGON4->T2.1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-33-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T2.1" + } + }, + "endpoint_uuid": { + "uuid": "1" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-33-out", + "dst_port": "1", + "local_peer_port": "port-33-in", + "remote_peer_port": "1", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON4-T2.2", + "link_id": { + "link_uuid": { + "uuid": "MGON4->T2.2" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-34-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T2.2" + } + }, + "endpoint_uuid": { + "uuid": "2" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-34-out", + "dst_port": "2", + "local_peer_port": "port-34-in", + "remote_peer_port": "2", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON4-T2.3", + "link_id": { + "link_uuid": { + "uuid": "MGON4->T2.3" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-35-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T2.3" + } + }, + "endpoint_uuid": { + "uuid": "3" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-35-out", + "dst_port": "3", + "local_peer_port": "port-35-in", + "remote_peer_port": "3", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/CNIT/3.0-ob-s.json b/src/tests/ofc26_flexscale/topology/CNIT/3.0-ob-s.json new file mode 100644 index 0000000000000000000000000000000000000000..d3fa89a1f3c86cbb66a02200bfa25e977d36cefc --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/CNIT/3.0-ob-s.json @@ -0,0 +1,23 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "optical-band-S"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-9-out"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-1-in"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}}, + {"custom": {"constraint_type": "preferred_band", "constraint_value": "S_BAND"}}, + {"custom": {"constraint_type": "optical-band-width[GHz]", "constraint_value": "6000"}} + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/CNIT/3.1-sc-s1-alien.json b/src/tests/ofc26_flexscale/topology/CNIT/3.1-sc-s1-alien.json new file mode 100644 index 0000000000000000000000000000000000000000..f1752d7e637ab83eb3e67bde0d3b47348f96739f --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/CNIT/3.1-sc-s1-alien.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "super-channel-s1"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-25-in"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-25-out"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "alien", "constraint_value": "1"}}, + {"custom": {"constraint_type": "alien_spectrum[GHz]", "constraint_value": "3000"}}, + {"custom": {"constraint_type": "optical_band_id", "constraint_value": "1"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}} + + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/CNIT/3.2-sc-s2-alien.json b/src/tests/ofc26_flexscale/topology/CNIT/3.2-sc-s2-alien.json new file mode 100644 index 0000000000000000000000000000000000000000..4a38e9022041b50a38aa743d79db7ed320bdfe69 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/CNIT/3.2-sc-s2-alien.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "super-channel-s2"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-26-in"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-26-out"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "alien", "constraint_value": "1"}}, + {"custom": {"constraint_type": "alien_spectrum[GHz]", "constraint_value": "2900"}}, + {"custom": {"constraint_type": "optical_band_id", "constraint_value": "1"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}} + + ], + "service_config": {"config_rules": []} + } + ] +} \ No newline at end of file diff --git a/src/tests/ofc26_flexscale/topology/CNIT/4.0.ob_l.json b/src/tests/ofc26_flexscale/topology/CNIT/4.0.ob_l.json new file mode 100644 index 0000000000000000000000000000000000000000..0f02c6122dead037955fb7b0da5cdaeb9d1173dd --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/CNIT/4.0.ob_l.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "optical-band-L"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-1-out"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-9-in"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}}, + {"custom": {"constraint_type": "preferred_band", "constraint_value": "L_BAND"}}, + {"custom": {"constraint_type": "optical-band-width[GHz]", "constraint_value": "3000"}}, + {"custom": {"constraint_type": "disjoint_optical_band_id", "constraint_value": "1"}} + + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/CNIT/4.1-sc-l1-alien.json b/src/tests/ofc26_flexscale/topology/CNIT/4.1-sc-l1-alien.json new file mode 100644 index 0000000000000000000000000000000000000000..e92ef29da561c2e30c6ab43c8ffe4a05e85f4824 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/CNIT/4.1-sc-l1-alien.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "super-channel-l1"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-27-in"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-27-out"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "alien", "constraint_value": "1"}}, + {"custom": {"constraint_type": "alien_spectrum[GHz]", "constraint_value": "1500"}}, + {"custom": {"constraint_type": "optical_band_id", "constraint_value": "2"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}} + + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/CNIT/4.2-sc-l2-alien.json b/src/tests/ofc26_flexscale/topology/CNIT/4.2-sc-l2-alien.json new file mode 100644 index 0000000000000000000000000000000000000000..bada34dbc5d771844de42e68171ef9d4d328d24b --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/CNIT/4.2-sc-l2-alien.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "super-channel-l2"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-28-in"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-28-out"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "alien", "constraint_value": "1"}}, + {"custom": {"constraint_type": "alien_spectrum[GHz]", "constraint_value": "1500"}}, + {"custom": {"constraint_type": "optical_band_id", "constraint_value": "2"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}} + + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/CNIT/5.0ob_c1.json b/src/tests/ofc26_flexscale/topology/CNIT/5.0ob_c1.json new file mode 100644 index 0000000000000000000000000000000000000000..ab56e9daaf723f5580bd045131264534d77fa34e --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/CNIT/5.0ob_c1.json @@ -0,0 +1,23 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "optical-band-C1"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-9-out"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-1-in"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}}, + {"custom": {"constraint_type": "preferred_band", "constraint_value": "C_BAND"}}, + {"custom": {"constraint_type": "optical-band-width[GHz]", "constraint_value": "3900"}} + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/CNIT/5.1ob_c2.json b/src/tests/ofc26_flexscale/topology/CNIT/5.1ob_c2.json new file mode 100644 index 0000000000000000000000000000000000000000..b9398c1066171b80fc49b8c8fdfd31155c2f3593 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/CNIT/5.1ob_c2.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "optical-band-C2"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-1-out"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-9-in"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}}, + {"custom": {"constraint_type": "preferred_band", "constraint_value": "C_BAND"}}, + {"custom": {"constraint_type": "optical-band-width[GHz]", "constraint_value": "3900"}}, + {"custom": {"constraint_type": "disjoint_optical_band_id", "constraint_value": "3"}} + + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/CNIT/5.2-sc-c-alien.json b/src/tests/ofc26_flexscale/topology/CNIT/5.2-sc-c-alien.json new file mode 100644 index 0000000000000000000000000000000000000000..831a271d2eaf62c6ab3007055595c5beb6201d0c --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/CNIT/5.2-sc-c-alien.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "super-channel-c"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-29-in"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-29-out"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "alien", "constraint_value": "1"}}, + {"custom": {"constraint_type": "alien_spectrum[GHz]", "constraint_value": "3000"}}, + {"custom": {"constraint_type": "optical_band_id", "constraint_value": "4"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}} + + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/CNIT/5.3-oc-c-service.json b/src/tests/ofc26_flexscale/topology/CNIT/5.3-oc-c-service.json new file mode 100644 index 0000000000000000000000000000000000000000..47b551a94be5a99392434a79b14f4c84a8a15137 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/CNIT/5.3-oc-c-service.json @@ -0,0 +1,23 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "optical-channel-C"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "T1.1"}}, "endpoint_uuid": {"uuid": "1"}}, + {"device_id": {"device_uuid": {"uuid": "T2.1"}}, "endpoint_uuid": {"uuid": "1"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "bandwidth[gbps]", "constraint_value": "800.0"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}}, + {"custom": {"constraint_type": "optical_band_id", "constraint_value": "4"}} + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/HHI/1.context.json b/src/tests/ofc26_flexscale/topology/HHI/1.context.json new file mode 100644 index 0000000000000000000000000000000000000000..36b3c44fd61fdec9d208a82a11d5a16c3671d004 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/HHI/1.context.json @@ -0,0 +1,19 @@ +{ + "contexts": [ + { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "topology_ids": [], + "service_ids": [] + } + ], + "topologies": [ + { + "topology_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "topology_uuid": {"uuid": "admin"} + }, + "device_ids": [], + "link_ids": [] + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/HHI/2.0nodes-links_no_slots_2TPs.json b/src/tests/ofc26_flexscale/topology/HHI/2.0nodes-links_no_slots_2TPs.json new file mode 100644 index 0000000000000000000000000000000000000000..2fa10174412789348dcdba9949d9d6d85a2f552d --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/HHI/2.0nodes-links_no_slots_2TPs.json @@ -0,0 +1,826 @@ +{ + "devices": [ + { + "device_id": { + "device_uuid": { + "uuid": "T1.1" + } + }, + "device_type": "optical-transponder", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.16.31.93" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "830" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "hussein", + "password": "flexscale", + "type": "optical-transponder", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T2.1" + } + }, + "device_type": "optical-transponder", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.16.31.93" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "3830" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "hussein", + "password": "flexscale", + "type": "optical-transponder", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "device_type": "optical-roadm", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.24.36.52" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "44551" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-roadm", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "device_type": "optical-roadm", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.24.36.52" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "44552" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-roadm", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "device_type": "optical-roadm", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.24.36.52" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "44553" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-roadm", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "device_type": "optical-roadm", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.24.36.52" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "44554" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-roadm", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + } + ], + "optical_links": [ + { + "name": "T1.1-MGON1", + "link_id": { + "link_uuid": { + "uuid": "T1.1->MGON1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "T1.1" + } + }, + "endpoint_uuid": { + "uuid": "1" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-33-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "1", + "dst_port": "port-33-in", + "local_peer_port": "1", + "remote_peer_port": "port-33-out", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON1-T1.1", + "link_id": { + "link_uuid": { + "uuid": "MGON1->T1.1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-33-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T1.1" + } + }, + "endpoint_uuid": { + "uuid": "1" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-33-out", + "dst_port": "1", + "local_peer_port": "port-33-in", + "remote_peer_port": "1", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON1-MGON2", + "link_id": { + "link_uuid": { + "uuid": "MGON1->MGON2" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-9-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "endpoint_uuid": { + "uuid": "port-3-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-9-out", + "dst_port": "port-3-in", + "local_peer_port": "port-9-in", + "remote_peer_port": "port-3-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON2-MGON1", + "link_id": { + "link_uuid": { + "uuid": "MGON2->MGON1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "endpoint_uuid": { + "uuid": "port-3-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-9-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-3-out", + "dst_port": "port-9-in", + "local_peer_port": "port-3-in", + "remote_peer_port": "port-9-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON1-MGON3", + "link_id": { + "link_uuid": { + "uuid": "MGON1->MGON3" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-10-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "endpoint_uuid": { + "uuid": "port-3-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-10-out", + "dst_port": "port-3-in", + "local_peer_port": "port-10-in", + "remote_peer_port": "port-3-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON3-MGON1", + "link_id": { + "link_uuid": { + "uuid": "MGON3->MGON1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "endpoint_uuid": { + "uuid": "port-3-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-1-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-3-out", + "dst_port": "port-10-in", + "local_peer_port": "port-3-in", + "remote_peer_port": "port-10-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON2-MGON4", + "link_id": { + "link_uuid": { + "uuid": "MGON2->MGON4" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "endpoint_uuid": { + "uuid": "port-1-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-1-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-1-out", + "dst_port": "port-1-in", + "local_peer_port": "port-1-in", + "remote_peer_port": "port-1-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON4-MGON2", + "link_id": { + "link_uuid": { + "uuid": "MGON4->MGON2" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-1-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "endpoint_uuid": { + "uuid": "port-1-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-1-out", + "dst_port": "port-1-in", + "local_peer_port": "port-1-in", + "remote_peer_port": "port-1-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON3-MGON4", + "link_id": { + "link_uuid": { + "uuid": "MGON3->MGON4" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "endpoint_uuid": { + "uuid": "port-1-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-2-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-1-out", + "dst_port": "port-2-in", + "local_peer_port": "port-1-in", + "remote_peer_port": "port-2-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON4-MGON3", + "link_id": { + "link_uuid": { + "uuid": "MGON4->MGON3" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-2-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "endpoint_uuid": { + "uuid": "port-1-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-2-out", + "dst_port": "port-1-in", + "local_peer_port": "port-2-in", + "remote_peer_port": "port-1-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "T2.1-MGON4", + "link_id": { + "link_uuid": { + "uuid": "T2.1->MGON4" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "T2.1" + } + }, + "endpoint_uuid": { + "uuid": "1" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-33-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "1", + "dst_port": "port-33-in", + "local_peer_port": "1", + "remote_peer_port": "port-33-out", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON4-T2.1", + "link_id": { + "link_uuid": { + "uuid": "MGON4->T2.1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-33-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T2.1" + } + }, + "endpoint_uuid": { + "uuid": "1" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-33-out", + "dst_port": "1", + "local_peer_port": "port-33-in", + "remote_peer_port": "1", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/HHI/2.0nodes-links_no_slots_6TPs.json b/src/tests/ofc26_flexscale/topology/HHI/2.0nodes-links_no_slots_6TPs.json new file mode 100644 index 0000000000000000000000000000000000000000..a4dea6ae3349d09a56966edbf0ecb64e99f56dc0 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/HHI/2.0nodes-links_no_slots_6TPs.json @@ -0,0 +1,1378 @@ +{ + "devices": [ + { + "device_id": { + "device_uuid": { + "uuid": "T1.1" + } + }, + "device_type": "optical-transponder", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.16.31.93" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "830" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "hussein", + "password": "flexscale", + "type": "optical-transponder", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T1.2" + } + }, + "device_type": "optical-transponder", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.16.31.93" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "830" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "hussein", + "password": "flexscale", + "type": "optical-transponder", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T1.3" + } + }, + "device_type": "optical-transponder", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.16.31.93" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "830" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "hussein", + "password": "flexscale", + "type": "optical-transponder", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T2.1" + } + }, + "device_type": "optical-transponder", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.16.31.93" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "3830" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "hussein", + "password": "flexscale", + "type": "optical-transponder", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T2.2" + } + }, + "device_type": "optical-transponder", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.16.31.93" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "3830" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "hussein", + "password": "flexscale", + "type": "optical-transponder", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T2.3" + } + }, + "device_type": "optical-transponder", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.16.31.93" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "3830" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "hussein", + "password": "flexscale", + "type": "optical-transponder", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "device_type": "optical-roadm", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.24.36.52" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "44551" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-roadm", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "device_type": "optical-roadm", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.24.36.52" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "44552" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-roadm", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "device_type": "optical-roadm", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.24.36.52" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "44553" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-roadm", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "device_type": "optical-roadm", + "device_drivers": [ + 11 + ], + "device_endpoints": [ + ], + "device_operational_status": 1, + "device_config": { + "config_rules": [ + { + "action": 1, + "custom": { + "resource_key": "_connect/address", + "resource_value": "172.24.36.52" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/port", + "resource_value": "44554" + } + }, + { + "action": 1, + "custom": { + "resource_key": "_connect/settings", + "resource_value": { + "username": "admin", + "password": "admin", + "type": "optical-roadm", + "force_running": false, + "hostkey_verify": false, + "look_for_keys": false, + "allow_agent": false, + "commit_per_rule": false, + "device_params": { + "name": "default" + }, + "manager_params": { + "timeout": 120 + }, + "endpoints": [ + ] + } + } + } + ] + } + } + ], + "optical_links": [ + { + "name": "T1.1-MGON1", + "link_id": { + "link_uuid": { + "uuid": "T1.1->MGON1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "T1.1" + } + }, + "endpoint_uuid": { + "uuid": "1" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-33-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "1", + "dst_port": "port-33-in", + "local_peer_port": "1", + "remote_peer_port": "port-33-out", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "T1.2-MGON1", + "link_id": { + "link_uuid": { + "uuid": "T1.2->MGON1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "T1.2" + } + }, + "endpoint_uuid": { + "uuid": "2" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-34-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "2", + "dst_port": "port-34-in", + "local_peer_port": "2", + "remote_peer_port": "port-34-out", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "T1.3-MGON1", + "link_id": { + "link_uuid": { + "uuid": "T1.3->MGON1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "T1.3" + } + }, + "endpoint_uuid": { + "uuid": "3" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-35-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "3", + "dst_port": "port-35-in", + "local_peer_port": "3", + "remote_peer_port": "port-35-out", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON1-T1.1", + "link_id": { + "link_uuid": { + "uuid": "MGON1->T1.1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-33-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T1.1" + } + }, + "endpoint_uuid": { + "uuid": "1" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-33-out", + "dst_port": "1", + "local_peer_port": "port-33-in", + "remote_peer_port": "1", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON1-T1.2", + "link_id": { + "link_uuid": { + "uuid": "MGON1->T1.2" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-34-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T1.2" + } + }, + "endpoint_uuid": { + "uuid": "2" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-34-out", + "dst_port": "2", + "local_peer_port": "port-34-in", + "remote_peer_port": "2", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON1-T1.3", + "link_id": { + "link_uuid": { + "uuid": "MGON1->T1.3" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-35-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T1.3" + } + }, + "endpoint_uuid": { + "uuid": "3" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-35-out", + "dst_port": "3", + "local_peer_port": "port-35-in", + "remote_peer_port": "3", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON1-MGON2", + "link_id": { + "link_uuid": { + "uuid": "MGON1->MGON2" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-9-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "endpoint_uuid": { + "uuid": "port-3-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-9-out", + "dst_port": "port-3-in", + "local_peer_port": "port-9-in", + "remote_peer_port": "port-3-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON2-MGON1", + "link_id": { + "link_uuid": { + "uuid": "MGON2->MGON1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "endpoint_uuid": { + "uuid": "port-3-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-9-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-3-out", + "dst_port": "port-9-in", + "local_peer_port": "port-3-in", + "remote_peer_port": "port-9-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON1-MGON3", + "link_id": { + "link_uuid": { + "uuid": "MGON1->MGON3" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-10-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "endpoint_uuid": { + "uuid": "port-3-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-10-out", + "dst_port": "port-3-in", + "local_peer_port": "port-10-in", + "remote_peer_port": "port-3-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON3-MGON1", + "link_id": { + "link_uuid": { + "uuid": "MGON3->MGON1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "endpoint_uuid": { + "uuid": "port-3-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON1" + } + }, + "endpoint_uuid": { + "uuid": "port-1-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-3-out", + "dst_port": "port-10-in", + "local_peer_port": "port-3-in", + "remote_peer_port": "port-10-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON2-MGON4", + "link_id": { + "link_uuid": { + "uuid": "MGON2->MGON4" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "endpoint_uuid": { + "uuid": "port-1-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-1-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-1-out", + "dst_port": "port-1-in", + "local_peer_port": "port-1-in", + "remote_peer_port": "port-1-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON4-MGON2", + "link_id": { + "link_uuid": { + "uuid": "MGON4->MGON2" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-1-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON2" + } + }, + "endpoint_uuid": { + "uuid": "port-1-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-1-out", + "dst_port": "port-1-in", + "local_peer_port": "port-1-in", + "remote_peer_port": "port-1-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON3-MGON4", + "link_id": { + "link_uuid": { + "uuid": "MGON3->MGON4" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "endpoint_uuid": { + "uuid": "port-1-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-2-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-1-out", + "dst_port": "port-2-in", + "local_peer_port": "port-1-in", + "remote_peer_port": "port-2-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON4-MGON3", + "link_id": { + "link_uuid": { + "uuid": "MGON4->MGON3" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-2-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON3" + } + }, + "endpoint_uuid": { + "uuid": "port-1-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-2-out", + "dst_port": "port-1-in", + "local_peer_port": "port-2-in", + "remote_peer_port": "port-1-out", + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "T2.1-MGON4", + "link_id": { + "link_uuid": { + "uuid": "T2.1->MGON4" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "T2.1" + } + }, + "endpoint_uuid": { + "uuid": "1" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-33-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "1", + "dst_port": "port-33-in", + "local_peer_port": "1", + "remote_peer_port": "port-33-out", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "T2.2-MGON4", + "link_id": { + "link_uuid": { + "uuid": "T2.2->MGON4" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "T2.2" + } + }, + "endpoint_uuid": { + "uuid": "2" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-34-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "2", + "dst_port": "port-34-in", + "local_peer_port": "2", + "remote_peer_port": "port-34-out", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "T2.3-MGON4", + "link_id": { + "link_uuid": { + "uuid": "T2.3->MGON4" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "T2.3" + } + }, + "endpoint_uuid": { + "uuid": "3" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-35-in" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "3", + "dst_port": "port-35-in", + "local_peer_port": "3", + "remote_peer_port": "port-35-out", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON4-T2.1", + "link_id": { + "link_uuid": { + "uuid": "MGON4->T2.1" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-33-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T2.1" + } + }, + "endpoint_uuid": { + "uuid": "1" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-33-out", + "dst_port": "1", + "local_peer_port": "port-33-in", + "remote_peer_port": "1", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON4-T2.2", + "link_id": { + "link_uuid": { + "uuid": "MGON4->T2.2" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-34-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T2.2" + } + }, + "endpoint_uuid": { + "uuid": "2" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-34-out", + "dst_port": "2", + "local_peer_port": "port-34-in", + "remote_peer_port": "2", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + }, + { + "name": "MGON4-T2.3", + "link_id": { + "link_uuid": { + "uuid": "MGON4->T2.3" + } + }, + "link_endpoint_ids": [ + { + "device_id": { + "device_uuid": { + "uuid": "MGON4" + } + }, + "endpoint_uuid": { + "uuid": "port-35-out" + } + }, + { + "device_id": { + "device_uuid": { + "uuid": "T2.3" + } + }, + "endpoint_uuid": { + "uuid": "3" + } + } + ], + "optical_details": { + "length": 0, + "src_port": "port-35-out", + "dst_port": "3", + "local_peer_port": "port-35-in", + "remote_peer_port": "3", + "used": false, + "c_slots": {"1": 1}, + "l_slots": {"101": 1}, + "s_slots": {"501": 1} + } + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/HHI/3.0-ob-s.json b/src/tests/ofc26_flexscale/topology/HHI/3.0-ob-s.json new file mode 100644 index 0000000000000000000000000000000000000000..d3fa89a1f3c86cbb66a02200bfa25e977d36cefc --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/HHI/3.0-ob-s.json @@ -0,0 +1,23 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "optical-band-S"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-9-out"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-1-in"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}}, + {"custom": {"constraint_type": "preferred_band", "constraint_value": "S_BAND"}}, + {"custom": {"constraint_type": "optical-band-width[GHz]", "constraint_value": "6000"}} + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/HHI/3.1-sc-s1-alien.json b/src/tests/ofc26_flexscale/topology/HHI/3.1-sc-s1-alien.json new file mode 100644 index 0000000000000000000000000000000000000000..37969cfb80b5c19681ab6a079ac979786dd94943 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/HHI/3.1-sc-s1-alien.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "super-channel-s1"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-25-in"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-25-out"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "alien", "constraint_value": "1"}}, + {"custom": {"constraint_type": "alien_spectrum[GHz]", "constraint_value": "3000"}}, + {"custom": {"constraint_type": "optical_band_id", "constraint_value": "3"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}} + + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/HHI/3.2-sc-s2-alien.json b/src/tests/ofc26_flexscale/topology/HHI/3.2-sc-s2-alien.json new file mode 100644 index 0000000000000000000000000000000000000000..e4d620d4762fa0b7342726eb41b1e91ea757b74d --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/HHI/3.2-sc-s2-alien.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "super-channel-s2"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-26-in"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-26-out"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "alien", "constraint_value": "1"}}, + {"custom": {"constraint_type": "alien_spectrum[GHz]", "constraint_value": "2900"}}, + {"custom": {"constraint_type": "optical_band_id", "constraint_value": "3"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}} + + ], + "service_config": {"config_rules": []} + } + ] +} \ No newline at end of file diff --git a/src/tests/ofc26_flexscale/topology/HHI/4.0.ob_l.json b/src/tests/ofc26_flexscale/topology/HHI/4.0.ob_l.json new file mode 100644 index 0000000000000000000000000000000000000000..c63243f328aa21924d828f6ec5e9bf613899adf7 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/HHI/4.0.ob_l.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "optical-band-L"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-1-out"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-9-in"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}}, + {"custom": {"constraint_type": "preferred_band", "constraint_value": "L_BAND"}}, + {"custom": {"constraint_type": "optical-band-width[GHz]", "constraint_value": "3000"}}, + {"custom": {"constraint_type": "disjoint_optical_band_id", "constraint_value": "3"}} + + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/HHI/4.1-sc-l1-alien.json b/src/tests/ofc26_flexscale/topology/HHI/4.1-sc-l1-alien.json new file mode 100644 index 0000000000000000000000000000000000000000..3d24a34e30c9f40d113ca3b7486f6a9ef25349e5 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/HHI/4.1-sc-l1-alien.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "super-channel-l1"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-27-in"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-27-out"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "alien", "constraint_value": "1"}}, + {"custom": {"constraint_type": "alien_spectrum[GHz]", "constraint_value": "1500"}}, + {"custom": {"constraint_type": "optical_band_id", "constraint_value": "4"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}} + + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/HHI/4.2-sc-l2-alien.json b/src/tests/ofc26_flexscale/topology/HHI/4.2-sc-l2-alien.json new file mode 100644 index 0000000000000000000000000000000000000000..8210c786ea4b8fd2b9acd13a7bcc1c8bbe341a5c --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/HHI/4.2-sc-l2-alien.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "super-channel-l2"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-28-in"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-28-out"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "alien", "constraint_value": "1"}}, + {"custom": {"constraint_type": "alien_spectrum[GHz]", "constraint_value": "1200"}}, + {"custom": {"constraint_type": "optical_band_id", "constraint_value": "4"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}} + + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/HHI/5.0ob_c1.json b/src/tests/ofc26_flexscale/topology/HHI/5.0ob_c1.json new file mode 100644 index 0000000000000000000000000000000000000000..ab56e9daaf723f5580bd045131264534d77fa34e --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/HHI/5.0ob_c1.json @@ -0,0 +1,23 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "optical-band-C1"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-9-out"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-1-in"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}}, + {"custom": {"constraint_type": "preferred_band", "constraint_value": "C_BAND"}}, + {"custom": {"constraint_type": "optical-band-width[GHz]", "constraint_value": "3900"}} + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/HHI/5.1ob_c2 - Copia.json b/src/tests/ofc26_flexscale/topology/HHI/5.1ob_c2 - Copia.json new file mode 100644 index 0000000000000000000000000000000000000000..d34f10d8590a3e7e4e35a2e3e63cb0e7397796a4 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/HHI/5.1ob_c2 - Copia.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "optical-band-C2"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-1-out"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-9-in"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}}, + {"custom": {"constraint_type": "preferred_band", "constraint_value": "C_BAND"}}, + {"custom": {"constraint_type": "optical-band-width[GHz]", "constraint_value": "1900"}}, + {"custom": {"constraint_type": "disjoint_optical_band_id", "constraint_value": "1"}} + + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/HHI/5.1ob_c2.json b/src/tests/ofc26_flexscale/topology/HHI/5.1ob_c2.json new file mode 100644 index 0000000000000000000000000000000000000000..31229c1dcb3828517a2d648238cb0364037d8280 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/HHI/5.1ob_c2.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "optical-band-C2"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-1-out"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-9-in"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}}, + {"custom": {"constraint_type": "preferred_band", "constraint_value": "C_BAND"}}, + {"custom": {"constraint_type": "optical-band-width[GHz]", "constraint_value": "3900"}}, + {"custom": {"constraint_type": "disjoint_optical_band_id", "constraint_value": "1"}} + + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/HHI/5.2-sc-c-alien.json b/src/tests/ofc26_flexscale/topology/HHI/5.2-sc-c-alien.json new file mode 100644 index 0000000000000000000000000000000000000000..8411862c0b3c3f82b65b9b73bab7919dbe19ecf1 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/HHI/5.2-sc-c-alien.json @@ -0,0 +1,25 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "super-channel-c"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "MGON1"}}, "endpoint_uuid": {"uuid": "port-29-in"}}, + {"device_id": {"device_uuid": {"uuid": "MGON4"}}, "endpoint_uuid": {"uuid": "port-29-out"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "alien", "constraint_value": "1"}}, + {"custom": {"constraint_type": "alien_spectrum[GHz]", "constraint_value": "1959"}}, + {"custom": {"constraint_type": "optical_band_id", "constraint_value": "2"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}} + + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/ofc26_flexscale/topology/HHI/5.3-oc-c-service.json b/src/tests/ofc26_flexscale/topology/HHI/5.3-oc-c-service.json new file mode 100644 index 0000000000000000000000000000000000000000..169b854c20adc1e30d4c0fbbbf5a06cf26089790 --- /dev/null +++ b/src/tests/ofc26_flexscale/topology/HHI/5.3-oc-c-service.json @@ -0,0 +1,23 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "optical-channel-C"} + }, + "service_type": 6, + "service_status": {"service_status": 1}, + "service_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "T1.1"}}, "endpoint_uuid": {"uuid": "1"}}, + {"device_id": {"device_uuid": {"uuid": "T2.1"}}, "endpoint_uuid": {"uuid": "1"}} + ], + "service_constraints": [ + {"custom": {"constraint_type": "type", "constraint_value": "multi_granular"}}, + {"custom": {"constraint_type": "bandwidth[gbps]", "constraint_value": "800.0"}}, + {"custom": {"constraint_type": "bidirectionality", "constraint_value": "0"}}, + {"custom": {"constraint_type": "optical_band_id", "constraint_value": "2"}} + ], + "service_config": {"config_rules": []} + } + ] +} diff --git a/src/tests/osm_end2end/.gitignore b/src/tests/osm_end2end/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..0b4ababecf620e87552ad5dc204d9b7d68565d7d --- /dev/null +++ b/src/tests/osm_end2end/.gitignore @@ -0,0 +1,21 @@ +# Copyright 2022-2026 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. + +clab-*/ +images/ +*.clab.yml.bak +*.tar +*.tar.gz +local_results/ +gnmic_lab/results/ diff --git a/src/tests/osm_end2end/.gitlab-ci.yml b/src/tests/osm_end2end/.gitlab-ci.yml new file mode 100644 index 0000000000000000000000000000000000000000..66e4eef9e2e0ff0fef358f0187dbfe28487e9f76 --- /dev/null +++ b/src/tests/osm_end2end/.gitlab-ci.yml @@ -0,0 +1,308 @@ +# Copyright 2022-2026 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. + +# Build, tag, and push the Docker image to the GitLab Docker registry +build osm_end2end: + variables: + TEST_NAME: 'osm_end2end' + stage: build + before_script: + - docker image prune --force + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY + script: + - docker buildx build -t "${TEST_NAME}:latest" -f ./src/tests/${TEST_NAME}/Dockerfile . + - docker tag "${TEST_NAME}:latest" "$CI_REGISTRY_IMAGE/${TEST_NAME}:latest" + - docker push "$CI_REGISTRY_IMAGE/${TEST_NAME}:latest" + after_script: + - docker image prune --force + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)' + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' + - changes: + - src/common/**/*.py + - proto/*.proto + - src/tests/${TEST_NAME}/**/*.{py,in,sh,yml,json,cfg} + - src/tests/${TEST_NAME}/Dockerfile + - .gitlab-ci.yml + +# Deploy TeraFlowSDN and Execute end-2-end test +end2end_test osm_end2end: + timeout: 45m + variables: + TEST_NAME: 'osm_end2end' + stage: end2end_test + # Disable to force running it after all other tasks + #needs: + # - build osm_end2end + before_script: + # Cleanup old ContainerLab scenarios + - containerlab destroy --all --cleanup || true + + # Do Docker cleanup + - docker ps --all --quiet | xargs --no-run-if-empty docker stop + - docker container prune --force + - docker ps --all --quiet | xargs --no-run-if-empty docker rm --force + - docker image prune --force + - docker network prune --force + - docker volume prune --all --force + - docker buildx prune --force + + # Check MicroK8s is ready + - microk8s status --wait-ready + - LOOP_MAX_ATTEMPTS=10 + - LOOP_COUNTER=0 + - > + while ! kubectl get pods --all-namespaces &> /dev/null; do + printf "%c" "." + sleep 1 + LOOP_COUNTER=$((LOOP_COUNTER + 1)) + if [ "$LOOP_COUNTER" -ge "$LOOP_MAX_ATTEMPTS" ]; then + echo "Max attempts reached, exiting the loop." + exit 1 + fi + done + - kubectl get pods --all-namespaces + + # Always delete Kubernetes namespaces + - export K8S_NAMESPACES=$(kubectl get namespace -o jsonpath='{.items[*].metadata.name}') + - echo "K8S_NAMESPACES=${K8S_NAMESPACES}" + + - export OLD_NATS_NAMESPACES=$(echo "${K8S_NAMESPACES}" | tr ' ' '\n' | grep -E '^nats') + - echo "OLD_NATS_NAMESPACES=${OLD_NATS_NAMESPACES}" + - > + for ns in ${OLD_NATS_NAMESPACES}; do + if [[ "$ns" == nats* ]]; then + if helm3 status "$ns" &>/dev/null; then + helm3 uninstall "$ns" -n "$ns" + else + echo "Release '$ns' not found, skipping..." + fi + fi + done + - export OLD_NAMESPACES=$(echo "${K8S_NAMESPACES}" | tr ' ' '\n' | grep -E '^(tfs|crdb|qdb|kafka|nats)') + - echo "OLD_NAMESPACES=${OLD_NAMESPACES}" + - kubectl delete namespace ${OLD_NAMESPACES} || true + + # Clean-up Kubernetes Failed pods + - > + kubectl get pods --all-namespaces --no-headers --field-selector=status.phase=Failed + -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name | + xargs --no-run-if-empty --max-args=2 kubectl delete pod --namespace + + # Login Docker repository + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY + + script: + # Download Docker image to run the test + - docker pull "${CI_REGISTRY_IMAGE}/${TEST_NAME}:latest" + + # Check MicroK8s is ready + - microk8s status --wait-ready + - LOOP_MAX_ATTEMPTS=10 + - LOOP_COUNTER=0 + - > + while ! kubectl get pods --all-namespaces &> /dev/null; do + printf "%c" "." + sleep 1 + LOOP_COUNTER=$((LOOP_COUNTER + 1)) + if [ "$LOOP_COUNTER" -ge "$LOOP_MAX_ATTEMPTS" ]; then + echo "Max attempts reached, exiting the loop." + exit 1 + fi + done + - kubectl get pods --all-namespaces + + # Deploy ContainerLab Scenario + - RUNNER_PATH=`pwd` + #- cd $PWD/src/tests/${TEST_NAME} + - mkdir -p /tmp/clab/${TEST_NAME} + - cp -R src/tests/${TEST_NAME}/clab/* /tmp/clab/${TEST_NAME} + - tree -la /tmp/clab/${TEST_NAME} + - cd /tmp/clab/${TEST_NAME} + - containerlab deploy --reconfigure --topo ${TEST_NAME}.clab.yml + - cd $RUNNER_PATH + + # Wait for initialization of Device NOSes + - sleep 3 + - docker ps -a + + # Dump configuration of the routers (before any configuration) + - containerlab exec --name ${TEST_NAME} --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" + - containerlab exec --name ${TEST_NAME} --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" + - containerlab exec --name ${TEST_NAME} --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 + #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/deviceservice.yaml + #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="frontend").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/pathcompservice.yaml + #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/serviceservice.yaml + #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/nbiservice.yaml + + - source src/tests/${TEST_NAME}/deploy_specs.sh + #- export TFS_REGISTRY_IMAGES="${CI_REGISTRY_IMAGE}" + #- export TFS_SKIP_BUILD="YES" + #- export TFS_IMAGE_TAG="latest" + #- echo "TFS_REGISTRY_IMAGES=${CI_REGISTRY_IMAGE}" + + # Deploy TeraFlowSDN + - ./deploy/crdb.sh + - ./deploy/nats.sh + - ./deploy/kafka.sh + #- ./deploy/qdb.sh + - ./deploy/tfs.sh + - ./deploy/show.sh + + ## Wait for Context to be subscribed to NATS + ## WARNING: this loop is infinite if there is no subscriber (such as monitoring). + ## Investigate if we can use a counter to limit the number of iterations. + ## For now, keep it commented out. + #- LOOP_MAX_ATTEMPTS=180 + #- LOOP_COUNTER=0 + #- > + # while ! kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server 2>&1 | grep -q 'Subscriber is Ready? True'; do + # echo "Attempt: $LOOP_COUNTER" + # kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server 2>&1; + # sleep 1; + # LOOP_COUNTER=$((LOOP_COUNTER + 1)) + # if [ "$LOOP_COUNTER" -ge "$LOOP_MAX_ATTEMPTS" ]; then + # echo "Max attempts reached, exiting the loop." + # break + # fi + # done + - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server + + - | + dump_router_configs() { + local LABEL=$1 + echo "==== ${LABEL} ====" + containerlab exec --name ${TEST_NAME} --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" + containerlab exec --name ${TEST_NAME} --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" + containerlab exec --name ${TEST_NAME} --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" + } + + ping_check() { + local SRC=$1 DST_IP=$2 PATTERN=$3 + local OUTPUT + OUTPUT=$(containerlab exec --name ${TEST_NAME} --label clab-node-name=${SRC} --cmd "ping -n -c3 ${DST_IP}" --format json) + echo "$OUTPUT" + if echo "$OUTPUT" | grep -E "$PATTERN" >/dev/null; then + echo "PASSED ${SRC}->${DST_IP}" + return 0 + fi + echo "FAILED ${SRC}->${DST_IP}" + return 1 + } + + assert_no_connectivity() { + local SRC=$1 LOCAL_IP=$2 LOCAL_GW=$3 REMOTE_GW=$4 REMOTE_IP=$5 + ping_check "${SRC}" "${LOCAL_IP}" "3 packets transmitted, 3 received, 0% packet loss" + ping_check "${SRC}" "${LOCAL_GW}" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss" + ping_check "${SRC}" "${REMOTE_GW}" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss" + ping_check "${SRC}" "${REMOTE_IP}" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss" + } + + assert_connectivity() { + local SRC=$1 LOCAL_IP=$2 LOCAL_GW=$3 REMOTE_GW=$4 REMOTE_IP=$5 + ping_check "${SRC}" "${LOCAL_IP}" "3 packets transmitted, 3 received, 0% packet loss" + ping_check "${SRC}" "${LOCAL_GW}" "3 packets transmitted, 3 received, 0% packet loss" + ping_check "${SRC}" "${REMOTE_GW}" "3 packets transmitted, 3 received, 0% packet loss" + ping_check "${SRC}" "${REMOTE_IP}" "3 packets transmitted, 3 received, 0% packet loss" + } + + run_osm_test() { + local ACTION=$1 VARIANT=$2 + docker run -t --rm --name "${TEST_NAME}-${VARIANT}-${ACTION}" --network=host \ + --env OSM_SERVICE_VARIANT="${VARIANT}" \ + --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" \ + --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" \ + "$CI_REGISTRY_IMAGE/${TEST_NAME}:latest" "/var/teraflow/run-osm-service-${ACTION}.sh" + } + + run_variant_cycle() { + local VARIANT=$1 SRC=$2 LOCAL_IP=$3 LOCAL_GW=$4 REMOTE_GW=$5 REMOTE_IP=$6 + + echo "==== Starting ${VARIANT} OSM service cycle ====" + assert_no_connectivity "${SRC}" "${LOCAL_IP}" "${LOCAL_GW}" "${REMOTE_GW}" "${REMOTE_IP}" + + run_osm_test create "${VARIANT}" + sleep 60 + dump_router_configs "after configuring ${VARIANT} OSM service" + assert_connectivity "${SRC}" "${LOCAL_IP}" "${LOCAL_GW}" "${REMOTE_GW}" "${REMOTE_IP}" + + run_osm_test remove "${VARIANT}" + sleep 60 + dump_router_configs "after removing ${VARIANT} OSM service" + assert_no_connectivity "${SRC}" "${LOCAL_IP}" "${LOCAL_GW}" "${REMOTE_GW}" "${REMOTE_IP}" + } + + # Run end-to-end test: onboard scenario + docker run -t --rm --name ${TEST_NAME}-onboarding --network=host \ + --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" \ + --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" \ + $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-onboarding.sh + + dump_router_configs "after onboarding scenario" + + # Run end-to-end test: first untagged connectivity, then tagged connectivity + run_variant_cycle "untagged" "dc1_untagged" "172.16.1.10" "172.16.1.1" "172.16.3.1" "172.16.3.10" + run_variant_cycle "tagged" "dc3_tagged" "172.17.1.10" "172.17.1.1" "172.17.3.1" "172.17.3.10" + + # Run end-to-end test: cleanup scenario + docker run -t --rm --name ${TEST_NAME}-cleanup --network=host \ + --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" \ + --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" \ + $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-cleanup.sh + + after_script: + # Dump configuration of the routers (on after_script) + - containerlab exec --name ${TEST_NAME} --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" + - containerlab exec --name ${TEST_NAME} --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" + - containerlab exec --name ${TEST_NAME} --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 + - rm -rf src/tests/${TEST_NAME}/component_logs + - mkdir -p src/tests/${TEST_NAME}/component_logs + - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server > src/tests/${TEST_NAME}/component_logs/contextservice.log 2>&1 || true + - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/deviceservice -c server > src/tests/${TEST_NAME}/component_logs/deviceservice.log 2>&1 || true + - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/pathcompservice -c frontend > src/tests/${TEST_NAME}/component_logs/pathcompservice-frontend.log 2>&1 || true + - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/serviceservice -c server > src/tests/${TEST_NAME}/component_logs/serviceservice.log 2>&1 || true + - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/nbiservice -c server > src/tests/${TEST_NAME}/component_logs/nbiservice.log 2>&1 || true + + # Clean up + - RUNNER_PATH=`pwd` + #- cd $PWD/src/tests/${TEST_NAME} + - cd /tmp/clab/${TEST_NAME} + - containerlab destroy --topo ${TEST_NAME}.clab.yml --cleanup || true + - sudo rm -rf clab-${TEST_NAME}/ .${TEST_NAME}.clab.yml.bak || true + - cd $RUNNER_PATH + - kubectl delete namespaces tfs || true + - docker ps --all --quiet | xargs --no-run-if-empty docker stop + - docker container prune --force + - docker ps --all --quiet | xargs --no-run-if-empty docker rm --force + - docker network prune --force + - docker volume prune --all --force + - docker image prune --force + + #coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/' + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)' + - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' + artifacts: + when: always + reports: + junit: ./src/tests/${TEST_NAME}/report_*.xml + paths: + - ./src/tests/${TEST_NAME}/component_logs/*.log diff --git a/src/tests/osm_end2end/Dockerfile b/src/tests/osm_end2end/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..14b821d72c2fac94e94496e1f29eb8395017a47a --- /dev/null +++ b/src/tests/osm_end2end/Dockerfile @@ -0,0 +1,86 @@ +# Copyright 2022-2026 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 python:3.9-slim + +# Install dependencies +RUN apt-get --yes --quiet --quiet update && \ + apt-get --yes --quiet --quiet install wget g++ git && \ + rm -rf /var/lib/apt/lists/* + +# Set Python to show logs as they occur +ENV PYTHONUNBUFFERED=0 + +# Get generic Python packages +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' +RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' + +# Get common Python packages +# Note: this step enables sharing the previous Docker build steps among all the Python components +WORKDIR /var/teraflow +COPY common_requirements.in common_requirements.in +RUN pip-compile --quiet --output-file=common_requirements.txt common_requirements.in +RUN python3 -m pip install -r common_requirements.txt + +# Add common files into working directory +WORKDIR /var/teraflow/common +COPY src/common/. ./ +RUN rm -rf proto + +# Create proto sub-folder, copy .proto files, and generate Python code +RUN mkdir -p /var/teraflow/common/proto +WORKDIR /var/teraflow/common/proto +RUN touch __init__.py +COPY proto/*.proto ./ +RUN python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. *.proto +RUN rm *.proto +RUN find . -type f -exec sed -i -E 's/^(import\ .*)_pb2/from . \1_pb2/g' {} \; + +# Create component sub-folders, get specific Python packages +RUN mkdir -p /var/teraflow/tests/osm_end2end +WORKDIR /var/teraflow/tests/osm_end2end +COPY src/tests/osm_end2end/requirements.in requirements.in +RUN pip-compile --quiet --output-file=requirements.txt requirements.in +RUN python3 -m pip install -r requirements.txt + +# Add component files into working directory +WORKDIR /var/teraflow +COPY src/__init__.py ./__init__.py +COPY src/common/*.py ./common/ +COPY src/common/tests/. ./common/tests/ +COPY src/common/tools/. ./common/tools/ +COPY src/context/__init__.py context/__init__.py +COPY src/context/client/. context/client/ +COPY src/device/__init__.py device/__init__.py +COPY src/device/client/. device/client/ +COPY src/monitoring/__init__.py monitoring/__init__.py +COPY src/monitoring/client/. monitoring/client/ +COPY src/service/__init__.py service/__init__.py +COPY src/service/client/. service/client/ +COPY src/slice/__init__.py slice/__init__.py +COPY src/slice/client/. slice/client/ +COPY src/vnt_manager/__init__.py vnt_manager/__init__.py +COPY src/vnt_manager/client/. vnt_manager/client/ +COPY src/tests/*.py ./tests/ +COPY src/tests/osm_end2end/__init__.py ./tests/osm_end2end/__init__.py +COPY src/tests/osm_end2end/data/. ./tests/osm_end2end/data/ +COPY src/tests/osm_end2end/tests/. ./tests/osm_end2end/tests/ +COPY src/tests/osm_end2end/scripts/. ./ + +RUN apt-get --yes --quiet --quiet update && \ + apt-get --yes --quiet --quiet install tree && \ + rm -rf /var/lib/apt/lists/* + +RUN tree -la /var/teraflow diff --git a/src/tests/osm_end2end/README.md b/src/tests/osm_end2end/README.md new file mode 100644 index 0000000000000000000000000000000000000000..8a165fa14120d672e6212ad9aaaceb85b886a8a1 --- /dev/null +++ b/src/tests/osm_end2end/README.md @@ -0,0 +1,179 @@ +# OSM Service End-to-End integration test + +## Run locally +```bash +cd ~/tfs-ctrl +src/tests/osm_end2end/run-local.sh +``` + +Useful variants: +```bash +# Only prepare the environment and deploy the topology +src/tests/osm_end2end/run-local.sh prepare build-image deploy-clab deploy-tfs onboarding + +# Reuse an existing TFS deployment and local test image +OSM_E2E_BUILD_IMAGE=no OSM_E2E_DEPLOY_TFS=no src/tests/osm_end2end/run-local.sh untagged tagged + +# Dump TFS component logs after a failed local run +src/tests/osm_end2end/run-local.sh logs +``` + +Useful environment variables: +```bash +OSM_E2E_IMAGE=osm_end2end:local +OSM_E2E_CLEAN_START=yes +OSM_E2E_BUILD_IMAGE=yes +OSM_E2E_DEPLOY_TFS=yes +OSM_E2E_CONTAINERLAB_USE_SUDO=yes +KUBECTL_CMD=kubectl +HELM_CMD=helm3 +MICROK8S_CMD=microk8s + +# If kubectl is only available through MicroK8s +KUBECTL_CMD="microk8s kubectl" +``` + +Local results are written to `src/tests/osm_end2end/local_results/`. + +## Emulated DataPlane Deployment +- ContainerLab +- Scenario +- Descriptor + +## TeraFlowSDN Deployment +```bash +cd ~/tfs-ctrl +source ~/tfs-ctrl/src/tests/osm_end2end/deploy_specs.sh +./deploy/all.sh +``` + +# ContainerLab - Arista cEOS - Commands + +## Download and install ContainerLab +```bash +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/src/tests/osm_end2end/ +docker import arista/cEOS64-lab-4.33.5M.tar ceos:4.33.5M +``` + +## Deploy scenario +```bash +cd ~/tfs-ctrl/src/tests/osm_end2end/ +sudo containerlab deploy --topo osm_end2end.clab.yml +``` + +## Inspect scenario +```bash +cd ~/tfs-ctrl/src/tests/osm_end2end/ +sudo containerlab inspect --topo osm_end2end.clab.yml +``` + +## Destroy scenario +```bash +cd ~/tfs-ctrl/src/tests/osm_end2end/ +sudo containerlab destroy --topo osm_end2end.clab.yml +sudo rm -rf clab-osm_end2end/ .osm_end2end.clab.yml.bak +``` + +## Access cEOS Bash/CLI +```bash +docker exec -it clab-osm_end2end-r1 bash +docker exec -it clab-osm_end2end-r2 bash +docker exec -it clab-osm_end2end-r3 bash +docker exec -it clab-osm_end2end-r1 Cli +docker exec -it clab-osm_end2end-r2 Cli +docker exec -it clab-osm_end2end-r3 Cli +``` + +## Configure ContainerLab clients +```bash +docker exec -it clab-osm_end2end-dc1_untagged bash + ip link set address 00:c1:ab:00:01:0b dev eth1 + ip link set eth1 up + ip address add 172.16.1.10/24 dev eth1 + ip route add 172.16.3.0/24 via 172.16.1.1 + ping 172.16.3.10 + +docker exec -it clab-osm_end2end-dc2_untagged bash + ip link set address 00:c1:ab:00:02:0b dev eth1 + ip link set eth1 up + ip address add 172.16.3.10/24 dev eth1 + ip route add 172.16.1.0/24 via 172.16.3.1 + ping 172.16.1.10 + +docker exec -it clab-osm_end2end-dc3_tagged bash + ip link set address 00:c1:ab:00:01:0a dev eth1 + ip link set eth1 up + ip link add link eth1 name eth1.125 type vlan id 125 + ip address add 172.17.1.10/24 dev eth1.125 + ip link set eth1.125 up + ip route add 172.17.3.0/24 via 172.17.1.1 + ping 172.17.3.10 + +docker exec -it clab-osm_end2end-dc4_tagged bash + ip link set address 00:c1:ab:00:02:0a dev eth1 + ip link set eth1 up + ip link add link eth1 name eth1.125 type vlan id 125 + ip address add 172.17.3.10/24 dev eth1.125 + ip link set eth1.125 up + ip route add 172.17.1.0/24 via 172.17.3.1 + ping 172.17.1.10 +``` + +## Install gNMIc +```bash +sudo bash -c "$(curl -sL https://get-gnmic.kmrd.dev)" +``` + +## gNMI Capabilities request +```bash +gnmic --address clab-osm_end2end-r1 --port 6030 --username admin --password admin --insecure capabilities +``` + +## gNMI Get request +```bash +gnmic --address clab-osm_end2end-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path / > r1.json +gnmic --address clab-osm_end2end-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-osm_end2end-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set --update-path /system/config/hostname --update-value srl11 +gnmic --address clab-osm_end2end-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path /system/config/hostname + +gnmic --address clab-osm_end2end-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set \ +--update-path '/network-instances/network-instance[name=default]/vlans/vlan[vlan-id=200]/config/vlan-id' --update-value 200 \ +--update-path '/interfaces/interface[name=Ethernet10]/config/name' --update-value '"Ethernet10"' \ +--update-path '/interfaces/interface[name=Ethernet10]/ethernet/switched-vlan/config/interface-mode' --update-value '"ACCESS"' \ +--update-path '/interfaces/interface[name=Ethernet10]/ethernet/switched-vlan/config/access-vlan' --update-value 200 \ +--update-path '/interfaces/interface[name=Ethernet2]/config/name' --update-value '"Ethernet2"' \ +--update-path '/interfaces/interface[name=Ethernet2]/ethernet/switched-vlan/config/interface-mode' --update-value '"TRUNK"' +--update-path '/interfaces/interface[name=Ethernet2]/ethernet/switched-vlan/config/trunk-vlans' --update-value 200 + +``` + +## Subscribe request +```bash +gnmic --address clab-osm_end2end-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-osm_end2end-r1 +``` + +# Check configurations done: +```bash +gnmic --address clab-osm_end2end-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path '/' > r1-all.json +gnmic --address clab-osm_end2end-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path '/network-instances' > r1-nis.json +gnmic --address clab-osm_end2end-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf get --path '/interfaces' > r1-ifs.json +``` + +# Delete elements: +```bash +--address clab-osm_end2end-r1 --port 6030 --username admin --password admin --insecure --encoding json_ietf set --delete '/network-instances/network-instance[name=b19229e8]' +--address clab-osm_end2end-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-osm_end2end-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/osm_end2end/__init__.py b/src/tests/osm_end2end/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 --- /dev/null +++ b/src/tests/osm_end2end/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2022-2026 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/osm_end2end/clab/osm_end2end.clab.yml b/src/tests/osm_end2end/clab/osm_end2end.clab.yml new file mode 100644 index 0000000000000000000000000000000000000000..6a0225550a26f426321d6fc3a26dcb57fabcef62 --- /dev/null +++ b/src/tests/osm_end2end/clab/osm_end2end.clab.yml @@ -0,0 +1,102 @@ +# Copyright 2022-2026 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: osm_end2end + +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 # tested, works + #image: ceos:4.32.0F + #image: ceos:4.33.5M + #image: ceos:4.34.4M + image: ceos:4.32.2F + #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 + + 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 + + r3: + kind: arista_ceos + mgmt-ipv4: 172.20.20.103 + startup-config: r3-startup.cfg + + dc1_untagged: + kind: linux + mgmt-ipv4: 172.20.20.201 + exec: + - ip link set address 00:c1:ab:00:01:0a dev eth1 + - ip link set eth1 up + - ip address add 172.16.1.10/24 dev eth1 + - ip route add 172.16.3.0/24 via 172.16.1.1 + + dc2_untagged: + kind: linux + mgmt-ipv4: 172.20.20.202 + exec: + - ip link set address 00:c1:ab:00:02:0a dev eth1 + - ip link set eth1 up + - ip address add 172.16.3.10/24 dev eth1 + - ip route add 172.16.1.0/24 via 172.16.3.1 + + dc3_tagged: + kind: linux + mgmt-ipv4: 172.20.20.203 + exec: + - ip link set address 00:c1:ab:00:03:0a dev eth1 + - ip link set eth1 up + - ip link add link eth1 name eth1.125 type vlan id 125 + - ip address add 172.17.1.10/24 dev eth1.125 + - ip link set eth1.125 up + - ip route add 172.17.3.0/24 via 172.17.1.1 + + dc4_tagged: + kind: linux + mgmt-ipv4: 172.20.20.204 + exec: + - ip link set address 00:c1:ab:00:04:0a dev eth1 + - ip link set eth1 up + - ip link add link eth1 name eth1.125 type vlan id 125 + - ip address add 172.17.3.10/24 dev eth1.125 + - ip link set eth1.125 up + - ip route add 172.17.1.0/24 via 172.17.3.1 + + links: + - endpoints: ["r1:eth2", "r2:eth1"] + - endpoints: ["r2:eth3", "r3:eth2"] + - endpoints: ["r1:eth10", "dc1_untagged:eth1"] + - endpoints: ["r3:eth10", "dc2_untagged:eth1"] + - endpoints: ["r1:eth11", "dc3_tagged:eth1"] + - endpoints: ["r3:eth11", "dc4_tagged:eth1"] diff --git a/src/tests/osm_end2end/clab/r1-startup.cfg b/src/tests/osm_end2end/clab/r1-startup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..ba65c2b55777babab0d95555a70dffd5e6877036 --- /dev/null +++ b/src/tests/osm_end2end/clab/r1-startup.cfg @@ -0,0 +1,50 @@ +! 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 Ethernet11 +! +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/osm_end2end/clab/r2-startup.cfg b/src/tests/osm_end2end/clab/r2-startup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..e1ab661a0ab455ab22f025ec6b2f96cf42a9f2dd --- /dev/null +++ b/src/tests/osm_end2end/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/osm_end2end/clab/r3-startup.cfg b/src/tests/osm_end2end/clab/r3-startup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..13eb9f748d31b7e74a41c69c6cfe577ff3b9c758 --- /dev/null +++ b/src/tests/osm_end2end/clab/r3-startup.cfg @@ -0,0 +1,50 @@ +! 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 Ethernet11 +! +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/osm_end2end/clab/target_config_tagged/r1-startup.cfg b/src/tests/osm_end2end/clab/target_config_tagged/r1-startup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..2965d3dd13fa92398877b64600b5b0850aea74f0 --- /dev/null +++ b/src/tests/osm_end2end/clab/target_config_tagged/r1-startup.cfg @@ -0,0 +1,64 @@ +! 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 +! +vlan 125 + name tfs-vlan-125 +! +management api gnmi + transport grpc default +! +management api netconf + transport ssh default +! +interface Ethernet2 + no switchport +! +interface Ethernet2.125 + encapsulation dot1q vlan 125 + ip address 10.254.172.69/30 +! +interface Ethernet10 +! +interface Ethernet11 + no switchport +! +interface Ethernet11.125 + encapsulation dot1q vlan 125 + ip address 172.17.1.1/24 +! +interface Management0 + ip address 172.20.20.101/24 +! +ip routing +! +ip route 0.0.0.0/0 172.20.20.1 +ip route 172.17.3.0/24 10.254.172.70 metric 1 +! +router multicast + ipv4 + software-forwarding kernel + ! + ipv6 + software-forwarding kernel +! +end diff --git a/src/tests/osm_end2end/clab/target_config_tagged/r2-startup.cfg b/src/tests/osm_end2end/clab/target_config_tagged/r2-startup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..7a4968110f69b85a029d7b4f80c891c79cfee5bb --- /dev/null +++ b/src/tests/osm_end2end/clab/target_config_tagged/r2-startup.cfg @@ -0,0 +1,63 @@ +! 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 +! +vlan 125 + name tfs-vlan-125 +! +management api gnmi + transport grpc default +! +management api netconf + transport ssh default +! +interface Ethernet1 + no switchport +! +interface Ethernet1.125 + encapsulation dot1q vlan 125 + ip address 10.254.172.70/30 +! +interface Ethernet3 + no switchport +! +interface Ethernet3.125 + encapsulation dot1q vlan 125 + ip address 10.254.187.117/30 +! +interface Management0 + ip address 172.20.20.102/24 +! +ip routing +! +ip route 0.0.0.0/0 172.20.20.1 +ip route 172.17.1.0/24 10.254.172.69 metric 1 +ip route 172.17.3.0/24 10.254.187.118 metric 1 +! +router multicast + ipv4 + software-forwarding kernel + ! + ipv6 + software-forwarding kernel +! +end diff --git a/src/tests/osm_end2end/clab/target_config_tagged/r3-startup.cfg b/src/tests/osm_end2end/clab/target_config_tagged/r3-startup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..65c9ed7f66af2a31a32a6be15409490a2cad7ab3 --- /dev/null +++ b/src/tests/osm_end2end/clab/target_config_tagged/r3-startup.cfg @@ -0,0 +1,64 @@ +! 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 +! +vlan 125 + name tfs-vlan-125 +! +management api gnmi + transport grpc default +! +management api netconf + transport ssh default +! +interface Ethernet2 + no switchport +! +interface Ethernet2.125 + encapsulation dot1q vlan 125 + ip address 10.254.187.118/30 +! +interface Ethernet10 +! +interface Ethernet11 + no switchport +! +interface Ethernet11.125 + encapsulation dot1q vlan 125 + ip address 172.17.3.1/24 +! +interface Management0 + ip address 172.20.20.103/24 +! +ip routing +! +ip route 0.0.0.0/0 172.20.20.1 +ip route 172.17.1.0/24 10.254.187.117 metric 1 +! +router multicast + ipv4 + software-forwarding kernel + ! + ipv6 + software-forwarding kernel +! +end diff --git a/src/tests/osm_end2end/clab/target_config_untagged/r1-startup.cfg b/src/tests/osm_end2end/clab/target_config_untagged/r1-startup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..16a0b0de56935b0852ddf03ba431e17e1073aa4c --- /dev/null +++ b/src/tests/osm_end2end/clab/target_config_untagged/r1-startup.cfg @@ -0,0 +1,55 @@ +! 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 + no switchport + ip address 10.254.172.69/30 +! +interface Ethernet10 + no switchport + ip address 172.16.1.1/24 +! +interface Ethernet11 +! +interface Management0 + ip address 172.20.20.101/24 +! +ip routing +! +ip route 0.0.0.0/0 172.20.20.1 +ip route 172.16.3.0/24 10.254.172.70 metric 1 +! +router multicast + ipv4 + software-forwarding kernel + ! + ipv6 + software-forwarding kernel +! +end diff --git a/src/tests/osm_end2end/clab/target_config_untagged/r2-startup.cfg b/src/tests/osm_end2end/clab/target_config_untagged/r2-startup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..3e59ef041bd327bcbfee3697b7531a08978333f2 --- /dev/null +++ b/src/tests/osm_end2end/clab/target_config_untagged/r2-startup.cfg @@ -0,0 +1,54 @@ +! 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 + no switchport + ip address 10.254.172.70/30 +! +interface Ethernet3 + no switchport + ip address 10.254.187.117/30 +! +interface Management0 + ip address 172.20.20.102/24 +! +ip routing +! +ip route 0.0.0.0/0 172.20.20.1 +ip route 172.16.1.0/24 10.254.172.69 metric 1 +ip route 172.16.3.0/24 10.254.187.118 metric 1 +! +router multicast + ipv4 + software-forwarding kernel + ! + ipv6 + software-forwarding kernel +! +end diff --git a/src/tests/osm_end2end/clab/target_config_untagged/r3-startup.cfg b/src/tests/osm_end2end/clab/target_config_untagged/r3-startup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..47f0bfe2941da4c887e22af5c907c7138be483df --- /dev/null +++ b/src/tests/osm_end2end/clab/target_config_untagged/r3-startup.cfg @@ -0,0 +1,55 @@ +! 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 + no switchport + ip address 10.254.187.118/30 +! +interface Ethernet10 + no switchport + ip address 172.16.3.1/24 +! +interface Ethernet11 +! +interface Management0 + ip address 172.20.20.103/24 +! +ip routing +! +ip route 0.0.0.0/0 172.20.20.1 +ip route 172.16.1.0/24 10.254.187.117 metric 1 +! +router multicast + ipv4 + software-forwarding kernel + ! + ipv6 + software-forwarding kernel +! +end diff --git a/src/tests/osm_end2end/data/tfs-topology.json b/src/tests/osm_end2end/data/tfs-topology.json new file mode 100644 index 0000000000000000000000000000000000000000..2bc60573f0bafb84126cb19a31c00f8d19c82abe --- /dev/null +++ b/src/tests/osm_end2end/data/tfs-topology.json @@ -0,0 +1,178 @@ +{ + "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_untagged"}}, "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_untagged"}}, "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": "dc3_tagged"}}, "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": "dc4_tagged"}}, "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 + }}} + ]} + }, + { + "device_id": {"device_uuid": {"uuid": "r3"}}, "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.103"}}, + {"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": "r2/Ethernet3==r3/Ethernet2"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "r2"}}, "endpoint_uuid": {"uuid": "Ethernet3"}}, + {"device_id": {"device_uuid": {"uuid": "r3"}}, "endpoint_uuid": {"uuid": "Ethernet2"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "r3/Ethernet2==r2/Ethernet3"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "r3"}}, "endpoint_uuid": {"uuid": "Ethernet2"}}, + {"device_id": {"device_uuid": {"uuid": "r2"}}, "endpoint_uuid": {"uuid": "Ethernet3"}} + ] + }, + + { + "link_id": {"link_uuid": {"uuid": "r1/Ethernet10==dc1_untagged/eth1"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "r1"}}, "endpoint_uuid": {"uuid": "Ethernet10"}}, + {"device_id": {"device_uuid": {"uuid": "dc1_untagged"}}, "endpoint_uuid": {"uuid": "eth1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "dc1_untagged/eth1==r1/Ethernet10"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "dc1_untagged"}}, "endpoint_uuid": {"uuid": "eth1"}}, + {"device_id": {"device_uuid": {"uuid": "r1"}}, "endpoint_uuid": {"uuid": "Ethernet10"}} + ] + }, + + { + "link_id": {"link_uuid": {"uuid": "r3/Ethernet10==dc2_untagged/eth1"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "r3"}}, "endpoint_uuid": {"uuid": "Ethernet10"}}, + {"device_id": {"device_uuid": {"uuid": "dc2_untagged"}}, "endpoint_uuid": {"uuid": "eth1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "dc2_untagged/eth1==r3/Ethernet10"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "dc2_untagged"}}, "endpoint_uuid": {"uuid": "eth1"}}, + {"device_id": {"device_uuid": {"uuid": "r3"}}, "endpoint_uuid": {"uuid": "Ethernet10"}} + ] + }, + + { + "link_id": {"link_uuid": {"uuid": "r1/Ethernet11==dc3_tagged/eth1"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "r1"}}, "endpoint_uuid": {"uuid": "Ethernet11"}}, + {"device_id": {"device_uuid": {"uuid": "dc3_tagged"}}, "endpoint_uuid": {"uuid": "eth1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "dc3_tagged/eth1==r1/Ethernet11"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "dc3_tagged"}}, "endpoint_uuid": {"uuid": "eth1"}}, + {"device_id": {"device_uuid": {"uuid": "r1"}}, "endpoint_uuid": {"uuid": "Ethernet11"}} + ] + }, + + { + "link_id": {"link_uuid": {"uuid": "r3/Ethernet11==dc4_tagged/eth1"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "r3"}}, "endpoint_uuid": {"uuid": "Ethernet11"}}, + {"device_id": {"device_uuid": {"uuid": "dc4_tagged"}}, "endpoint_uuid": {"uuid": "eth1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "dc4_tagged/eth1==r3/Ethernet11"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "dc4_tagged"}}, "endpoint_uuid": {"uuid": "eth1"}}, + {"device_id": {"device_uuid": {"uuid": "r3"}}, "endpoint_uuid": {"uuid": "Ethernet11"}} + ] + } + ] +} diff --git a/src/tests/osm_end2end/deploy-scripts/clab-cli-dc1.sh b/src/tests/osm_end2end/deploy-scripts/clab-cli-dc1.sh new file mode 100755 index 0000000000000000000000000000000000000000..3774f6eb091e26fab93f66c11435e15dd3b2a04c --- /dev/null +++ b/src/tests/osm_end2end/deploy-scripts/clab-cli-dc1.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Copyright 2022-2026 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-osm_end2end-dc1_untagged bash diff --git a/src/tests/osm_end2end/deploy-scripts/clab-cli-dc2.sh b/src/tests/osm_end2end/deploy-scripts/clab-cli-dc2.sh new file mode 100755 index 0000000000000000000000000000000000000000..b82e60a41650ce0f5e89e897a6333a92d4277284 --- /dev/null +++ b/src/tests/osm_end2end/deploy-scripts/clab-cli-dc2.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Copyright 2022-2026 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-osm_end2end-dc2_untagged bash diff --git a/src/tests/osm_end2end/deploy-scripts/clab-cli-dc3.sh b/src/tests/osm_end2end/deploy-scripts/clab-cli-dc3.sh new file mode 100644 index 0000000000000000000000000000000000000000..b747e7788fcc4f14da318f1ab70397f3342010b2 --- /dev/null +++ b/src/tests/osm_end2end/deploy-scripts/clab-cli-dc3.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Copyright 2022-2026 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-osm_end2end-dc3_tagged bash diff --git a/src/tests/osm_end2end/deploy-scripts/clab-cli-dc4.sh b/src/tests/osm_end2end/deploy-scripts/clab-cli-dc4.sh new file mode 100644 index 0000000000000000000000000000000000000000..db17f6eeed3c58a8417d6f93330999721c482075 --- /dev/null +++ b/src/tests/osm_end2end/deploy-scripts/clab-cli-dc4.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Copyright 2022-2026 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-osm_end2end-dc4_tagged bash diff --git a/src/tests/osm_end2end/deploy-scripts/clab-cli-r1.sh b/src/tests/osm_end2end/deploy-scripts/clab-cli-r1.sh new file mode 100755 index 0000000000000000000000000000000000000000..10e33f04e98daed0dfca8d76ca9a6f3a4f821036 --- /dev/null +++ b/src/tests/osm_end2end/deploy-scripts/clab-cli-r1.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Copyright 2022-2026 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-osm_end2end-r1 Cli diff --git a/src/tests/osm_end2end/deploy-scripts/clab-cli-r2.sh b/src/tests/osm_end2end/deploy-scripts/clab-cli-r2.sh new file mode 100755 index 0000000000000000000000000000000000000000..7b541efca40890234c6105f68ff974ca2e10d165 --- /dev/null +++ b/src/tests/osm_end2end/deploy-scripts/clab-cli-r2.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Copyright 2022-2026 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-osm_end2end-r2 Cli diff --git a/src/tests/osm_end2end/deploy-scripts/clab-cli-r3.sh b/src/tests/osm_end2end/deploy-scripts/clab-cli-r3.sh new file mode 100755 index 0000000000000000000000000000000000000000..426650ad20c4a6e4ff7e72a0bb2fa6ba35ca401e --- /dev/null +++ b/src/tests/osm_end2end/deploy-scripts/clab-cli-r3.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Copyright 2022-2026 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-osm_end2end-r3 Cli diff --git a/src/tests/osm_end2end/deploy-scripts/clab-deploy.sh b/src/tests/osm_end2end/deploy-scripts/clab-deploy.sh new file mode 100755 index 0000000000000000000000000000000000000000..727070995e23c43bce2da29f583df85076db7b25 --- /dev/null +++ b/src/tests/osm_end2end/deploy-scripts/clab-deploy.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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/src/tests/osm_end2end +sudo containerlab deploy --topo clab/osm_end2end.clab.yml diff --git a/src/tests/osm_end2end/deploy-scripts/clab-destroy.sh b/src/tests/osm_end2end/deploy-scripts/clab-destroy.sh new file mode 100755 index 0000000000000000000000000000000000000000..4997c4f175d3ad07af967bb0ce19bf9743e35970 --- /dev/null +++ b/src/tests/osm_end2end/deploy-scripts/clab-destroy.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# Copyright 2022-2026 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/src/tests/osm_end2end +sudo containerlab destroy --topo clab/osm_end2end.clab.yml +sudo rm -rf clab/clab-osm_end2end/ clab/.osm_end2end.clab.yml.bak diff --git a/src/tests/osm_end2end/deploy-scripts/clab-inspect.sh b/src/tests/osm_end2end/deploy-scripts/clab-inspect.sh new file mode 100755 index 0000000000000000000000000000000000000000..33e180b2975e524cce333cd90ae27dff9aa3afbb --- /dev/null +++ b/src/tests/osm_end2end/deploy-scripts/clab-inspect.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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/src/tests/osm_end2end +sudo containerlab inspect --topo osm_end2end.clab.yml diff --git a/src/tests/osm_end2end/deploy_specs.sh b/src/tests/osm_end2end/deploy_specs.sh new file mode 100755 index 0000000000000000000000000000000000000000..addf698b8337887088153306698e91ca5a1a5499 --- /dev/null +++ b/src/tests/osm_end2end/deploy_specs.sh @@ -0,0 +1,208 @@ +#!/bin/bash +# Copyright 2022-2026 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" + +# 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/src/tests/osm_end2end/gnmic_lab/README.md b/src/tests/osm_end2end/gnmic_lab/README.md new file mode 100644 index 0000000000000000000000000000000000000000..596b86b300875cf90216b9838a78cfce855c6a29 --- /dev/null +++ b/src/tests/osm_end2end/gnmic_lab/README.md @@ -0,0 +1,36 @@ +# OSM End-to-End gNMI Lab + +This folder contains an isolated Containerlab scenario and direct `gnmic` +helpers to validate cEOS OpenConfig behavior without involving TeraFlowSDN. + +The objective is to determine which OpenConfig payloads correctly configure: + +- untagged routed access ports +- tagged routed access ports +- inter-router L3 links + +and to inspect the resulting EOS CLI configuration. + +The current verified findings are tracked in [REPORT.md](./REPORT.md). + +Typical workflow: + +```bash +cd ~/tfs-ctrl +src/tests/osm_end2end/gnmic_lab/run-lab.sh deploy +src/tests/osm_end2end/gnmic_lab/run-lab.sh baseline +src/tests/osm_end2end/gnmic_lab/run-lab.sh experiment-tagged-subif125 +src/tests/osm_end2end/gnmic_lab/run-lab.sh destroy +``` + +Results are written under `src/tests/osm_end2end/gnmic_lab/results/`. + +Useful experiment actions: + +- `experiment-untagged` +- `experiment-tagged-subif125` +- `experiment-tagged-subif0-and-125` +- `experiment-tagged-subif0-then-125` +- `experiment-tagged-subif0-vlan125` +- `experiment-tagged-cli-baseline-and-capture` +- `experiment-tagged-replace-inferred` diff --git a/src/tests/osm_end2end/gnmic_lab/REPORT.md b/src/tests/osm_end2end/gnmic_lab/REPORT.md new file mode 100644 index 0000000000000000000000000000000000000000..26fa0af9bfe7fa4b49f83e611ac2d3c9d09cc920 --- /dev/null +++ b/src/tests/osm_end2end/gnmic_lab/REPORT.md @@ -0,0 +1,65 @@ +# gNMI Lab Report + +This file tracks direct `gnmic` experiments against the isolated +`osm_end2end_gnmic` Containerlab scenario. + +## Verified + +- Untagged routed access works with parent interface type + `iana-if-type:ethernetCsmacd` and IPv4 configured on `subinterface[0]`. + Resulting EOS CLI on `Ethernet10` is: + - `no switchport` + - `ip address 172.16.x.1/24` +- Tagged access with parent interface type `iana-if-type:ethernetCsmacd` and + IPv4 plus VLAN 125 configured on `subinterface[125]` is accepted by cEOS, + but does not by itself turn the parent into `no switchport`. + Resulting EOS CLI on `Ethernet11` is: + - parent `Ethernet11` remains empty + - child `Ethernet11.125` is created with `encapsulation dot1q vlan 125` + and the correct IP address + Functional result: + - `dc3_tagged -> 172.17.1.1` fails with `Destination Host Unreachable` + - the failure is at the first hop, before routed transit matters +- Tagged access with VLAN 125 configured on `subinterface[0]` is rejected by + cEOS as invalid. +- When the parent `Ethernet11` is manually switched to routed mode with CLI + `no switchport`, the exact same tagged `subinterface[125]` setup works. + Functional result after also installing tagged transit routes on `r2`: + - `dc3_tagged -> 172.17.1.1` succeeds + - `dc3_tagged -> 172.17.3.10` succeeds end to end +- On a fresh lab, the tagged case also works end to end when `Ethernet11` is + configured with a gNMI `REPLACE` of the full interface subtree containing: + - parent `config.type = iana-if-type:ethernetCsmacd` + - `subinterface[0]` with `ipv4.config.enabled = true` + - `subinterface[125]` with VLAN 125 match and IPv4 address + Functional result: + - `dc3_tagged -> 172.17.1.1` succeeds + - `dc3_tagged -> 172.17.3.10` succeeds end to end +- The working tagged state, read back over gNMI, looks like: + - parent interface `config.type = iana-if-type:ethernetCsmacd` + - `openconfig-if-ethernet:ethernet` subtree present on the parent + - `subinterface[0]` present with IPv4 enabled + - `subinterface[125]` present with VLAN 125 match and IPv4 address + +## Current Conclusion + +- The routed core and static routes are not the blocker for the tagged case. +- The tagged failure with the earlier direct gNMI tests is specifically that + an `UPDATE` of only `subinterface[125]` does not cause cEOS to convert + `Ethernet11` into a routed parent port. +- TFS should not try to model the parent as `l3ipvlan` on cEOS. The working + parent type is still `iana-if-type:ethernetCsmacd`. +- A pure OpenConfig solution does exist in this lab: + - gNMI `REPLACE` the full `Ethernet11` subtree + - include both `subinterface[0]` and `subinterface[125]` +- The practical TFS implication is that the EOS tagged-access path likely needs + interface-subtree replacement semantics, not just incremental updates of the + VLAN subinterface. + +## Pending + +- Confirm whether `UPDATE` of the full subtree with both `subinterface[0]` and + `subinterface[125]` can also work, or whether `REPLACE` is strictly required + on cEOS. +- Translate the successful `REPLACE` behavior into the TFS `gnmi_openconfig` + driver or YANG handler logic for tagged routed access interfaces. diff --git a/src/tests/osm_end2end/gnmic_lab/osm_end2end_gnmic.clab.yml b/src/tests/osm_end2end/gnmic_lab/osm_end2end_gnmic.clab.yml new file mode 100644 index 0000000000000000000000000000000000000000..66bc172d58d00c3e8353d613ca5ca6ccb5ce6c51 --- /dev/null +++ b/src/tests/osm_end2end/gnmic_lab/osm_end2end_gnmic.clab.yml @@ -0,0 +1,92 @@ +# Copyright 2022-2026 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. + +name: osm_end2end_gnmic + +mgmt: + network: mgmt-net + ipv4-subnet: 172.20.30.0/24 + +topology: + kinds: + arista_ceos: + kind: arista_ceos + image: ceos:4.32.2F + linux: + kind: linux + image: ghcr.io/hellt/network-multitool:latest + + nodes: + r1: + kind: arista_ceos + mgmt-ipv4: 172.20.30.101 + startup-config: ../clab/r1-startup.cfg + + r2: + kind: arista_ceos + mgmt-ipv4: 172.20.30.102 + startup-config: ../clab/r2-startup.cfg + + r3: + kind: arista_ceos + mgmt-ipv4: 172.20.30.103 + startup-config: ../clab/r3-startup.cfg + + dc1_untagged: + kind: linux + mgmt-ipv4: 172.20.30.201 + exec: + - ip link set address 00:c1:ab:00:01:0a dev eth1 + - ip link set eth1 up + - ip address add 172.16.1.10/24 dev eth1 + - ip route add 172.16.3.0/24 via 172.16.1.1 + + dc2_untagged: + kind: linux + mgmt-ipv4: 172.20.30.202 + exec: + - ip link set address 00:c1:ab:00:02:0a dev eth1 + - ip link set eth1 up + - ip address add 172.16.3.10/24 dev eth1 + - ip route add 172.16.1.0/24 via 172.16.3.1 + + dc3_tagged: + kind: linux + mgmt-ipv4: 172.20.30.203 + exec: + - ip link set address 00:c1:ab:00:03:0a dev eth1 + - ip link set eth1 up + - ip link add link eth1 name eth1.125 type vlan id 125 + - ip address add 172.17.1.10/24 dev eth1.125 + - ip link set eth1.125 up + - ip route add 172.17.3.0/24 via 172.17.1.1 + + dc4_tagged: + kind: linux + mgmt-ipv4: 172.20.30.204 + exec: + - ip link set address 00:c1:ab:00:04:0a dev eth1 + - ip link set eth1 up + - ip link add link eth1 name eth1.125 type vlan id 125 + - ip address add 172.17.3.10/24 dev eth1.125 + - ip link set eth1.125 up + - ip route add 172.17.1.0/24 via 172.17.3.1 + + links: + - endpoints: ["r1:eth2", "r2:eth1"] + - endpoints: ["r2:eth3", "r3:eth2"] + - endpoints: ["r1:eth10", "dc1_untagged:eth1"] + - endpoints: ["r3:eth10", "dc2_untagged:eth1"] + - endpoints: ["r1:eth11", "dc3_tagged:eth1"] + - endpoints: ["r3:eth11", "dc4_tagged:eth1"] diff --git a/src/tests/osm_end2end/gnmic_lab/run-lab.sh b/src/tests/osm_end2end/gnmic_lab/run-lab.sh new file mode 100755 index 0000000000000000000000000000000000000000..d337926c1aeee08c7f4b944047ff0019ff99cdba --- /dev/null +++ b/src/tests/osm_end2end/gnmic_lab/run-lab.sh @@ -0,0 +1,458 @@ +#!/bin/bash +# Copyright 2022-2026 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. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)" +LAB_NAME="osm_end2end_gnmic" +TOPO_FILE="${SCRIPT_DIR}/osm_end2end_gnmic.clab.yml" +RESULTS_DIR="${SCRIPT_DIR}/results" + +OSM_GNMIC_USE_SUDO="${OSM_GNMIC_USE_SUDO:-yes}" +GNMIC_USER="${GNMIC_USER:-admin}" +GNMIC_PASS="${GNMIC_PASS:-admin}" +GNMIC_PORT="${GNMIC_PORT:-6030}" +GNMIC_ENCODING="${GNMIC_ENCODING:-json_ietf}" +GNMIC_TIMEOUT="${GNMIC_TIMEOUT:-30s}" + +mkdir -p "${RESULTS_DIR}" + +clab() { + if [[ "${OSM_GNMIC_USE_SUDO}" == "yes" ]]; then + sudo containerlab "$@" + else + containerlab "$@" + fi +} + +gnmi() { + local address=$1 + shift + gnmic --address "${address}" --port "${GNMIC_PORT}" \ + --username "${GNMIC_USER}" --password "${GNMIC_PASS}" \ + --insecure --encoding "${GNMIC_ENCODING}" --timeout "${GNMIC_TIMEOUT}" "$@" +} + +wait_for_router_ready() { + local router=$1 + local address + address="$(router_address "${router}")" + + echo "Waiting for ${router} gNMI readiness at ${address}..." + for _ in $(seq 1 60); do + if gnmi "${address}" capabilities >/dev/null 2>&1 && \ + gnmi "${address}" get --path /system/state/hostname >/dev/null 2>&1; then + echo "${router} is ready." + return 0 + fi + sleep 2 + done + + echo "Timed out waiting for ${router} gNMI readiness" >&2 + return 1 +} + +gnmi_update_json() { + local address=$1 + local path=$2 + local json_value=$3 + local payload_file + payload_file="$(mktemp)" + printf '%s\n' "${json_value}" > "${payload_file}" + gnmi "${address}" set --update-path "${path}" --update-file "${payload_file}" + rm -f "${payload_file}" +} + +gnmi_replace_json() { + local address=$1 + local path=$2 + local json_value=$3 + local payload_file + payload_file="$(mktemp)" + printf '%s\n' "${json_value}" > "${payload_file}" + gnmi "${address}" set --replace-path "${path}" --replace-file "${payload_file}" + rm -f "${payload_file}" +} + +router_address() { + case "$1" in + r1) echo "172.20.30.101" ;; + r2) echo "172.20.30.102" ;; + r3) echo "172.20.30.103" ;; + *) echo "Unknown router: $1" >&2; exit 1 ;; + esac +} + +show_run() { + local router=$1 + docker exec "clab-${LAB_NAME}-${router}" \ + bash -lc 'FastCli -p 15 -c "show running-config"' +} + +show_run_interfaces() { + local router=$1 + local iface_list=$2 + docker exec "clab-${LAB_NAME}-${router}" \ + bash -lc "FastCli -p 15 -c 'show running-config interfaces ${iface_list}'" +} + +cli_config() { + local router=$1 + local commands=$2 + docker exec "clab-${LAB_NAME}-${router}" \ + bash -lc "printf '%b' \"configure terminal\n${commands}\nend\n\" | Cli -p 15" +} + +ping_node() { + local node=$1 + local ip=$2 + clab exec --name "${LAB_NAME}" --label "clab-node-name=${node}" \ + --cmd "ping -n -c3 ${ip}" --format json +} + +deploy() { + clab destroy --cleanup --topo "${TOPO_FILE}" || true + clab deploy --reconfigure --topo "${TOPO_FILE}" + wait_for_router_ready r1 + wait_for_router_ready r2 + wait_for_router_ready r3 +} + +destroy() { + clab destroy --cleanup --topo "${TOPO_FILE}" || true +} + +baseline() { + show_run r1 | tee "${RESULTS_DIR}/r1-baseline.txt" + show_run r2 | tee "${RESULTS_DIR}/r2-baseline.txt" + show_run r3 | tee "${RESULTS_DIR}/r3-baseline.txt" + gnmi "$(router_address r1)" get --path /interfaces/interface --path /network-instances/network-instance \ + > "${RESULTS_DIR}/r1-baseline-gnmi.json" + gnmi "$(router_address r2)" get --path /interfaces/interface --path /network-instances/network-instance \ + > "${RESULTS_DIR}/r2-baseline-gnmi.json" + gnmi "$(router_address r3)" get --path /interfaces/interface --path /network-instances/network-instance \ + > "${RESULTS_DIR}/r3-baseline-gnmi.json" +} + +capture_router_state() { + local label=$1 + local router=$2 + local address + local output_dir + local interface_args=() + local interface_show="" + address="$(router_address "${router}")" + output_dir="${RESULTS_DIR}/${label}" + + mkdir -p "${output_dir}" + show_run "${router}" > "${output_dir}/${router}-show-run.txt" + + case "${router}" in + r1|r3) + interface_show="Ethernet2 Ethernet10 Ethernet11" + interface_args=( + --path "/interfaces/interface[name=Ethernet2]" + --path "/interfaces/interface[name=Ethernet10]" + --path "/interfaces/interface[name=Ethernet11]" + ) + ;; + r2) + interface_show="Ethernet1 Ethernet3" + interface_args=( + --path "/interfaces/interface[name=Ethernet1]" + --path "/interfaces/interface[name=Ethernet3]" + ) + ;; + *) + echo "Unsupported router for capture: ${router}" >&2 + exit 1 + ;; + esac + + show_run_interfaces "${router}" "${interface_show}" \ + > "${output_dir}/${router}-show-run-interfaces.txt" + gnmi "${address}" get \ + "${interface_args[@]}" \ + --path "/network-instances/network-instance[name=default]/protocols/protocol[identifier=STATIC][name=STATIC]" \ + > "${output_dir}/${router}-state.json" +} + +capture_lab_state() { + local label=$1 + capture_router_state "${label}" r1 + capture_router_state "${label}" r2 + capture_router_state "${label}" r3 +} + +configure_router_l3_links() { + local router=$1 + local uplink=$2 + local uplink_ip=$3 + local uplink_prefix=$4 + local downlink=${5:-} + local downlink_ip=${6:-} + local downlink_prefix=${7:-} + + local address + address="$(router_address "${router}")" + + gnmi_update_json "${address}" \ + "/interfaces/interface[name=${uplink}]" \ + "{\"name\":\"${uplink}\",\"config\":{\"name\":\"${uplink}\",\"type\":\"iana-if-type:ethernetCsmacd\",\"enabled\":true},\"subinterfaces\":{\"subinterface\":[{\"index\":0,\"config\":{\"index\":0,\"enabled\":true},\"openconfig-if-ip:ipv4\":{\"config\":{\"enabled\":true},\"addresses\":{\"address\":[{\"ip\":\"${uplink_ip}\",\"config\":{\"ip\":\"${uplink_ip}\",\"prefix-length\":${uplink_prefix}}}]}}}]}}" + + if [[ -n "${downlink}" ]]; then + gnmi_update_json "${address}" \ + "/interfaces/interface[name=${downlink}]" \ + "{\"name\":\"${downlink}\",\"config\":{\"name\":\"${downlink}\",\"type\":\"iana-if-type:ethernetCsmacd\",\"enabled\":true},\"subinterfaces\":{\"subinterface\":[{\"index\":0,\"config\":{\"index\":0,\"enabled\":true},\"openconfig-if-ip:ipv4\":{\"config\":{\"enabled\":true},\"addresses\":{\"address\":[{\"ip\":\"${downlink_ip}\",\"config\":{\"ip\":\"${downlink_ip}\",\"prefix-length\":${downlink_prefix}}}]}}}]}}" + fi +} + +configure_static_route() { + local router=$1 + local prefix=$2 + local next_hop=$3 + local index=$4 + local address + address="$(router_address "${router}")" + + gnmi_update_json "${address}" \ + "/network-instances/network-instance[name=default]/protocols/protocol[identifier=STATIC][name=STATIC]" \ + "{\"identifier\":\"openconfig-policy-types:STATIC\",\"name\":\"STATIC\",\"config\":{\"identifier\":\"openconfig-policy-types:STATIC\",\"name\":\"STATIC\",\"enabled\":true},\"static-routes\":{\"static\":[{\"prefix\":\"${prefix}\",\"config\":{\"prefix\":\"${prefix}\"},\"next-hops\":{\"next-hop\":[{\"index\":\"${index}\",\"config\":{\"index\":\"${index}\",\"next-hop\":\"${next_hop}\",\"metric\":1}}]}}]}}" +} + +configure_access_subif0() { + local router=$1 + local iface=$2 + local ip=$3 + local prefix=$4 + local address + address="$(router_address "${router}")" + + gnmi_update_json "${address}" \ + "/interfaces/interface[name=${iface}]" \ + "{\"name\":\"${iface}\",\"config\":{\"name\":\"${iface}\",\"type\":\"iana-if-type:ethernetCsmacd\",\"enabled\":true},\"subinterfaces\":{\"subinterface\":[{\"index\":0,\"config\":{\"index\":0,\"enabled\":true},\"openconfig-if-ip:ipv4\":{\"config\":{\"enabled\":true},\"addresses\":{\"address\":[{\"ip\":\"${ip}\",\"config\":{\"ip\":\"${ip}\",\"prefix-length\":${prefix}}}]}}}]}}" +} + +configure_access_subif0_empty() { + local router=$1 + local iface=$2 + local address + address="$(router_address "${router}")" + + gnmi_update_json "${address}" \ + "/interfaces/interface[name=${iface}]" \ + "{\"name\":\"${iface}\",\"config\":{\"name\":\"${iface}\",\"type\":\"iana-if-type:ethernetCsmacd\",\"enabled\":true},\"subinterfaces\":{\"subinterface\":[{\"index\":0,\"config\":{\"index\":0,\"enabled\":true},\"openconfig-if-ip:ipv4\":{\"config\":{\"enabled\":true}}}]}}" +} + +configure_access_subif125() { + local router=$1 + local iface=$2 + local ip=$3 + local prefix=$4 + local vlan_id=$5 + local address + address="$(router_address "${router}")" + + gnmi_update_json "${address}" \ + "/interfaces/interface[name=${iface}]" \ + "{\"name\":\"${iface}\",\"config\":{\"name\":\"${iface}\",\"type\":\"iana-if-type:ethernetCsmacd\",\"enabled\":true},\"subinterfaces\":{\"subinterface\":[{\"index\":${vlan_id},\"config\":{\"index\":${vlan_id},\"enabled\":true},\"openconfig-vlan:vlan\":{\"match\":{\"single-tagged\":{\"config\":{\"vlan-id\":${vlan_id}}}}},\"openconfig-if-ip:ipv4\":{\"config\":{\"enabled\":true},\"addresses\":{\"address\":[{\"ip\":\"${ip}\",\"config\":{\"ip\":\"${ip}\",\"prefix-length\":${prefix}}}]}}}]}}" +} + +configure_access_subif0_and_125() { + local router=$1 + local iface=$2 + local ip=$3 + local prefix=$4 + local vlan_id=$5 + local address + address="$(router_address "${router}")" + + gnmi_update_json "${address}" \ + "/interfaces/interface[name=${iface}]" \ + "{\"name\":\"${iface}\",\"config\":{\"name\":\"${iface}\",\"type\":\"iana-if-type:ethernetCsmacd\",\"enabled\":true},\"subinterfaces\":{\"subinterface\":[{\"index\":0,\"config\":{\"index\":0,\"enabled\":true},\"openconfig-if-ip:ipv4\":{\"config\":{\"enabled\":true}}},{\"index\":${vlan_id},\"config\":{\"index\":${vlan_id},\"enabled\":true},\"openconfig-vlan:vlan\":{\"match\":{\"single-tagged\":{\"config\":{\"vlan-id\":${vlan_id}}}}},\"openconfig-if-ip:ipv4\":{\"config\":{\"enabled\":true},\"addresses\":{\"address\":[{\"ip\":\"${ip}\",\"config\":{\"ip\":\"${ip}\",\"prefix-length\":${prefix}}}]}}}]}}" +} + +replace_access_subif0_and_125() { + local router=$1 + local iface=$2 + local ip=$3 + local prefix=$4 + local vlan_id=$5 + local address + address="$(router_address "${router}")" + + gnmi_replace_json "${address}" \ + "/interfaces/interface[name=${iface}]" \ + "{\"name\":\"${iface}\",\"config\":{\"name\":\"${iface}\",\"type\":\"iana-if-type:ethernetCsmacd\",\"enabled\":true},\"subinterfaces\":{\"subinterface\":[{\"index\":0,\"config\":{\"index\":0,\"enabled\":true},\"openconfig-if-ip:ipv4\":{\"config\":{\"enabled\":true}}},{\"index\":${vlan_id},\"config\":{\"index\":${vlan_id},\"enabled\":true},\"openconfig-vlan:vlan\":{\"match\":{\"single-tagged\":{\"config\":{\"vlan-id\":${vlan_id}}}}},\"openconfig-if-ip:ipv4\":{\"config\":{\"enabled\":true},\"addresses\":{\"address\":[{\"ip\":\"${ip}\",\"config\":{\"ip\":\"${ip}\",\"prefix-length\":${prefix}}}]}}}]}}" +} + +configure_access_subif0_vlan125() { + local router=$1 + local iface=$2 + local ip=$3 + local prefix=$4 + local vlan_id=$5 + local address + address="$(router_address "${router}")" + + gnmi_update_json "${address}" \ + "/interfaces/interface[name=${iface}]" \ + "{\"name\":\"${iface}\",\"config\":{\"name\":\"${iface}\",\"type\":\"iana-if-type:ethernetCsmacd\",\"enabled\":true},\"subinterfaces\":{\"subinterface\":[{\"index\":0,\"config\":{\"index\":0,\"enabled\":true},\"openconfig-vlan:vlan\":{\"match\":{\"single-tagged\":{\"config\":{\"vlan-id\":${vlan_id}}}}},\"openconfig-if-ip:ipv4\":{\"config\":{\"enabled\":true},\"addresses\":{\"address\":[{\"ip\":\"${ip}\",\"config\":{\"ip\":\"${ip}\",\"prefix-length\":${prefix}}}]}}}]}}" +} + +configure_core() { + configure_router_l3_links r1 Ethernet2 10.254.203.193 30 + configure_router_l3_links r2 Ethernet1 10.254.203.194 30 Ethernet3 10.254.218.241 30 + configure_router_l3_links r3 Ethernet2 10.254.218.242 30 + + configure_static_route r1 172.16.3.0/24 10.254.203.194 AUTO_1_10-254-203-194 + configure_static_route r2 172.16.1.0/24 10.254.203.193 AUTO_1_10-254-203-193 + configure_static_route r2 172.16.3.0/24 10.254.218.242 AUTO_1_10-254-218-242 + configure_static_route r3 172.16.1.0/24 10.254.218.241 AUTO_1_10-254-218-241 +} + +configure_tagged_routes() { + configure_static_route r1 172.17.3.0/24 10.254.203.194 AUTO_1_10-254-203-194-tagged + configure_static_route r2 172.17.1.0/24 10.254.203.193 AUTO_1_10-254-203-193-tagged + configure_static_route r2 172.17.3.0/24 10.254.218.242 AUTO_1_10-254-218-242-tagged + configure_static_route r3 172.17.1.0/24 10.254.218.241 AUTO_1_10-254-218-241-tagged +} + +experiment_untagged() { + configure_core + configure_access_subif0 r1 Ethernet10 172.16.1.1 24 + configure_access_subif0 r3 Ethernet10 172.16.3.1 24 + show_run r1 | tee "${RESULTS_DIR}/r1-untagged.txt" + show_run r3 | tee "${RESULTS_DIR}/r3-untagged.txt" + ping_node dc1_untagged 172.16.1.1 | tee "${RESULTS_DIR}/ping-dc1-localgw-untagged.json" + ping_node dc1_untagged 172.16.3.1 | tee "${RESULTS_DIR}/ping-dc1-remotegw-untagged.json" + ping_node dc1_untagged 172.16.3.10 | tee "${RESULTS_DIR}/ping-dc1-remotehost-untagged.json" +} + +experiment_tagged_subif125() { + configure_core + configure_tagged_routes + configure_access_subif125 r1 Ethernet11 172.17.1.1 24 125 + configure_access_subif125 r3 Ethernet11 172.17.3.1 24 125 + show_run r1 | tee "${RESULTS_DIR}/r1-tagged-subif125.txt" + show_run r2 | tee "${RESULTS_DIR}/r2-tagged-subif125.txt" + show_run r3 | tee "${RESULTS_DIR}/r3-tagged-subif125.txt" + ping_node dc3_tagged 172.17.1.1 | tee "${RESULTS_DIR}/ping-dc3-localgw-subif125.json" + ping_node dc3_tagged 172.17.3.1 | tee "${RESULTS_DIR}/ping-dc3-remotegw-subif125.json" + ping_node dc3_tagged 172.17.3.10 | tee "${RESULTS_DIR}/ping-dc3-remotehost-subif125.json" +} + +experiment_tagged_subif0_and_125() { + configure_core + configure_tagged_routes + configure_access_subif0_and_125 r1 Ethernet11 172.17.1.1 24 125 + configure_access_subif0_and_125 r3 Ethernet11 172.17.3.1 24 125 + show_run r1 | tee "${RESULTS_DIR}/r1-tagged-subif0-and-125.txt" + show_run r2 | tee "${RESULTS_DIR}/r2-tagged-subif0-and-125.txt" + show_run r3 | tee "${RESULTS_DIR}/r3-tagged-subif0-and-125.txt" + ping_node dc3_tagged 172.17.1.1 | tee "${RESULTS_DIR}/ping-dc3-localgw-subif0-and-125.json" + ping_node dc3_tagged 172.17.3.1 | tee "${RESULTS_DIR}/ping-dc3-remotegw-subif0-and-125.json" + ping_node dc3_tagged 172.17.3.10 | tee "${RESULTS_DIR}/ping-dc3-remotehost-subif0-and-125.json" +} + +experiment_tagged_subif0_then_125() { + configure_core + configure_tagged_routes + configure_access_subif0_empty r1 Ethernet11 + configure_access_subif0_empty r3 Ethernet11 + configure_access_subif125 r1 Ethernet11 172.17.1.1 24 125 + configure_access_subif125 r3 Ethernet11 172.17.3.1 24 125 + show_run r1 | tee "${RESULTS_DIR}/r1-tagged-subif0-then-125.txt" + show_run r2 | tee "${RESULTS_DIR}/r2-tagged-subif0-then-125.txt" + show_run r3 | tee "${RESULTS_DIR}/r3-tagged-subif0-then-125.txt" + ping_node dc3_tagged 172.17.1.1 | tee "${RESULTS_DIR}/ping-dc3-localgw-subif0-then-125.json" + ping_node dc3_tagged 172.17.3.1 | tee "${RESULTS_DIR}/ping-dc3-remotegw-subif0-then-125.json" + ping_node dc3_tagged 172.17.3.10 | tee "${RESULTS_DIR}/ping-dc3-remotehost-subif0-then-125.json" +} + +experiment_tagged_subif0_vlan125() { + configure_core + configure_tagged_routes + configure_access_subif0_vlan125 r1 Ethernet11 172.17.1.1 24 125 + configure_access_subif0_vlan125 r3 Ethernet11 172.17.3.1 24 125 + show_run r1 | tee "${RESULTS_DIR}/r1-tagged-subif0-vlan125.txt" + show_run r2 | tee "${RESULTS_DIR}/r2-tagged-subif0-vlan125.txt" + show_run r3 | tee "${RESULTS_DIR}/r3-tagged-subif0-vlan125.txt" + ping_node dc3_tagged 172.17.1.1 | tee "${RESULTS_DIR}/ping-dc3-localgw-subif0-vlan125.json" + ping_node dc3_tagged 172.17.3.1 | tee "${RESULTS_DIR}/ping-dc3-remotegw-subif0-vlan125.json" + ping_node dc3_tagged 172.17.3.10 | tee "${RESULTS_DIR}/ping-dc3-remotehost-subif0-vlan125.json" +} + +configure_cli_working_tagged_access() { + cli_config r1 \ + "interface Ethernet11\nno switchport\ninterface Ethernet11.125\nencapsulation dot1q vlan 125\nip address 172.17.1.1/24" + cli_config r3 \ + "interface Ethernet11\nno switchport\ninterface Ethernet11.125\nencapsulation dot1q vlan 125\nip address 172.17.3.1/24" +} + +experiment_tagged_cli_baseline_and_capture() { + capture_lab_state tagged-cli-clean + configure_core + configure_tagged_routes + configure_cli_working_tagged_access + capture_lab_state tagged-cli-working + ping_node dc3_tagged 172.17.1.1 | tee "${RESULTS_DIR}/ping-dc3-localgw-tagged-cli.json" + ping_node dc3_tagged 172.17.3.1 | tee "${RESULTS_DIR}/ping-dc3-remotegw-tagged-cli.json" + ping_node dc3_tagged 172.17.3.10 | tee "${RESULTS_DIR}/ping-dc3-remotehost-tagged-cli.json" +} + +experiment_tagged_replace_inferred() { + configure_core + configure_tagged_routes + replace_access_subif0_and_125 r1 Ethernet11 172.17.1.1 24 125 + replace_access_subif0_and_125 r3 Ethernet11 172.17.3.1 24 125 + capture_lab_state tagged-replace-inferred + ping_node dc3_tagged 172.17.1.1 | tee "${RESULTS_DIR}/ping-dc3-localgw-tagged-replace.json" + ping_node dc3_tagged 172.17.3.1 | tee "${RESULTS_DIR}/ping-dc3-remotegw-tagged-replace.json" + ping_node dc3_tagged 172.17.3.10 | tee "${RESULTS_DIR}/ping-dc3-remotehost-tagged-replace.json" +} + +get_interfaces() { + local router=$1 + gnmi "$(router_address "${router}")" get --path /interfaces/interface \ + | tee "${RESULTS_DIR}/${router}-interfaces.json" +} + +main() { + local action="${1:-}" + case "${action}" in + deploy) deploy ;; + destroy) destroy ;; + baseline) baseline ;; + capture-tagged-state) capture_lab_state tagged-snapshot ;; + experiment-untagged) experiment_untagged ;; + experiment-tagged-subif125) experiment_tagged_subif125 ;; + experiment-tagged-subif0-and-125) experiment_tagged_subif0_and_125 ;; + experiment-tagged-subif0-then-125) experiment_tagged_subif0_then_125 ;; + experiment-tagged-subif0-vlan125) experiment_tagged_subif0_vlan125 ;; + experiment-tagged-cli-baseline-and-capture) experiment_tagged_cli_baseline_and_capture ;; + experiment-tagged-replace-inferred) experiment_tagged_replace_inferred ;; + get-r1-interfaces) get_interfaces r1 ;; + get-r2-interfaces) get_interfaces r2 ;; + get-r3-interfaces) get_interfaces r3 ;; + *) + echo "Usage: $0 {deploy|destroy|baseline|capture-tagged-state|experiment-untagged|experiment-tagged-subif125|experiment-tagged-subif0-and-125|experiment-tagged-subif0-then-125|experiment-tagged-subif0-vlan125|experiment-tagged-cli-baseline-and-capture|experiment-tagged-replace-inferred|get-r1-interfaces|get-r2-interfaces|get-r3-interfaces}" >&2 + exit 1 + ;; + esac +} + +main "$@" diff --git a/src/tests/osm_end2end/redeploy-tfs.sh b/src/tests/osm_end2end/redeploy-tfs.sh new file mode 100755 index 0000000000000000000000000000000000000000..a8dec72197c4875919864e7a9d11065b3bb769d4 --- /dev/null +++ b/src/tests/osm_end2end/redeploy-tfs.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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/src/tests/osm_end2end/deploy_specs.sh +./deploy/all.sh diff --git a/src/tests/osm_end2end/requirements.in b/src/tests/osm_end2end/requirements.in new file mode 100644 index 0000000000000000000000000000000000000000..2d92213be0e0816c9b9be9fbdae81263f65e8fee --- /dev/null +++ b/src/tests/osm_end2end/requirements.in @@ -0,0 +1,15 @@ +# Copyright 2022-2026 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. + +requests==2.27.* diff --git a/src/tests/osm_end2end/run-local.sh b/src/tests/osm_end2end/run-local.sh new file mode 100755 index 0000000000000000000000000000000000000000..3e7a01b7467ae0a88696643dbcb35f0c0e3ba685 --- /dev/null +++ b/src/tests/osm_end2end/run-local.sh @@ -0,0 +1,364 @@ +#!/bin/bash +# Copyright 2022-2026 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. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "${SCRIPT_DIR}/../../.." && pwd)" +TEST_NAME="osm_end2end" + +IMAGE_TAG="${OSM_E2E_IMAGE:-${TEST_NAME}:local}" +RESULTS_DIR="${OSM_E2E_RESULTS_DIR:-${SCRIPT_DIR}/local_results}" +COMPONENT_LOGS_DIR="${RESULTS_DIR}/component_logs" +CLAB_TMP_DIR="${OSM_E2E_CLAB_TMPDIR:-/tmp/clab/${TEST_NAME}}" +RUNTIME_ENV_FILE="${REPO_ROOT}/tfs_runtime_env_vars.sh" + +OSM_E2E_CLEAN_START="${OSM_E2E_CLEAN_START:-yes}" +OSM_E2E_DEPLOY_TFS="${OSM_E2E_DEPLOY_TFS:-yes}" +OSM_E2E_BUILD_IMAGE="${OSM_E2E_BUILD_IMAGE:-yes}" +OSM_E2E_CONTAINERLAB_USE_SUDO="${OSM_E2E_CONTAINERLAB_USE_SUDO:-yes}" +OSM_E2E_WAIT_AFTER_CREATE="${OSM_E2E_WAIT_AFTER_CREATE:-60}" +OSM_E2E_WAIT_AFTER_REMOVE="${OSM_E2E_WAIT_AFTER_REMOVE:-60}" + +read -r -a KUBECTL_CMD_ARR <<< "${KUBECTL_CMD:-kubectl}" +read -r -a HELM_CMD_ARR <<< "${HELM_CMD:-helm3}" +read -r -a MICROK8S_CMD_ARR <<< "${MICROK8S_CMD:-microk8s}" + +PHASES=("$@") +if [[ ${#PHASES[@]} -eq 0 ]]; then + PHASES=("all") +fi + +usage() { + cat <<'EOF' +Usage: + ./src/tests/osm_end2end/run-local.sh [all|prepare|build-image|deploy-clab|deploy-tfs|onboarding|untagged|tagged|logs|destroy-clab] + +Environment: + OSM_E2E_IMAGE=osm_end2end:local + OSM_E2E_RESULTS_DIR=src/tests/osm_end2end/local_results + OSM_E2E_CLEAN_START=yes|no + OSM_E2E_DEPLOY_TFS=yes|no + OSM_E2E_BUILD_IMAGE=yes|no + OSM_E2E_CONTAINERLAB_USE_SUDO=yes|no + KUBECTL_CMD="kubectl" + HELM_CMD="helm3" + MICROK8S_CMD="microk8s" +EOF +} + +require_cmd() { + local cmd=$1 + command -v "${cmd}" >/dev/null 2>&1 || { + echo "Command not found: ${cmd}" >&2 + exit 1 + } +} + +kctl() { + "${KUBECTL_CMD_ARR[@]}" "$@" +} + +hctl() { + "${HELM_CMD_ARR[@]}" "$@" +} + +mctl() { + "${MICROK8S_CMD_ARR[@]}" "$@" +} + +clab() { + if [[ "${OSM_E2E_CONTAINERLAB_USE_SUDO}" == "yes" ]]; then + sudo containerlab "$@" + else + containerlab "$@" + fi +} + +docker_cleanup_for_test() { + clab destroy --all --cleanup || true + docker container prune --force + docker image prune --force + docker network prune --force +} + +cleanup_k8s_for_test() { + local existing_namespaces + existing_namespaces="$(kctl get namespace -o jsonpath='{.items[*].metadata.name}')" + local old_nats_namespaces + old_nats_namespaces="$(echo "${existing_namespaces}" | tr ' ' '\n' | grep -E '^nats' || true)" + for ns in ${old_nats_namespaces}; do + if hctl status "${ns}" -n "${ns}" >/dev/null 2>&1; then + hctl uninstall "${ns}" -n "${ns}" || true + fi + done + + local old_namespaces + old_namespaces="$(echo "${existing_namespaces}" | tr ' ' '\n' | grep -E '^(tfs|crdb|qdb|kafka|nats)$' || true)" + if [[ -n "${old_namespaces}" ]]; then + kctl delete namespace ${old_namespaces} || true + fi + + kctl get pods --all-namespaces --no-headers --field-selector=status.phase=Failed \ + -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name \ + | xargs --no-run-if-empty --max-args=2 kctl delete pod --namespace || true +} + +wait_for_k8s() { + mctl status --wait-ready + local loop_max_attempts=30 + local loop_counter=0 + while ! kctl get pods --all-namespaces >/dev/null 2>&1; do + printf "." + sleep 1 + loop_counter=$((loop_counter + 1)) + if [[ "${loop_counter}" -ge "${loop_max_attempts}" ]]; then + echo "Max attempts reached waiting for Kubernetes API." >&2 + exit 1 + fi + done + echo + kctl get pods --all-namespaces +} + +wait_for_tfs_deployments() { + local namespace="${TFS_K8S_NAMESPACE:-tfs}" + local deployments=( + contextservice + deviceservice + pathcompservice + serviceservice + nbiservice + ) + local deployment + for deployment in "${deployments[@]}"; do + kctl --namespace "${namespace}" rollout status "deployment/${deployment}" --timeout=300s + done +} + +prepare_clab_topology() { + rm -rf "${CLAB_TMP_DIR}" + mkdir -p "${CLAB_TMP_DIR}" + cp -R "${SCRIPT_DIR}/clab/." "${CLAB_TMP_DIR}/" +} + +build_image() { + docker buildx build -t "${IMAGE_TAG}" -f "${SCRIPT_DIR}/Dockerfile" "${REPO_ROOT}" +} + +deploy_clab() { + prepare_clab_topology + clab deploy --reconfigure --topo "${CLAB_TMP_DIR}/${TEST_NAME}.clab.yml" +} + +destroy_clab() { + if [[ -f "${CLAB_TMP_DIR}/${TEST_NAME}.clab.yml" ]]; then + clab destroy --cleanup --topo "${CLAB_TMP_DIR}/${TEST_NAME}.clab.yml" || true + fi +} + +dump_router_configs() { + local label=$1 + local slug + slug="$(echo "${label}" | tr ' /' '__')" + { + echo "==== ${label} ====" + clab exec --name "${TEST_NAME}" --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'"show running-config\"" + clab exec --name "${TEST_NAME}" --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'"show running-config\"" + clab exec --name "${TEST_NAME}" --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'"show running-config\"" + } | tee "${RESULTS_DIR}/router-config-${slug}.log" +} + +dump_component_logs() { + mkdir -p "${COMPONENT_LOGS_DIR}" + local namespace="${TFS_K8S_NAMESPACE:-tfs}" + local components=( + contextservice:server + deviceservice:server + pathcompservice:frontend + serviceservice:server + nbiservice:server + ) + local entry deployment container + for entry in "${components[@]}"; do + deployment="${entry%%:*}" + container="${entry##*:}" + kctl --namespace "${namespace}" logs "deployment/${deployment}" -c "${container}" \ + > "${COMPONENT_LOGS_DIR}/${deployment}.log" 2>&1 || true + done +} + +require_runtime_env_file() { + if [[ ! -f "${RUNTIME_ENV_FILE}" ]]; then + echo "Runtime env file not found: ${RUNTIME_ENV_FILE}" >&2 + echo "Deploy TFS first so tfs_runtime_env_vars.sh is generated." >&2 + exit 1 + fi +} + +run_onboarding() { + require_runtime_env_file + docker run -t --rm --name "${TEST_NAME}-onboarding" --network=host \ + --volume "${RUNTIME_ENV_FILE}:/var/teraflow/tfs_runtime_env_vars.sh" \ + --volume "${RESULTS_DIR}:/opt/results" \ + "${IMAGE_TAG}" /var/teraflow/run-onboarding.sh +} + +run_osm_test() { + local action=$1 + local variant=$2 + require_runtime_env_file + docker run -t --rm --name "${TEST_NAME}-${variant}-${action}" --network=host \ + --env OSM_SERVICE_VARIANT="${variant}" \ + --volume "${RUNTIME_ENV_FILE}:/var/teraflow/tfs_runtime_env_vars.sh" \ + --volume "${RESULTS_DIR}:/opt/results" \ + "${IMAGE_TAG}" "/var/teraflow/run-osm-service-${action}.sh" +} + +ping_check() { + local src=$1 + local dst_ip=$2 + local pattern=$3 + local output + output="$(clab exec --name "${TEST_NAME}" --label clab-node-name="${src}" --cmd "ping -n -c3 ${dst_ip}" --format json)" + echo "${output}" + if echo "${output}" | grep -E "${pattern}" >/dev/null; then + echo "PASSED ${src}->${dst_ip}" + return 0 + fi + echo "FAILED ${src}->${dst_ip}" + return 1 +} + +assert_no_connectivity() { + local src=$1 + local local_ip=$2 + local local_gw=$3 + local remote_gw=$4 + local remote_ip=$5 + ping_check "${src}" "${local_ip}" "3 packets transmitted, 3 received, 0% packet loss" + ping_check "${src}" "${local_gw}" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss" + ping_check "${src}" "${remote_gw}" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss" + ping_check "${src}" "${remote_ip}" "3 packets transmitted, 0 received,( [\+]{0,1}[0-9]+ error[s]{0,1},)? 100% packet loss" +} + +assert_connectivity() { + local src=$1 + local local_ip=$2 + local local_gw=$3 + local remote_gw=$4 + local remote_ip=$5 + ping_check "${src}" "${local_ip}" "3 packets transmitted, 3 received, 0% packet loss" + ping_check "${src}" "${local_gw}" "3 packets transmitted, 3 received, 0% packet loss" + ping_check "${src}" "${remote_gw}" "3 packets transmitted, 3 received, 0% packet loss" + ping_check "${src}" "${remote_ip}" "3 packets transmitted, 3 received, 0% packet loss" +} + +run_variant_cycle() { + local variant=$1 + local src=$2 + local local_ip=$3 + local local_gw=$4 + local remote_gw=$5 + local remote_ip=$6 + + echo "==== Starting ${variant} OSM service cycle ====" + assert_no_connectivity "${src}" "${local_ip}" "${local_gw}" "${remote_gw}" "${remote_ip}" + + run_osm_test create "${variant}" + sleep "${OSM_E2E_WAIT_AFTER_CREATE}" + dump_router_configs "after configuring ${variant} OSM service" + assert_connectivity "${src}" "${local_ip}" "${local_gw}" "${remote_gw}" "${remote_ip}" + + run_osm_test remove "${variant}" + sleep "${OSM_E2E_WAIT_AFTER_REMOVE}" + dump_router_configs "after removing ${variant} OSM service" + assert_no_connectivity "${src}" "${local_ip}" "${local_gw}" "${remote_gw}" "${remote_ip}" +} + +deploy_tfs() { + ( + cd "${REPO_ROOT}" + source "${SCRIPT_DIR}/deploy_specs.sh" + ./deploy/crdb.sh + ./deploy/nats.sh + ./deploy/kafka.sh + ./deploy/tfs.sh + ./deploy/show.sh + ) + wait_for_tfs_deployments +} + +prepare() { + require_cmd docker + require_cmd containerlab + require_cmd "${KUBECTL_CMD_ARR[0]}" + require_cmd "${HELM_CMD_ARR[0]}" + require_cmd "${MICROK8S_CMD_ARR[0]}" + require_cmd yq + mkdir -p "${RESULTS_DIR}" "${COMPONENT_LOGS_DIR}" + + if [[ "${OSM_E2E_CLEAN_START}" == "yes" ]]; then + docker_cleanup_for_test + wait_for_k8s + cleanup_k8s_for_test + fi + + wait_for_k8s +} + +run_all() { + prepare + if [[ "${OSM_E2E_BUILD_IMAGE}" == "yes" ]]; then + build_image + fi + deploy_clab + sleep 3 + dump_router_configs "before any configuration" + if [[ "${OSM_E2E_DEPLOY_TFS}" == "yes" ]]; then + deploy_tfs + fi + run_onboarding + dump_router_configs "after onboarding scenario" + run_variant_cycle "untagged" "dc1_untagged" "172.16.1.10" "172.16.1.1" "172.16.3.1" "172.16.3.10" + run_variant_cycle "tagged" "dc3_tagged" "172.17.1.10" "172.17.1.1" "172.17.3.1" "172.17.3.10" + dump_component_logs +} + +main() { + local phase + for phase in "${PHASES[@]}"; do + case "${phase}" in + all) run_all ;; + prepare) prepare ;; + build-image) build_image ;; + deploy-clab) deploy_clab ;; + deploy-tfs) deploy_tfs ;; + onboarding) run_onboarding ;; + untagged) run_variant_cycle "untagged" "dc1_untagged" "172.16.1.10" "172.16.1.1" "172.16.3.1" "172.16.3.10" ;; + tagged) run_variant_cycle "tagged" "dc3_tagged" "172.17.1.10" "172.17.1.1" "172.17.3.1" "172.17.3.10" ;; + logs) dump_component_logs ;; + destroy-clab) destroy_clab ;; + -h|--help|help) usage ;; + *) + echo "Unknown phase: ${phase}" >&2 + usage + exit 1 + ;; + esac + done +} + +main diff --git a/src/tests/osm_end2end/scripts/run-cleanup.sh b/src/tests/osm_end2end/scripts/run-cleanup.sh new file mode 100755 index 0000000000000000000000000000000000000000..dbec6e5cc9017e79c3a7474a7ffc4f52b341b668 --- /dev/null +++ b/src/tests/osm_end2end/scripts/run-cleanup.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Copyright 2022-2026 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 /var/teraflow/tfs_runtime_env_vars.sh +export PYTHONPATH=/var/teraflow +pytest --verbose --log-level=INFO \ + --junitxml=/opt/results/report_cleanup.xml \ + /var/teraflow/tests/osm_end2end/tests/test_cleanup.py diff --git a/src/tests/osm_end2end/scripts/run-onboarding.sh b/src/tests/osm_end2end/scripts/run-onboarding.sh new file mode 100755 index 0000000000000000000000000000000000000000..14c36930d3803fca5225533ca16025125b58c6ed --- /dev/null +++ b/src/tests/osm_end2end/scripts/run-onboarding.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Copyright 2022-2026 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 /var/teraflow/tfs_runtime_env_vars.sh +export PYTHONPATH=/var/teraflow +pytest --verbose --log-level=INFO \ + --junitxml=/opt/results/report_onboarding.xml \ + /var/teraflow/tests/osm_end2end/tests/test_onboarding.py diff --git a/src/tests/osm_end2end/scripts/run-osm-service-create.sh b/src/tests/osm_end2end/scripts/run-osm-service-create.sh new file mode 100755 index 0000000000000000000000000000000000000000..d8104c7b75d950053d524cf91c28096eb7c9e29a --- /dev/null +++ b/src/tests/osm_end2end/scripts/run-osm-service-create.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Copyright 2022-2026 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 /var/teraflow/tfs_runtime_env_vars.sh +export PYTHONPATH=/var/teraflow +OSM_SERVICE_VARIANT="${OSM_SERVICE_VARIANT:-tagged}" +pytest --verbose --log-level=INFO \ + --junitxml=/opt/results/report_osm_service_create_${OSM_SERVICE_VARIANT}.xml \ + /var/teraflow/tests/osm_end2end/tests/test_osm_service_create.py diff --git a/src/tests/osm_end2end/scripts/run-osm-service-remove.sh b/src/tests/osm_end2end/scripts/run-osm-service-remove.sh new file mode 100755 index 0000000000000000000000000000000000000000..d94f237fddf0429d2ffa1dbbe70d3a6d1d3d396c --- /dev/null +++ b/src/tests/osm_end2end/scripts/run-osm-service-remove.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Copyright 2022-2026 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 /var/teraflow/tfs_runtime_env_vars.sh +export PYTHONPATH=/var/teraflow +OSM_SERVICE_VARIANT="${OSM_SERVICE_VARIANT:-tagged}" +pytest --verbose --log-level=INFO \ + --junitxml=/opt/results/report_osm_service_remove_${OSM_SERVICE_VARIANT}.xml \ + /var/teraflow/tests/osm_end2end/tests/test_osm_service_remove.py diff --git a/src/tests/osm_end2end/tests/Fixtures.py b/src/tests/osm_end2end/tests/Fixtures.py new file mode 100644 index 0000000000000000000000000000000000000000..0bb727a1fcd286b17a1064bd0f366b8e78301e5d --- /dev/null +++ b/src/tests/osm_end2end/tests/Fixtures.py @@ -0,0 +1,51 @@ +# Copyright 2022-2026 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 pytest +from common.Constants import ServiceNameEnum +from common.Settings import get_service_host, get_service_port_http +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from service.client.ServiceClient import ServiceClient +from .MockOSM import MockOSM +from .OSM_Constants import WIM_MAPPING + +NBI_ADDRESS = get_service_host(ServiceNameEnum.NBI) +NBI_PORT = get_service_port_http(ServiceNameEnum.NBI) +NBI_USERNAME = 'admin' +NBI_PASSWORD = 'admin' +NBI_BASE_URL = '' + +@pytest.fixture(scope='session') +def osm_wim() -> MockOSM: + wim_url = 'http://{:s}:{:d}'.format(NBI_ADDRESS, NBI_PORT) + return MockOSM(wim_url, WIM_MAPPING, NBI_USERNAME, NBI_PASSWORD) + +@pytest.fixture(scope='session') +def context_client() -> ContextClient: + _client = ContextClient() + yield _client + _client.close() + +@pytest.fixture(scope='session') +def device_client() -> DeviceClient: + _client = DeviceClient() + yield _client + _client.close() + +@pytest.fixture(scope='session') +def service_client() -> ServiceClient: + _client = ServiceClient() + yield _client + _client.close() diff --git a/src/tests/osm_end2end/tests/MockOSM.py b/src/tests/osm_end2end/tests/MockOSM.py new file mode 100644 index 0000000000000000000000000000000000000000..be206ff7802293cdd4d14923c84949a6f09339b4 --- /dev/null +++ b/src/tests/osm_end2end/tests/MockOSM.py @@ -0,0 +1,62 @@ +# Copyright 2022-2026 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 .WimconnectorIETFL2VPN import WimconnectorIETFL2VPN + +LOGGER = logging.getLogger(__name__) + +class MockOSM: + def __init__(self, url, mapping, username, password): + wim = {'wim_url': url} + wim_account = {'user': username, 'password': password} + config = {'mapping_not_needed': False, 'service_endpoint_mapping': mapping} + self.wim = WimconnectorIETFL2VPN(wim, wim_account, config=config) + self.conn_info = {} # internal database emulating OSM storage provided to WIM Connectors + + def create_connectivity_service(self, service_type, connection_points): + LOGGER.info('[create_connectivity_service] service_type={:s}'.format(str(service_type))) + LOGGER.info('[create_connectivity_service] connection_points={:s}'.format(str(connection_points))) + self.wim.check_credentials() + result = self.wim.create_connectivity_service(service_type, connection_points) + LOGGER.info('[create_connectivity_service] result={:s}'.format(str(result))) + service_uuid, conn_info = result + self.conn_info[service_uuid] = conn_info + return service_uuid + + def get_connectivity_service_status(self, service_uuid): + LOGGER.info('[get_connectivity_service] service_uuid={:s}'.format(str(service_uuid))) + conn_info = self.conn_info.get(service_uuid) + if conn_info is None: raise Exception('ServiceId({:s}) not found'.format(str(service_uuid))) + LOGGER.info('[get_connectivity_service] conn_info={:s}'.format(str(conn_info))) + self.wim.check_credentials() + result = self.wim.get_connectivity_service_status(service_uuid, conn_info=conn_info) + LOGGER.info('[get_connectivity_service] result={:s}'.format(str(result))) + return result + + def edit_connectivity_service(self, service_uuid, connection_points): + LOGGER.info('[edit_connectivity_service] service_uuid={:s}'.format(str(service_uuid))) + LOGGER.info('[edit_connectivity_service] connection_points={:s}'.format(str(connection_points))) + conn_info = self.conn_info.get(service_uuid) + if conn_info is None: raise Exception('ServiceId({:s}) not found'.format(str(service_uuid))) + LOGGER.info('[edit_connectivity_service] conn_info={:s}'.format(str(conn_info))) + self.wim.edit_connectivity_service(service_uuid, conn_info=conn_info, connection_points=connection_points) + + def delete_connectivity_service(self, service_uuid): + LOGGER.info('[delete_connectivity_service] service_uuid={:s}'.format(str(service_uuid))) + conn_info = self.conn_info.get(service_uuid) + if conn_info is None: raise Exception('ServiceId({:s}) not found'.format(str(service_uuid))) + LOGGER.info('[delete_connectivity_service] conn_info={:s}'.format(str(conn_info))) + self.wim.check_credentials() + self.wim.delete_connectivity_service(service_uuid, conn_info=conn_info) diff --git a/src/tests/osm_end2end/tests/OSM_Constants.py b/src/tests/osm_end2end/tests/OSM_Constants.py new file mode 100644 index 0000000000000000000000000000000000000000..91f68130463974742f30a92593a77df2aa86b270 --- /dev/null +++ b/src/tests/osm_end2end/tests/OSM_Constants.py @@ -0,0 +1,114 @@ +# Copyright 2022-2026 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 typing import Dict, List, Optional + +SERVICE_VARIANT_UNTAGGED = 'untagged' +SERVICE_VARIANT_TAGGED = 'tagged' +DEFAULT_SERVICE_VARIANT = SERVICE_VARIANT_TAGGED + + +def _connection_point(service_endpoint_id: str, vlan_id: Optional[int] = None) -> Dict: + connection_point = { + 'service_endpoint_id': service_endpoint_id, + 'service_endpoint_encapsulation_type': 'none', + } + if vlan_id is not None: + connection_point['service_endpoint_encapsulation_type'] = 'dot1q' + connection_point['service_endpoint_encapsulation_info'] = {'vlan': vlan_id} + return connection_point + + +def get_service_variant() -> str: + service_variant = os.environ.get('OSM_SERVICE_VARIANT', DEFAULT_SERVICE_VARIANT) + service_variant = str(service_variant).strip().lower() + if service_variant not in {SERVICE_VARIANT_UNTAGGED, SERVICE_VARIANT_TAGGED}: + msg = 'Unsupported OSM service variant: {:s}'.format(str(service_variant)) + raise ValueError(msg) + return service_variant + + +def get_service_connection_points(service_variant: Optional[str] = None) -> List[Dict]: + service_variant = get_service_variant() if service_variant is None else service_variant + if service_variant == SERVICE_VARIANT_UNTAGGED: + return [ + _connection_point('ep-untagged-1'), + _connection_point('ep-untagged-2'), + ] + if service_variant == SERVICE_VARIANT_TAGGED: + return [ + _connection_point('ep-tagged-1', vlan_id=125), + _connection_point('ep-tagged-2', vlan_id=125), + ] + msg = 'Unsupported OSM service variant: {:s}'.format(str(service_variant)) + raise ValueError(msg) + + +# Ref: https://osm.etsi.org/wikipub/index.php/WIM +WIM_MAPPING = [ + { + 'device-id': 'dc1_untagged', # pop_switch_dpid + #'device_interface_id' : ??, # pop_switch_port + 'service_endpoint_id': 'ep-untagged-1', # wan_service_endpoint_id + 'service_mapping_info': { # wan_service_mapping_info, other extra info + 'bearer': {'bearer-reference': 'OSM-E2E:r1:Ethernet10'}, + 'site-id': '1', + }, + #'switch_dpid' : ??, # wan_switch_dpid + #'switch_port' : ??, # wan_switch_port + #'datacenter_id' : ??, # vim_account + }, + { + 'device-id': 'dc2_untagged', # pop_switch_dpid + #'device_interface_id' : ??, # pop_switch_port + 'service_endpoint_id': 'ep-untagged-2', # wan_service_endpoint_id + 'service_mapping_info': { # wan_service_mapping_info, other extra info + 'bearer': {'bearer-reference': 'OSM-E2E:r3:Ethernet10'}, + 'site-id': '2', + }, + #'switch_dpid' : ??, # wan_switch_dpid + #'switch_port' : ??, # wan_switch_port + #'datacenter_id' : ??, # vim_account + }, + { + 'device-id': 'dc3_tagged', # pop_switch_dpid + #'device_interface_id' : ??, # pop_switch_port + 'service_endpoint_id': 'ep-tagged-1', # wan_service_endpoint_id + 'service_mapping_info': { # wan_service_mapping_info, other extra info + 'bearer': {'bearer-reference': 'OSM-E2E:r1:Ethernet11'}, + 'site-id': '1', + }, + #'switch_dpid' : ??, # wan_switch_dpid + #'switch_port' : ??, # wan_switch_port + #'datacenter_id' : ??, # vim_account + }, + { + 'device-id': 'dc4_tagged', # pop_switch_dpid + #'device_interface_id' : ??, # pop_switch_port + 'service_endpoint_id': 'ep-tagged-2', # wan_service_endpoint_id + 'service_mapping_info': { # wan_service_mapping_info, other extra info + 'bearer': {'bearer-reference': 'OSM-E2E:r3:Ethernet11'}, + 'site-id': '2', + }, + #'switch_dpid' : ??, # wan_switch_dpid + #'switch_port' : ??, # wan_switch_port + #'datacenter_id' : ??, # vim_account + }, +] + +SERVICE_TYPE = 'ELINE' +SERVICE_VARIANT = get_service_variant() +SERVICE_CONNECTION_POINTS = get_service_connection_points(SERVICE_VARIANT) diff --git a/src/tests/osm_end2end/tests/WimconnectorIETFL2VPN.py b/src/tests/osm_end2end/tests/WimconnectorIETFL2VPN.py new file mode 100644 index 0000000000000000000000000000000000000000..de940a7d2546885fe50dedbe8aa7d402730f6aa6 --- /dev/null +++ b/src/tests/osm_end2end/tests/WimconnectorIETFL2VPN.py @@ -0,0 +1,545 @@ +# -*- coding: utf-8 -*- +## +# Copyright 2018 Telefonica +# All Rights Reserved. +# +# Contributors: Oscar Gonzalez de Dios, Manuel Lopez Bravo, Guillermo Pajares Martin +# 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. +# +# This work has been performed in the context of the Metro-Haul project - +# funded by the European Commission under Grant number 761727 through the +# Horizon 2020 program. +## +"""The SDN/WIM connector is responsible for establishing wide area network +connectivity. + +This SDN/WIM connector implements the standard IETF RFC 8466 "A YANG Data + Model for Layer 2 Virtual Private Network (L2VPN) Service Delivery" + +It receives the endpoints and the necessary details to request +the Layer 2 service. +""" +import requests +import uuid +import logging +import copy +#from osm_ro_plugin.sdnconn import SdnConnectorBase, SdnConnectorError +from .sdnconn import SdnConnectorBase, SdnConnectorError + +"""Check layer where we move it""" + + +class WimconnectorIETFL2VPN(SdnConnectorBase): + def __init__(self, wim, wim_account, config=None, logger=None): + """IETF L2VPN WIM connector + + Arguments: (To be completed) + wim (dict): WIM record, as stored in the database + wim_account (dict): WIM account record, as stored in the database + """ + self.logger = logging.getLogger("ro.sdn.ietfl2vpn") + super().__init__(wim, wim_account, config, logger) + self.headers = {"Content-Type": "application/json"} + self.mappings = { + m["service_endpoint_id"]: m for m in self.service_endpoint_mapping + } + self.user = wim_account.get("user") + self.passwd = wim_account.get("password") # replace "passwordd" -> "password" + + if self.user and self.passwd is not None: + self.auth = (self.user, self.passwd) + else: + self.auth = None + + self.logger.info("IETFL2VPN Connector Initialized.") + + def check_credentials(self): + endpoint = "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format( + self.wim["wim_url"] + ) + + try: + response = requests.get(endpoint, auth=self.auth) + http_code = response.status_code + except requests.exceptions.RequestException as e: + raise SdnConnectorError(e.response, http_code=503) + + if http_code != 200: + raise SdnConnectorError("Failed while authenticating", http_code=http_code) + + self.logger.info("Credentials checked") + + def get_connectivity_service_status(self, service_uuid, conn_info=None): + """Monitor the status of the connectivity service stablished + + Arguments: + service_uuid: Connectivity service unique identifier + + Returns: + Examples:: + {'sdn_status': 'ACTIVE'} + {'sdn_status': 'INACTIVE'} + {'sdn_status': 'DOWN'} + {'sdn_status': 'ERROR'} + """ + try: + self.logger.info("Sending get connectivity service stuatus") + servicepoint = "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services/vpn-service={}/".format( + self.wim["wim_url"], service_uuid + ) + response = requests.get(servicepoint, auth=self.auth) + self.logger.warning('response.status_code={:s}'.format(str(response.status_code))) + if response.status_code != requests.codes.ok: + raise SdnConnectorError( + "Unable to obtain connectivity servcice status", + http_code=response.status_code, + ) + + service_status = {"sdn_status": "ACTIVE"} + + return service_status + except requests.exceptions.ConnectionError: + raise SdnConnectorError("Request Timeout", http_code=408) + + def search_mapp(self, connection_point): + id = connection_point["service_endpoint_id"] + if id not in self.mappings: + raise SdnConnectorError("Endpoint {} not located".format(str(id))) + else: + return self.mappings[id] + + def create_connectivity_service(self, service_type, connection_points, **kwargs): + """Stablish WAN connectivity between the endpoints + + Arguments: + service_type (str): ``ELINE`` (L2), ``ELAN`` (L2), ``ETREE`` (L2), + ``L3``. + connection_points (list): each point corresponds to + an entry point from the DC to the transport network. One + connection point serves to identify the specific access and + some other service parameters, such as encapsulation type. + Represented by a dict as follows:: + + { + "service_endpoint_id": ..., (str[uuid]) + "service_endpoint_encapsulation_type": ..., + (enum: none, dot1q, ...) + "service_endpoint_encapsulation_info": { + ... (dict) + "vlan": ..., (int, present if encapsulation is dot1q) + "vni": ... (int, present if encapsulation is vxlan), + "peers": [(ipv4_1), (ipv4_2)] + (present if encapsulation is vxlan) + } + } + + The service endpoint ID should be previously informed to the WIM + engine in the RO when the WIM port mapping is registered. + + Keyword Arguments: + bandwidth (int): value in kilobytes + latency (int): value in milliseconds + + Other QoS might be passed as keyword arguments. + + Returns: + tuple: ``(service_id, conn_info)`` containing: + - *service_uuid* (str): UUID of the established connectivity + service + - *conn_info* (dict or None): Information to be stored at the + database (or ``None``). This information will be provided to + the :meth:`~.edit_connectivity_service` and :obj:`~.delete`. + **MUST** be JSON/YAML-serializable (plain data structures). + + Raises: + SdnConnectorException: In case of error. + """ + SETTINGS = { # min_endpoints, max_endpoints, vpn_service_type + 'ELINE': (2, 2, 'vpws'), # Virtual Private Wire Service + 'ELAN' : (2, None, 'vpls'), # Virtual Private LAN Service + } + settings = SETTINGS.get(service_type) + if settings is None: raise NotImplementedError('Unsupported service_type({:s})'.format(str(service_type))) + min_endpoints, max_endpoints, vpn_service_type = settings + + if max_endpoints is not None and len(connection_points) > max_endpoints: + msg = "Connections between more than {:d} endpoints are not supported for service_type {:s}" + raise SdnConnectorError(msg.format(max_endpoints, service_type)) + + if min_endpoints is not None and len(connection_points) < min_endpoints: + msg = "Connections must be of at least {:d} endpoints for service_type {:s}" + raise SdnConnectorError(msg.format(min_endpoints, service_type)) + + """First step, create the vpn service""" + uuid_l2vpn = str(uuid.uuid4()) + vpn_service = {} + vpn_service["vpn-id"] = uuid_l2vpn + vpn_service["vpn-svc-type"] = vpn_service_type + vpn_service["svc-topo"] = "any-to-any" + vpn_service["customer-name"] = "osm" + vpn_service_list = [] + vpn_service_list.append(vpn_service) + vpn_service_l = {"ietf-l2vpn-svc:vpn-service": vpn_service_list} + response_service_creation = None + conn_info = [] + self.logger.info("Sending vpn-service : {:s}".format(str(vpn_service_l))) + + try: + endpoint_service_creation = ( + "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format( + self.wim["wim_url"] + ) + ) + response_service_creation = requests.post( + endpoint_service_creation, + headers=self.headers, + json=vpn_service_l, + auth=self.auth, + ) + except requests.exceptions.ConnectionError: + raise SdnConnectorError( + "Request to create service Timeout", http_code=408 + ) + + if response_service_creation.status_code == 409: + raise SdnConnectorError( + "Service already exists", + http_code=response_service_creation.status_code, + ) + elif response_service_creation.status_code != requests.codes.created: + raise SdnConnectorError( + "Request to create service not accepted", + http_code=response_service_creation.status_code, + ) + + self.logger.info('connection_points = {:s}'.format(str(connection_points))) + + # Check if protected paths are requested + extended_connection_points = [] + for connection_point in connection_points: + extended_connection_points.append(connection_point) + + connection_point_wan_info = self.search_mapp(connection_point) + service_mapping_info = connection_point_wan_info.get('service_mapping_info', {}) + redundant_service_endpoint_ids = service_mapping_info.get('redundant') + + if redundant_service_endpoint_ids is None: continue + if len(redundant_service_endpoint_ids) == 0: continue + + for redundant_service_endpoint_id in redundant_service_endpoint_ids: + redundant_connection_point = copy.deepcopy(connection_point) + redundant_connection_point['service_endpoint_id'] = redundant_service_endpoint_id + extended_connection_points.append(redundant_connection_point) + + self.logger.info('extended_connection_points = {:s}'.format(str(extended_connection_points))) + + """Second step, create the connections and vpn attachments""" + for connection_point in extended_connection_points: + connection_point_wan_info = self.search_mapp(connection_point) + site_network_access = {} + connection = {} + + if connection_point["service_endpoint_encapsulation_type"] != "none": + if ( + connection_point["service_endpoint_encapsulation_type"] + == "dot1q" + ): + """The connection is a VLAN""" + connection["encapsulation-type"] = "dot1q-vlan-tagged" + tagged = {} + tagged_interf = {} + service_endpoint_encapsulation_info = connection_point[ + "service_endpoint_encapsulation_info" + ] + + if service_endpoint_encapsulation_info["vlan"] is None: + raise SdnConnectorError("VLAN must be provided") + + tagged_interf["cvlan-id"] = service_endpoint_encapsulation_info[ + "vlan" + ] + tagged["dot1q-vlan-tagged"] = tagged_interf + connection["tagged-interface"] = tagged + else: + raise NotImplementedError("Encapsulation type not implemented") + + site_network_access["connection"] = connection + self.logger.info("Sending connection:{}".format(connection)) + vpn_attach = {} + vpn_attach["vpn-id"] = uuid_l2vpn + vpn_attach["site-role"] = vpn_service["svc-topo"] + "-role" + site_network_access["vpn-attachment"] = vpn_attach + self.logger.info("Sending vpn-attachement :{}".format(vpn_attach)) + uuid_sna = str(uuid.uuid4()) + site_network_access["network-access-id"] = uuid_sna + site_network_access["bearer"] = connection_point_wan_info[ + "service_mapping_info" + ]["bearer"] + + access_priority = connection_point_wan_info["service_mapping_info"].get("priority") + if access_priority is not None: + availability = {} + availability["access-priority"] = access_priority + availability["single-active"] = [None] + site_network_access["availability"] = availability + + constraint = {} + constraint['constraint-type'] = 'end-to-end-diverse' + constraint['target'] = {'all-other-accesses': [None]} + + access_diversity = {} + access_diversity['constraints'] = {'constraint': []} + access_diversity['constraints']['constraint'].append(constraint) + site_network_access["access-diversity"] = access_diversity + + site_network_accesses = {} + site_network_access_list = [] + site_network_access_list.append(site_network_access) + site_network_accesses[ + "ietf-l2vpn-svc:site-network-access" + ] = site_network_access_list + conn_info_d = {} + conn_info_d["site"] = connection_point_wan_info["service_mapping_info"][ + "site-id" + ] + conn_info_d["site-network-access-id"] = site_network_access[ + "network-access-id" + ] + conn_info_d["mapping"] = None + conn_info.append(conn_info_d) + + self.logger.info("Sending site_network_accesses : {:s}".format(str(site_network_accesses))) + + try: + endpoint_site_network_access_creation = ( + "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/" + "sites/site={}/site-network-accesses/".format( + self.wim["wim_url"], + connection_point_wan_info["service_mapping_info"][ + "site-id" + ], + ) + ) + response_endpoint_site_network_access_creation = requests.post( + endpoint_site_network_access_creation, + headers=self.headers, + json=site_network_accesses, + auth=self.auth, + ) + + if ( + response_endpoint_site_network_access_creation.status_code + == 409 + ): + self.delete_connectivity_service(vpn_service["vpn-id"]) + + raise SdnConnectorError( + "Site_Network_Access with ID '{}' already exists".format( + site_network_access["network-access-id"] + ), + http_code=response_endpoint_site_network_access_creation.status_code, + ) + elif ( + response_endpoint_site_network_access_creation.status_code + == 400 + ): + self.delete_connectivity_service(vpn_service["vpn-id"]) + + raise SdnConnectorError( + "Site {} does not exist".format( + connection_point_wan_info["service_mapping_info"][ + "site-id" + ] + ), + http_code=response_endpoint_site_network_access_creation.status_code, + ) + elif ( + response_endpoint_site_network_access_creation.status_code + != requests.codes.created + and response_endpoint_site_network_access_creation.status_code + != requests.codes.no_content + ): + self.delete_connectivity_service(vpn_service["vpn-id"]) + + raise SdnConnectorError( + "Request not accepted", + http_code=response_endpoint_site_network_access_creation.status_code, + ) + except requests.exceptions.ConnectionError: + self.delete_connectivity_service(vpn_service["vpn-id"]) + + raise SdnConnectorError("Request Timeout", http_code=408) + + return uuid_l2vpn, conn_info + + def delete_connectivity_service(self, service_uuid, conn_info=None): + """Disconnect multi-site endpoints previously connected + + This method should receive as the first argument the UUID generated by + the ``create_connectivity_service`` + """ + try: + self.logger.info("Sending delete") + servicepoint = "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services/vpn-service={}/".format( + self.wim["wim_url"], service_uuid + ) + response = requests.delete(servicepoint, auth=self.auth) + + if response.status_code != requests.codes.no_content: + raise SdnConnectorError( + "Error in the request", http_code=response.status_code + ) + except requests.exceptions.ConnectionError: + raise SdnConnectorError("Request Timeout", http_code=408) + + def edit_connectivity_service( + self, service_uuid, conn_info=None, connection_points=None, **kwargs + ): + """Change an existing connectivity service, see + ``create_connectivity_service``""" + # sites = {"sites": {}} + # site_list = [] + vpn_service = {} + vpn_service["svc-topo"] = "any-to-any" + counter = 0 + + for connection_point in connection_points: + site_network_access = {} + connection_point_wan_info = self.search_mapp(connection_point) + params_site = {} + params_site["site-id"] = connection_point_wan_info["service_mapping_info"][ + "site-id" + ] + params_site["site-vpn-flavor"] = "site-vpn-flavor-single" + device_site = {} + device_site["device-id"] = connection_point_wan_info["device-id"] + params_site["devices"] = device_site + # network_access = {} + connection = {} + + if connection_point["service_endpoint_encapsulation_type"] != "none": + if connection_point["service_endpoint_encapsulation_type"] == "dot1q": + """The connection is a VLAN""" + connection["encapsulation-type"] = "dot1q-vlan-tagged" + tagged = {} + tagged_interf = {} + service_endpoint_encapsulation_info = connection_point[ + "service_endpoint_encapsulation_info" + ] + + if service_endpoint_encapsulation_info["vlan"] is None: + raise SdnConnectorError("VLAN must be provided") + + tagged_interf["cvlan-id"] = service_endpoint_encapsulation_info[ + "vlan" + ] + tagged["dot1q-vlan-tagged"] = tagged_interf + connection["tagged-interface"] = tagged + else: + raise NotImplementedError("Encapsulation type not implemented") + + site_network_access["connection"] = connection + vpn_attach = {} + vpn_attach["vpn-id"] = service_uuid + vpn_attach["site-role"] = vpn_service["svc-topo"] + "-role" + site_network_access["vpn-attachment"] = vpn_attach + uuid_sna = conn_info[counter]["site-network-access-id"] + site_network_access["network-access-id"] = uuid_sna + site_network_access["bearer"] = connection_point_wan_info[ + "service_mapping_info" + ]["bearer"] + site_network_accesses = {} + site_network_access_list = [] + site_network_access_list.append(site_network_access) + site_network_accesses[ + "ietf-l2vpn-svc:site-network-access" + ] = site_network_access_list + + try: + endpoint_site_network_access_edit = ( + "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/" + "sites/site={}/site-network-accesses/".format( + self.wim["wim_url"], + connection_point_wan_info["service_mapping_info"]["site-id"], + ) + ) + response_endpoint_site_network_access_creation = requests.put( + endpoint_site_network_access_edit, + headers=self.headers, + json=site_network_accesses, + auth=self.auth, + ) + + if response_endpoint_site_network_access_creation.status_code == 400: + raise SdnConnectorError( + "Service does not exist", + http_code=response_endpoint_site_network_access_creation.status_code, + ) + elif ( + response_endpoint_site_network_access_creation.status_code != 201 + and response_endpoint_site_network_access_creation.status_code + != 204 + ): + raise SdnConnectorError( + "Request no accepted", + http_code=response_endpoint_site_network_access_creation.status_code, + ) + except requests.exceptions.ConnectionError: + raise SdnConnectorError("Request Timeout", http_code=408) + + counter += 1 + + return None + + def clear_all_connectivity_services(self): + """Delete all WAN Links corresponding to a WIM""" + try: + self.logger.info("Sending clear all connectivity services") + servicepoint = ( + "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format( + self.wim["wim_url"] + ) + ) + response = requests.delete(servicepoint, auth=self.auth) + + if response.status_code != requests.codes.no_content: + raise SdnConnectorError( + "Unable to clear all connectivity services", + http_code=response.status_code, + ) + except requests.exceptions.ConnectionError: + raise SdnConnectorError("Request Timeout", http_code=408) + + def get_all_active_connectivity_services(self): + """Provide information about all active connections provisioned by a + WIM + """ + try: + self.logger.info("Sending get all connectivity services") + servicepoint = ( + "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/vpn-services".format( + self.wim["wim_url"] + ) + ) + response = requests.get(servicepoint, auth=self.auth) + + if response.status_code != requests.codes.ok: + raise SdnConnectorError( + "Unable to get all connectivity services", + http_code=response.status_code, + ) + + return response + except requests.exceptions.ConnectionError: + raise SdnConnectorError("Request Timeout", http_code=408) diff --git a/src/tests/osm_end2end/tests/__init__.py b/src/tests/osm_end2end/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 --- /dev/null +++ b/src/tests/osm_end2end/tests/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2022-2026 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/osm_end2end/tests/acknowledgements.txt b/src/tests/osm_end2end/tests/acknowledgements.txt new file mode 100644 index 0000000000000000000000000000000000000000..b7ce926dd006d9bc8afaffbed212d90fb05adbef --- /dev/null +++ b/src/tests/osm_end2end/tests/acknowledgements.txt @@ -0,0 +1,3 @@ +MockOSM is based on source code taken from: +https://osm.etsi.org/gitlab/osm/ro/-/blob/master/RO-plugin/osm_ro_plugin/sdnconn.py +https://osm.etsi.org/gitlab/osm/ro/-/blob/master/RO-SDN-ietfl2vpn/osm_rosdn_ietfl2vpn/wimconn_ietfl2vpn.py diff --git a/src/tests/osm_end2end/tests/sdnconn.py b/src/tests/osm_end2end/tests/sdnconn.py new file mode 100644 index 0000000000000000000000000000000000000000..a1849c9ef3e1a1260ff42bbadabc99f91a6435d7 --- /dev/null +++ b/src/tests/osm_end2end/tests/sdnconn.py @@ -0,0 +1,242 @@ +# -*- coding: utf-8 -*- +## +# Copyright 2018 University of Bristol - High Performance Networks Research +# Group +# All Rights Reserved. +# +# Contributors: Anderson Bravalheri, Dimitrios Gkounis, Abubakar Siddique +# Muqaddas, Navdeep Uniyal, Reza Nejabati and Dimitra Simeonidou +# +# 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. +# +# For those usages not covered by the Apache License, Version 2.0 please +# contact with: +# +# Neither the name of the University of Bristol nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# This work has been performed in the context of DCMS UK 5G Testbeds +# & Trials Programme and in the framework of the Metro-Haul project - +# funded by the European Commission under Grant number 761727 through the +# Horizon 2020 and 5G-PPP programmes. +## +"""The SDN connector is responsible for establishing both wide area network connectivity (WIM) +and intranet SDN connectivity. + +It receives information from ports to be connected . +""" + +import logging +from http import HTTPStatus + + +class SdnConnectorError(Exception): + """Base Exception for all connector related errors + provide the parameter 'http_code' (int) with the error code: + Bad_Request = 400 + Unauthorized = 401 (e.g. credentials are not valid) + Not_Found = 404 (e.g. try to edit or delete a non existing connectivity service) + Forbidden = 403 + Method_Not_Allowed = 405 + Not_Acceptable = 406 + Request_Timeout = 408 (e.g timeout reaching server, or cannot reach the server) + Conflict = 409 + Service_Unavailable = 503 + Internal_Server_Error = 500 + """ + + def __init__(self, message, http_code=HTTPStatus.INTERNAL_SERVER_ERROR.value): + Exception.__init__(self, message) + self.http_code = http_code + + +class SdnConnectorBase(object): + """Abstract base class for all the SDN connectors + + Arguments: + wim (dict): WIM record, as stored in the database + wim_account (dict): WIM account record, as stored in the database + config + The arguments of the constructor are converted to object attributes. + An extra property, ``service_endpoint_mapping`` is created from ``config``. + """ + + def __init__(self, wim, wim_account, config=None, logger=None): + """ + :param wim: (dict). Contains among others 'wim_url' + :param wim_account: (dict). Contains among others 'uuid' (internal id), 'name', + 'sdn' (True if is intended for SDN-assist or False if intended for WIM), 'user', 'password'. + :param config: (dict or None): Particular information of plugin. These keys if present have a common meaning: + 'mapping_not_needed': (bool) False by default or if missing, indicates that mapping is not needed. + 'service_endpoint_mapping': (list) provides the internal endpoint mapping. The meaning is: + KEY meaning for WIM meaning for SDN assist + -------- -------- -------- + device_id pop_switch_dpid compute_id + device_interface_id pop_switch_port compute_pci_address + service_endpoint_id wan_service_endpoint_id SDN_service_endpoint_id + service_mapping_info wan_service_mapping_info SDN_service_mapping_info + contains extra information if needed. Text in Yaml format + switch_dpid wan_switch_dpid SDN_switch_dpid + switch_port wan_switch_port SDN_switch_port + datacenter_id vim_account vim_account + id: (internal, do not use) + wim_id: (internal, do not use) + :param logger (logging.Logger): optional logger object. If none is passed 'openmano.sdn.sdnconn' is used. + """ + self.logger = logger or logging.getLogger("ro.sdn") + self.wim = wim + self.wim_account = wim_account + self.config = config or {} + self.service_endpoint_mapping = self.config.get("service_endpoint_mapping", []) + + def check_credentials(self): + """Check if the connector itself can access the SDN/WIM with the provided url (wim.wim_url), + user (wim_account.user), and password (wim_account.password) + + Raises: + SdnConnectorError: Issues regarding authorization, access to + external URLs, etc are detected. + """ + raise NotImplementedError + + def get_connectivity_service_status(self, service_uuid, conn_info=None): + """Monitor the status of the connectivity service established + + Arguments: + service_uuid (str): UUID of the connectivity service + conn_info (dict or None): Information returned by the connector + during the service creation/edition and subsequently stored in + the database. + + Returns: + dict: JSON/YAML-serializable dict that contains a mandatory key + ``sdn_status`` associated with one of the following values:: + + {'sdn_status': 'ACTIVE'} + # The service is up and running. + + {'sdn_status': 'INACTIVE'} + # The service was created, but the connector + # cannot determine yet if connectivity exists + # (ideally, the caller needs to wait and check again). + + {'sdn_status': 'DOWN'} + # Connection was previously established, + # but an error/failure was detected. + + {'sdn_status': 'ERROR'} + # An error occurred when trying to create the service/ + # establish the connectivity. + + {'sdn_status': 'BUILD'} + # Still trying to create the service, the caller + # needs to wait and check again. + + Additionally ``error_msg``(**str**) and ``sdn_info``(**dict**) + keys can be used to provide additional status explanation or + new information available for the connectivity service. + """ + raise NotImplementedError + + def create_connectivity_service(self, service_type, connection_points, **kwargs): + """ + Establish SDN/WAN connectivity between the endpoints + :param service_type: (str): ``ELINE`` (L2), ``ELAN`` (L2), ``ETREE`` (L2), ``L3``. + :param connection_points: (list): each point corresponds to + an entry point to be connected. For WIM: from the DC to the transport network. + For SDN: Compute/PCI to the transport network. One + connection point serves to identify the specific access and + some other service parameters, such as encapsulation type. + Each item of the list is a dict with: + "service_endpoint_id": (str)(uuid) Same meaning that for 'service_endpoint_mapping' (see __init__) + In case the config attribute mapping_not_needed is True, this value is not relevant. In this case + it will contain the string "device_id:device_interface_id" + "service_endpoint_encapsulation_type": None, "dot1q", ... + "service_endpoint_encapsulation_info": (dict) with: + "vlan": ..., (int, present if encapsulation is dot1q) + "vni": ... (int, present if encapsulation is vxlan), + "peers": [(ipv4_1), (ipv4_2)] (present if encapsulation is vxlan) + "mac": ... + "device_id": ..., same meaning that for 'service_endpoint_mapping' (see __init__) + "device_interface_id": same meaning that for 'service_endpoint_mapping' (see __init__) + "switch_dpid": ..., present if mapping has been found for this device_id,device_interface_id + "swith_port": ... present if mapping has been found for this device_id,device_interface_id + "service_mapping_info": present if mapping has been found for this device_id,device_interface_id + :param kwargs: For future versions: + bandwidth (int): value in kilobytes + latency (int): value in milliseconds + Other QoS might be passed as keyword arguments. + :return: tuple: ``(service_id, conn_info)`` containing: + - *service_uuid* (str): UUID of the established connectivity service + - *conn_info* (dict or None): Information to be stored at the database (or ``None``). + This information will be provided to the :meth:`~.edit_connectivity_service` and :obj:`~.delete`. + **MUST** be JSON/YAML-serializable (plain data structures). + :raises: SdnConnectorException: In case of error. Nothing should be created in this case. + Provide the parameter http_code + """ + raise NotImplementedError + + def delete_connectivity_service(self, service_uuid, conn_info=None): + """ + Disconnect multi-site endpoints previously connected + + :param service_uuid: The one returned by create_connectivity_service + :param conn_info: The one returned by last call to 'create_connectivity_service' or 'edit_connectivity_service' + if they do not return None + :return: None + :raises: SdnConnectorException: In case of error. The parameter http_code must be filled + """ + raise NotImplementedError + + def edit_connectivity_service( + self, service_uuid, conn_info=None, connection_points=None, **kwargs + ): + """Change an existing connectivity service. + + This method's arguments and return value follow the same convention as + :meth:`~.create_connectivity_service`. + + :param service_uuid: UUID of the connectivity service. + :param conn_info: (dict or None): Information previously returned by last call to create_connectivity_service + or edit_connectivity_service + :param connection_points: (list): If provided, the old list of connection points will be replaced. + :param kwargs: Same meaning that create_connectivity_service + :return: dict or None: Information to be updated and stored at the database. + When ``None`` is returned, no information should be changed. + When an empty dict is returned, the database record will be deleted. + **MUST** be JSON/YAML-serializable (plain data structures). + Raises: + SdnConnectorException: In case of error. + """ + + def clear_all_connectivity_services(self): + """Delete all WAN Links in a WIM. + + This method is intended for debugging only, and should delete all the + connections controlled by the WIM/SDN, not only the connections that + a specific RO is aware of. + + Raises: + SdnConnectorException: In case of error. + """ + raise NotImplementedError + + def get_all_active_connectivity_services(self): + """Provide information about all active connections provisioned by a + WIM. + + Raises: + SdnConnectorException: In case of error. + """ + raise NotImplementedError diff --git a/src/tests/ofc25/tests/test_functional_cleanup_ip.py b/src/tests/osm_end2end/tests/test_cleanup.py similarity index 89% rename from src/tests/ofc25/tests/test_functional_cleanup_ip.py rename to src/tests/osm_end2end/tests/test_cleanup.py index bf93adbc58715ffdac5b51e6c19fb9b45a1e7df3..bcd079798eb062a75e94dbdee595530084b95bb9 100644 --- a/src/tests/ofc25/tests/test_functional_cleanup_ip.py +++ b/src/tests/osm_end2end/tests/test_cleanup.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -19,12 +19,12 @@ from common.tools.descriptor.Loader import DescriptorLoader, validate_empty_scen from common.tools.object_factory.Context import json_context_id 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 .Fixtures import context_client, device_client # pylint: disable=unused-import LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) -DESCRIPTOR_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'descriptors', 'topology_ip.json') +DESCRIPTOR_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'data', 'tfs-topology.json') ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)) def test_scenario_cleanup( diff --git a/src/tests/ofc25/tests/test_functional_bootstrap_ip.py b/src/tests/osm_end2end/tests/test_onboarding.py similarity index 88% rename from src/tests/ofc25/tests/test_functional_bootstrap_ip.py rename to src/tests/osm_end2end/tests/test_onboarding.py index 580a774fa4ace2c2739aa612edea340e2af85da9..e1578d95153cb3496aeedfcdc911e18c2fa97f45 100644 --- a/src/tests/ofc25/tests/test_functional_bootstrap_ip.py +++ b/src/tests/osm_end2end/tests/test_onboarding.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -19,15 +19,15 @@ from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_lo from common.tools.object_factory.Context import json_context_id 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 .Fixtures import context_client, device_client # pylint: disable=unused-import LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) -DESCRIPTOR_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'descriptors', 'topology_ip.json') +DESCRIPTOR_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'data', 'tfs-topology.json') ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)) -def test_scenario_bootstrap( +def test_scenario_onboarding( context_client : ContextClient, # pylint: disable=redefined-outer-name device_client : DeviceClient, # pylint: disable=redefined-outer-name ) -> None: @@ -47,6 +47,9 @@ def test_scenario_bootstrap( 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 @@ -61,3 +64,4 @@ def test_scenario_devices_enabled( 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/osm_end2end/tests/test_osm_service_create.py b/src/tests/osm_end2end/tests/test_osm_service_create.py new file mode 100644 index 0000000000000000000000000000000000000000..ea748638722e91a607a92c53b1c3aee514176e66 --- /dev/null +++ b/src/tests/osm_end2end/tests/test_osm_service_create.py @@ -0,0 +1,78 @@ +# Copyright 2022-2026 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.Constants import DEFAULT_CONTEXT_NAME +from common.proto.context_pb2 import ContextId, ServiceStatusEnum, ServiceTypeEnum +from common.tools.grpc.Tools import grpc_message_to_json_string +from common.tools.object_factory.Context import json_context_id +from context.client.ContextClient import ContextClient +from .Fixtures import ( # pylint: disable=unused-import + # be careful, order of symbols is important here! + osm_wim, context_client +) +from .MockOSM import MockOSM +from .OSM_Constants import SERVICE_CONNECTION_POINTS, SERVICE_TYPE, SERVICE_VARIANT + + +logging.getLogger('ro.sdn.ietfl2vpn').setLevel(logging.DEBUG) +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)) + + +# pylint: disable=redefined-outer-name, unused-argument +def test_osm_service_create( + osm_wim : MockOSM, context_client : ContextClient +): + LOGGER.warning('Creating OSM service variant=%s', SERVICE_VARIANT) + osm_wim.create_connectivity_service(SERVICE_TYPE, SERVICE_CONNECTION_POINTS) + service_uuid = list(osm_wim.conn_info.keys())[0] # this test adds a single service + + result = osm_wim.get_connectivity_service_status(service_uuid) + assert 'sdn_status' in result + assert result['sdn_status'] == 'ACTIVE' + + # Verify the scenario has 1 service and 0 slices + response = context_client.GetContext(ADMIN_CONTEXT_ID) + assert len(response.service_ids) == 1 + 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 1 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) == 1 + + for service in response.services: + service_id = service.service_id + assert service_id.service_uuid.uuid == service_uuid + assert service.service_status.service_status == ServiceStatusEnum.SERVICESTATUS_ACTIVE + assert service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM + + response = context_client.ListConnections(service_id) + LOGGER.warning(' ServiceId[{:s}] => Connections[{:d}] = {:s}'.format( + grpc_message_to_json_string(service_id), len(response.connections), + grpc_message_to_json_string(response) + )) + assert len(response.connections) == 1 diff --git a/src/tests/osm_end2end/tests/test_osm_service_remove.py b/src/tests/osm_end2end/tests/test_osm_service_remove.py new file mode 100644 index 0000000000000000000000000000000000000000..3607cdc2b9f5517e3d824e6d87dfe6125119c32f --- /dev/null +++ b/src/tests/osm_end2end/tests/test_osm_service_remove.py @@ -0,0 +1,86 @@ +# Copyright 2022-2026 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 typing import Set +from common.Constants import DEFAULT_CONTEXT_NAME +from common.proto.context_pb2 import ContextId, ServiceStatusEnum, ServiceTypeEnum +from common.tools.grpc.Tools import grpc_message_to_json_string +from common.tools.object_factory.Context import json_context_id +from context.client.ContextClient import ContextClient +from .Fixtures import ( # pylint: disable=unused-import + # be careful, order of symbols is important here! + osm_wim, context_client +) +from .MockOSM import MockOSM +from .OSM_Constants import SERVICE_VARIANT + + +logging.getLogger('ro.sdn.ietfl2vpn').setLevel(logging.DEBUG) +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)) + + +# pylint: disable=redefined-outer-name, unused-argument +def test_osm_service_remove( + osm_wim : MockOSM, context_client : ContextClient +): + LOGGER.warning('Removing OSM service variant=%s', SERVICE_VARIANT) + # Verify the scenario has 1 service and 0 slices + response = context_client.GetContext(ADMIN_CONTEXT_ID) + assert len(response.service_ids) == 1 + 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 1 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) == 1 + + service_uuids : Set[str] = set() + for service in response.services: + service_id = service.service_id + assert service.service_status.service_status == ServiceStatusEnum.SERVICESTATUS_ACTIVE + assert service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM + + response = context_client.ListConnections(service_id) + LOGGER.warning(' ServiceId[{:s}] => Connections[{:d}] = {:s}'.format( + grpc_message_to_json_string(service_id), len(response.connections), + grpc_message_to_json_string(response) + )) + assert len(response.connections) == 1 + + service_uuids.add(service_id.service_uuid.uuid) + + # Identify service to delete + assert len(service_uuids) == 1 + service_uuid = service_uuids.pop() + + osm_wim.conn_info[service_uuid] = dict() # delete just needs the placeholder to be populated + osm_wim.delete_connectivity_service(service_uuid) + + # 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 diff --git a/src/tests/p4-fabric-tna/run_test_04b_service_deprovision_l3.sh b/src/tests/p4-fabric-tna/run_test_04b_service_deprovision_l3.sh deleted file mode 100755 index eeb64cdd20f9cfc16068ac889585dca7ac6467a4..0000000000000000000000000000000000000000 --- a/src/tests/p4-fabric-tna/run_test_04b_service_deprovision_l3.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# Copyright 2022-2025 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-fabric-tna/tests-service/test_functional_service_deprovision_l3.py diff --git a/src/tests/p4-fabric-tna/run_test_05a_service_provision_acl.sh b/src/tests/p4-fabric-tna/run_test_05a_service_provision_acl.sh deleted file mode 100755 index cbc0d3a2556abdc5ba80a5d2cc851b4f4285cbb0..0000000000000000000000000000000000000000 --- a/src/tests/p4-fabric-tna/run_test_05a_service_provision_acl.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# Copyright 2022-2025 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-fabric-tna/tests-service/test_functional_service_provision_acl.py diff --git a/src/tests/p4-fabric-tna/run_test_05b_service_deprovision_acl.sh b/src/tests/p4-fabric-tna/run_test_05b_service_deprovision_acl.sh deleted file mode 100755 index 253b51622eae6a39a4fc60de24c45221ea913235..0000000000000000000000000000000000000000 --- a/src/tests/p4-fabric-tna/run_test_05b_service_deprovision_acl.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# Copyright 2022-2025 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-fabric-tna/tests-service/test_functional_service_deprovision_acl.py diff --git a/src/tests/p4-fabric-tna/run_test_06a_service_provision_int.sh b/src/tests/p4-fabric-tna/run_test_06a_service_provision_int.sh deleted file mode 100755 index c3e1b285566dc943a7c1324872bc136e4b4cf713..0000000000000000000000000000000000000000 --- a/src/tests/p4-fabric-tna/run_test_06a_service_provision_int.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# Copyright 2022-2025 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-fabric-tna/tests-service/test_functional_service_provision_int.py diff --git a/src/tests/p4-fabric-tna/run_test_06b_service_deprovision_int.sh b/src/tests/p4-fabric-tna/run_test_06b_service_deprovision_int.sh deleted file mode 100755 index 5e3b1a5ff43e1e1a944bf5d9bdb53e96f0940285..0000000000000000000000000000000000000000 --- a/src/tests/p4-fabric-tna/run_test_06b_service_deprovision_int.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/bash -# Copyright 2022-2025 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-fabric-tna/tests-service/test_functional_service_deprovision_int.py diff --git a/src/tests/p4-fwd-l1/__init__.py b/src/tests/p4-fwd-l1/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/p4-fwd-l1/__init__.py +++ b/src/tests/p4-fwd-l1/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/deploy_specs.sh b/src/tests/p4-fwd-l1/deploy_specs.sh index c1ac6fde3a84ae6d73736d1617bf83b8cbf788bb..1881be1e005c8508434e9ee2b7401122a7271969 100755 --- a/src/tests/p4-fwd-l1/deploy_specs.sh +++ b/src/tests/p4-fwd-l1/deploy_specs.sh @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/mininet/8switch3path.py b/src/tests/p4-fwd-l1/mininet/8switch3path.py index 3d004460bbb26e68f5ff9768cb6543fb0922ff65..335a95c0879da299e69c6c1a8b86ddf98de931f1 100755 --- a/src/tests/p4-fwd-l1/mininet/8switch3path.py +++ b/src/tests/p4-fwd-l1/mininet/8switch3path.py @@ -1,6 +1,6 @@ #!/usr/bin/python -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) # Copyright 2019-present Open Networking Foundation # # Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/src/tests/p4-fwd-l1/probe/monitoring_kpis.py b/src/tests/p4-fwd-l1/probe/monitoring_kpis.py index 2481a3306df8c49543d746a8082bd55d2dc8ee46..0014accc727fcea0c0da42a5d69dff0912a61f0b 100644 --- a/src/tests/p4-fwd-l1/probe/monitoring_kpis.py +++ b/src/tests/p4-fwd-l1/probe/monitoring_kpis.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/probe/probe-tfs/Cargo.toml b/src/tests/p4-fwd-l1/probe/probe-tfs/Cargo.toml index 197cc0d20016a631b86c259554f912f542fc08ac..10e69fb74792ce65154161f081151aa4436cfe05 100644 --- a/src/tests/p4-fwd-l1/probe/probe-tfs/Cargo.toml +++ b/src/tests/p4-fwd-l1/probe/probe-tfs/Cargo.toml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/probe/probe-tfs/build.rs b/src/tests/p4-fwd-l1/probe/probe-tfs/build.rs index 996a7cb21146f8d311a02cfe5ba66b31050cf3ca..682cde2fb6986be1510b09224430ae0ee3eafa68 100644 --- a/src/tests/p4-fwd-l1/probe/probe-tfs/build.rs +++ b/src/tests/p4-fwd-l1/probe/probe-tfs/build.rs @@ -1,5 +1,5 @@ /** - * Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) + * Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/probe/probe-tfs/connect_to_mininet.sh b/src/tests/p4-fwd-l1/probe/probe-tfs/connect_to_mininet.sh index 34f3198fef82e0d94a6ee606a8b86142c600a65e..6ec2775bae77cd6b44294644fa332f2454eacf34 100755 --- a/src/tests/p4-fwd-l1/probe/probe-tfs/connect_to_mininet.sh +++ b/src/tests/p4-fwd-l1/probe/probe-tfs/connect_to_mininet.sh @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/probe/probe-tfs/deploy.sh b/src/tests/p4-fwd-l1/probe/probe-tfs/deploy.sh index 01dfbbf31af65caf05e53630b6fd9073bf380ee7..8150d3b59973552e3326b56d6fdc59ec603a81b0 100755 --- a/src/tests/p4-fwd-l1/probe/probe-tfs/deploy.sh +++ b/src/tests/p4-fwd-l1/probe/probe-tfs/deploy.sh @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/probe/probe-tfs/src/agent.rs b/src/tests/p4-fwd-l1/probe/probe-tfs/src/agent.rs index 2360ffc509cee8508ca3898a5c97518d4def4301..3f690f49423b617d065bc3df3dde0d2e40536194 100644 --- a/src/tests/p4-fwd-l1/probe/probe-tfs/src/agent.rs +++ b/src/tests/p4-fwd-l1/probe/probe-tfs/src/agent.rs @@ -1,5 +1,5 @@ /** - * Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) + * Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/probe/probe-tfs/src/ping.rs b/src/tests/p4-fwd-l1/probe/probe-tfs/src/ping.rs index 41edc7e445c9c7aed070ff07b64bdf37435e7f13..78c5afdc2a67b8cb3c2fd94304b5bef7016fc466 100644 --- a/src/tests/p4-fwd-l1/probe/probe-tfs/src/ping.rs +++ b/src/tests/p4-fwd-l1/probe/probe-tfs/src/ping.rs @@ -1,5 +1,5 @@ /** - * Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) + * Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/run_test_01_bootstrap.sh b/src/tests/p4-fwd-l1/run_test_01_bootstrap.sh index f643d6fca39419eacaa65b88a49fcd8ec5d45b08..a4ad9d7d1b3780cc3d4e21cc53ff7d04dd891acc 100755 --- a/src/tests/p4-fwd-l1/run_test_01_bootstrap.sh +++ b/src/tests/p4-fwd-l1/run_test_01_bootstrap.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/run_test_02_create_service.sh b/src/tests/p4-fwd-l1/run_test_02_create_service.sh index 35057b18829b86b3b4dd08b1b106ee7e25920845..b5c47acf70cd4a09f1eb572bbc9768f9bd927fa7 100755 --- a/src/tests/p4-fwd-l1/run_test_02_create_service.sh +++ b/src/tests/p4-fwd-l1/run_test_02_create_service.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/run_test_03_delete_service.sh b/src/tests/p4-fwd-l1/run_test_03_delete_service.sh index a004dd9d5630122028bdbd157dd1a2b3d3b55b85..938c4ae869cbe31447f5c409d6ffdc383180cb30 100755 --- a/src/tests/p4-fwd-l1/run_test_03_delete_service.sh +++ b/src/tests/p4-fwd-l1/run_test_03_delete_service.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/run_test_04_cleanup.sh b/src/tests/p4-fwd-l1/run_test_04_cleanup.sh index 289ffe4f964948d08f7fca4fee5606c433c43d5b..9096e3d6b0a7b313d870c6550dd8b88381d84d06 100755 --- a/src/tests/p4-fwd-l1/run_test_04_cleanup.sh +++ b/src/tests/p4-fwd-l1/run_test_04_cleanup.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/setup.sh b/src/tests/p4-fwd-l1/setup.sh index f8b5cf7d38944be4182fa49896eb56265134834e..f006a44f215a7bb0503914618811d353e64c6136 100755 --- a/src/tests/p4-fwd-l1/setup.sh +++ b/src/tests/p4-fwd-l1/setup.sh @@ -1,5 +1,5 @@ #! /bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/tests/.gitignore b/src/tests/p4-fwd-l1/tests/.gitignore index 4b05005568d977ff4d65fd7c102a2a0af186e004..6154d41d2a176cb17bba367db08be61f41c040d4 100644 --- a/src/tests/p4-fwd-l1/tests/.gitignore +++ b/src/tests/p4-fwd-l1/tests/.gitignore @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/tests/BuildDescriptors.py b/src/tests/p4-fwd-l1/tests/BuildDescriptors.py index 1dfe9edb73d76097e42a8d464944d9f70304c5c9..0d3dcc68c870ea68f04e1cdd3a10c1d0965c4d89 100644 --- a/src/tests/p4-fwd-l1/tests/BuildDescriptors.py +++ b/src/tests/p4-fwd-l1/tests/BuildDescriptors.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/tests/LoadDescriptors.py b/src/tests/p4-fwd-l1/tests/LoadDescriptors.py index 76c7967d13c8635ef7fbc53ae207f6fac1dc0271..7fb9a552cfcbeb8859c5a750bde80b674a3bd96c 100644 --- a/src/tests/p4-fwd-l1/tests/LoadDescriptors.py +++ b/src/tests/p4-fwd-l1/tests/LoadDescriptors.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/tests/Objects.py b/src/tests/p4-fwd-l1/tests/Objects.py index 96eeb8de074f7186ead9f5fccd1d3b455d2d9884..4c71f704984496c23de901005fe3a2b48da82e23 100644 --- a/src/tests/p4-fwd-l1/tests/Objects.py +++ b/src/tests/p4-fwd-l1/tests/Objects.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/tests/__init__.py b/src/tests/p4-fwd-l1/tests/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/p4-fwd-l1/tests/__init__.py +++ b/src/tests/p4-fwd-l1/tests/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. 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 de300e93d24db9d4a737e61522421fbb005bac39..6de39584d82f974ac39500332239cf643d804536 100644 --- a/src/tests/p4-fwd-l1/tests/test_functional_bootstrap.py +++ b/src/tests/p4-fwd-l1/tests/test_functional_bootstrap.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. 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 2b6850a54e5f232f7e0f47f4baca39567c88af8c..c435266c957d55dad7adb068356900b811410e1c 100644 --- a/src/tests/p4-fwd-l1/tests/test_functional_cleanup.py +++ b/src/tests/p4-fwd-l1/tests/test_functional_cleanup.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. 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 905351ec1824e63ce84b840f502ef5a68bb6d8e8..36eff5b1447f654fd063e17a951f05aaa060b0fd 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 @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. 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 64fc9b046afd4d5ee10d3c0c907d49fbcc15a09b..7e59897577c4027114c4b4498a22766ca7cf1a34 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 @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fwd-l1/tests/topologies/6switchObjects.py b/src/tests/p4-fwd-l1/tests/topologies/6switchObjects.py index b41f8ff7788b49cc22419f72221ba81f9f656c75..a4e5d636cd5e70f7f6340f079df4421dbd9d831d 100644 --- a/src/tests/p4-fwd-l1/tests/topologies/6switchObjects.py +++ b/src/tests/p4-fwd-l1/tests/topologies/6switchObjects.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-sd-fabric-sbi-connectivity/Fixtures.py b/src/tests/p4-sd-fabric-sbi-connectivity/Fixtures.py new file mode 100644 index 0000000000000000000000000000000000000000..cf77538f9d3860c1a45c56038288b87b08b8fd01 --- /dev/null +++ b/src/tests/p4-sd-fabric-sbi-connectivity/Fixtures.py @@ -0,0 +1,39 @@ +# Copyright 2022-2026 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 pytest +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from service.client.ServiceClient import ServiceClient + + +@pytest.fixture(scope='session') +def context_client(): + _client = ContextClient() + yield _client + _client.close() + + +@pytest.fixture(scope='session') +def device_client(): + _client = DeviceClient() + yield _client + _client.close() + + +@pytest.fixture(scope='session') +def service_client(): + _client = ServiceClient() + yield _client + _client.close() diff --git a/src/tests/p4-sd-fabric-sbi-connectivity/README.md b/src/tests/p4-sd-fabric-sbi-connectivity/README.md new file mode 100644 index 0000000000000000000000000000000000000000..0ff0ee6ed4f5d1133b657d54a76e421c68d8cce8 --- /dev/null +++ b/src/tests/p4-sd-fabric-sbi-connectivity/README.md @@ -0,0 +1,185 @@ +# Tests for P4 routing, ACL, and In-Band Network Telemetry functions via TFS SBI + +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 forwarding (L2), routing (L3), L3/L4 access control list (ACL), and In-Band Network Telemetry (INT). +The P4 data plane is based on ONF's SD-Fabric implementation, titled [fabric-tna](https://github.com/stratum/fabric-tna) + +## 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. + +### Deploy TFS + +Go to the TFS parent folder. + +```shell +cd ~/tfs-ctrl/ +``` + +Edit `my_deploy.sh` to include the following TFS components and then source the file. + +```shell +nano my_deploy.sh +`export TFS_COMPONENTS="context device pathcomp service kpi_manager kpi_value_writer kpi_value_api telemetry nbi webui"` +``` + +```shell +source my_deploy.sh && source tfs_runtime_env_vars.sh +``` + +Now deploy TFS: + +```shell +./deploy/all.sh +``` + +When deployed, execute the following command to ensure that the above components are all in place and in a running state: + +```shell +./deploy/show.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 + +Go to `src/tests/p4-topologies/` and follow the instructions on how to install Mininet in your machine. +After Mininet is installed, run the following command to deploy a single switch P4 topology on Mininet. + +```bash +cd ~/tfs-ctrl/src/tests/p4-topologies/topo-mininet/ +sudo python3 topo-mininet/1switch1path-int.py --host-int-iface=eth0 +``` + +You may need to change the `host-int-iface` to a network interface that suits your setup. +This is the interface through which Mininet sends in-band network telemetry packets to TFS. + +## 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 + +A set of tests is implemented, each focusing on different aspects of TFS. +For each of these tests, an auxiliary bash script allows to run it with less typing. + +| Bash Runner | Purpose | +| -------------------------------------------- | --------------------------------------------------------------------------- | +| setup.sh | Copy P4 artifacts into the SBI pod | +| run_test_01_bootstrap.sh | Connect TFS to the P4 switch | +| run_test_02_sbi_provision_int_l2_l3_acl.sh | Install L2, L3, INT, and ACL rules on the P4 switch via the SBI service | +| run_test_03_sbi_deprovision_int_l2_l3_acl.sh | Uninstall L2, L3, INT, and ACL rules from the P4 switch via the SBI service | +| run_test_04_cleanup.sh | Clean-up context and topology and disconnect TFS from the P4 switch | + +Each of the tests above is described in detail below. + +### Step 0: 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-sd-fabric-sbi-connectivity/setup.sh +``` + +### Step 1: Bootstrap topology + +The bootstrap script registers the context, topology, links, and devices to TFS. + +```shell +cd ~/tfs-ctrl/ +bash src/tests/p4-sd-fabric-sbi-connectivity/run_test_01_bootstrap.sh +``` + +### Step 2: Provision L2, L3, ACL, and INT via the SBI API + +Implement forwarding, routing, ACL, and INT network functions by installing P4 rules to the Stratum switch via the TFS SBI API. +In this test, these rules are installed in batches, as the switch cannot digest all these rules at once. + +```shell +cd ~/tfs-ctrl/ +bash src/tests/p4-sd-fabric-sbi-connectivity/run_test_02_sbi_provision_int_l2_l3_acl.sh +``` + +To observe the telemetry coming from Mininet, you may configure Prometheus and Grafana as follows. +First, connect TFS Grafana with the Prometheus data source, after you modify `TFS_IP` variable in the following script: + +```shell +cd ~/tfs-ctrl/ +bash src/tests/p4-sd-fabric-sbi-connectivity/run_grafana_datasources.sh +``` + +Then, publish a dashboard showing the switch latency, after you ensure that the `DASHBOARD_FILE` variable in the following script points to the correct file in your filesystem. + +```shell +cd ~/tfs-ctrl/ +bash src/tests/p4-sd-fabric-sbi-connectivity/run_grafana_dashboard.sh +``` + +### Step 3: Deprovision L2, L3, ACL, and INT via the SBI API + +Deprovision forwarding, 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-sd-fabric-sbi-connectivity/run_test_03_sbi_deprovision_int_l2_l3_acl.sh +``` + +### Step 4: Deprovision topology + +Delete all the objects (context, topology, links, devices) from TFS: + +```shell +cd ~/tfs-ctrl/ +bash src/tests/p4-sd-fabric-sbi-connectivity/run_test_04_cleanup.sh +``` + +Alternatively, a purge test is implemented; this test removes services, links, devices, topology, and context in this order. + +```shell +cd ~/tfs-ctrl/ +bash src/tests/p4-sd-fabric-sbi-connectivity/run_test_05_purge.sh +``` diff --git a/src/tests/p4-sd-fabric-sbi-connectivity/__init__.py b/src/tests/p4-sd-fabric-sbi-connectivity/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 --- /dev/null +++ b/src/tests/p4-sd-fabric-sbi-connectivity/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2022-2026 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-sd-fabric-sbi-connectivity/descriptors/grafana-latency.json b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/grafana-latency.json new file mode 100644 index 0000000000000000000000000000000000000000..e02d1cc268d628de2bcc2f7d4211b77d7a575757 --- /dev/null +++ b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/grafana-latency.json @@ -0,0 +1,175 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": [], + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "8.5.22" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "Latency", + "axisPlacement": "left", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 17, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineStyle": { + "dash": [ + 20, + 10 + ], + "fill": "dash" + }, + "lineWidth": 2, + "pointSize": 4, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ns" + }, + "overrides": [] + }, + "gridPos": { + "h": 17, + "w": 23, + "x": 0, + "y": 0 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "avg(KPISAMPLETYPE_INT_HOP_LAT_SW01)", + "refId": "A" + } + ], + "title": "P4 switch latency", + "transparent": true, + "type": "timeseries" + } + ], + "refresh": "5s", + "schemaVersion": 36, + "style": "dark", + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Latency", + "uid": "VefdTgZvk", + "version": 2, + "weekStart": "" +} \ No newline at end of file diff --git a/src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-acl.json b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-acl.json similarity index 94% rename from src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-acl.json rename to src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-acl.json index 97a548983f29c7af8c1da21fda5ab09b45a940aa..9fd750539bae8f8da2f80ade9df92fbcac209491 100644 --- a/src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-acl.json +++ b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-acl.json @@ -3,10 +3,10 @@ { "device_id": { "device_uuid": { - "uuid": "p4-sw1" + "uuid": "sw1" } }, - "name": "p4-sw1", + "name": "sw1", "device_operational_status": "DEVICEOPERATIONALSTATUS_ENABLED", "device_config": { "config_rules": [ diff --git a/src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-int-b1.json b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-int-b1.json similarity index 97% rename from src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-int-b1.json rename to src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-int-b1.json index 3fc9a71732aef424b85c9b91b255083b3e1badbb..22aa84205972705b60af50056b2053ff2915cca8 100644 --- a/src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-int-b1.json +++ b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-int-b1.json @@ -3,10 +3,10 @@ { "device_id": { "device_uuid": { - "uuid": "p4-sw1" + "uuid": "sw1" } }, - "name": "p4-sw1", + "name": "sw1", "device_operational_status": "DEVICEOPERATIONALSTATUS_ENABLED", "device_config": { "config_rules": [ @@ -120,7 +120,7 @@ }, { "match-field": "ipv4_dst", - "match-value": "10.10.10.41&&&0xFFFFFFFF" + "match-value": "192.168.5.137&&&0xFFFFFFFF" } ], "action-name": "FabricIngress.int_watchlist.no_report_collector", diff --git a/src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-int-b2.json b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-int-b2.json similarity index 88% rename from src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-int-b2.json rename to src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-int-b2.json index e6b5a8ea8590586b2aeee46eb9b736b1e27ba35e..8650d18ec11c79b69643dbc1fa793c0150b8ea7f 100644 --- a/src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-int-b2.json +++ b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-int-b2.json @@ -3,10 +3,10 @@ { "device_id": { "device_uuid": { - "uuid": "p4-sw1" + "uuid": "sw1" } }, - "name": "p4-sw1", + "name": "sw1", "device_operational_status": "DEVICEOPERATIONALSTATUS_ENABLED", "device_config": { "config_rules": [ @@ -34,15 +34,15 @@ "action-params": [ { "action-param": "src_ip", - "action-value": "10.10.10.120" + "action-value": "192.168.5.139" }, { "action-param": "mon_ip", - "action-value": "10.10.10.41" + "action-value": "192.168.5.137" }, { "action-param": "mon_port", - "action-value": "32766" + "action-value": "12345" }, { "action-param": "switch_id", @@ -76,15 +76,15 @@ "action-params": [ { "action-param": "src_ip", - "action-value": "10.10.10.120" + "action-value": "192.168.5.139" }, { "action-param": "mon_ip", - "action-value": "10.10.10.41" + "action-value": "192.168.5.137" }, { "action-param": "mon_port", - "action-value": "32766" + "action-value": "12345" }, { "action-param": "switch_id", @@ -118,15 +118,15 @@ "action-params": [ { "action-param": "src_ip", - "action-value": "10.10.10.120" + "action-value": "192.168.5.139" }, { "action-param": "mon_ip", - "action-value": "10.10.10.41" + "action-value": "192.168.5.137" }, { "action-param": "mon_port", - "action-value": "32766" + "action-value": "12345" }, { "action-param": "switch_id", @@ -160,15 +160,15 @@ "action-params": [ { "action-param": "src_ip", - "action-value": "10.10.10.120" + "action-value": "192.168.5.139" }, { "action-param": "mon_ip", - "action-value": "10.10.10.41" + "action-value": "192.168.5.137" }, { "action-param": "mon_port", - "action-value": "32766" + "action-value": "12345" }, { "action-param": "switch_id", @@ -202,15 +202,15 @@ "action-params": [ { "action-param": "src_ip", - "action-value": "10.10.10.120" + "action-value": "192.168.5.139" }, { "action-param": "mon_ip", - "action-value": "10.10.10.41" + "action-value": "192.168.5.137" }, { "action-param": "mon_port", - "action-value": "32766" + "action-value": "12345" }, { "action-param": "switch_id", @@ -244,15 +244,15 @@ "action-params": [ { "action-param": "src_ip", - "action-value": "10.10.10.120" + "action-value": "192.168.5.139" }, { "action-param": "mon_ip", - "action-value": "10.10.10.41" + "action-value": "192.168.5.137" }, { "action-param": "mon_port", - "action-value": "32766" + "action-value": "12345" }, { "action-param": "switch_id", diff --git a/src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-int-b3.json b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-int-b3.json similarity index 95% rename from src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-int-b3.json rename to src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-int-b3.json index f8d2c71830d3ef55ea8ffd97e3557fc9d8cc6315..66bdbbdd1923ad2078154ba99240967e89c4970d 100644 --- a/src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-int-b3.json +++ b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-int-b3.json @@ -3,10 +3,10 @@ { "device_id": { "device_uuid": { - "uuid": "p4-sw1" + "uuid": "sw1" } }, - "name": "p4-sw1", + "name": "sw1", "device_operational_status": "DEVICEOPERATIONALSTATUS_ENABLED", "device_config": { "config_rules": [ @@ -102,7 +102,7 @@ }, { "match-field": "eth_dst", - "match-value": "fa:16:3e:fb:cf:96" + "match-value": "46:e4:58:c6:74:53" } ], "action-name": "FabricIngress.forwarding.set_next_id_bridging", @@ -147,7 +147,7 @@ "match-fields": [ { "match-field": "ipv4_dst", - "match-value": "10.10.10.41/32" + "match-value": "192.168.5.137/32" } ], "action-name": "FabricIngress.forwarding.set_next_id_routing_v4", @@ -180,11 +180,11 @@ }, { "action-param": "smac", - "action-value": "fa:16:3e:93:8c:c0" + "action-value": "ee:ee:8c:6c:f3:2c" }, { "action-param": "dmac", - "action-value": "fa:16:3e:fb:cf:96" + "action-value": "46:e4:58:c6:74:53" } ] } diff --git a/src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-routing-east.json b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-routing-east.json similarity index 95% rename from src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-routing-east.json rename to src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-routing-east.json index 0fe8b5036f8446f65e8fca85ddeea97cd6ed8cd0..2a54108f010fe3172a1b872c0e9939f77f41e7a4 100644 --- a/src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-routing-east.json +++ b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-routing-east.json @@ -3,10 +3,10 @@ { "device_id": { "device_uuid": { - "uuid": "p4-sw1" + "uuid": "sw1" } }, - "name": "p4-sw1", + "name": "sw1", "device_operational_status": "DEVICEOPERATIONALSTATUS_ENABLED", "device_config": { "config_rules": [ @@ -102,7 +102,7 @@ }, { "match-field": "eth_dst", - "match-value": "fa:16:3e:e2:af:28" + "match-value": "00:00:00:00:00:02" } ], "action-name": "FabricIngress.forwarding.set_next_id_bridging", @@ -147,7 +147,7 @@ "match-fields": [ { "match-field": "ipv4_dst", - "match-value": "172.16.10.9/32" + "match-value": "10.0.0.2/32" } ], "action-name": "FabricIngress.forwarding.set_next_id_routing_v4", @@ -180,11 +180,11 @@ }, { "action-param": "smac", - "action-value": "fa:16:3e:9b:cb:a1" + "action-value": "00:00:00:00:00:01" }, { "action-param": "dmac", - "action-value": "fa:16:3e:e2:af:28" + "action-value": "00:00:00:00:00:02" } ] } diff --git a/src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-routing-west.json b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-routing-west.json similarity index 95% rename from src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-routing-west.json rename to src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-routing-west.json index c48d9d31e2b36dd1710ab53d51280759e82cca1c..6e30d8b3a7ee28560eaae9a86b94b4d50c9bf80e 100644 --- a/src/tests/p4-fabric-tna/descriptors/sbi-rules-insert-routing-west.json +++ b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-insert-routing-west.json @@ -3,10 +3,10 @@ { "device_id": { "device_uuid": { - "uuid": "p4-sw1" + "uuid": "sw1" } }, - "name": "p4-sw1", + "name": "sw1", "device_operational_status": "DEVICEOPERATIONALSTATUS_ENABLED", "device_config": { "config_rules": [ @@ -102,7 +102,7 @@ }, { "match-field": "eth_dst", - "match-value": "fa:16:3e:58:92:ba" + "match-value": "00:00:00:00:00:01" } ], "action-name": "FabricIngress.forwarding.set_next_id_bridging", @@ -147,7 +147,7 @@ "match-fields": [ { "match-field": "ipv4_dst", - "match-value": "10.158.72.25/32" + "match-value": "10.0.0.1/32" } ], "action-name": "FabricIngress.forwarding.set_next_id_routing_v4", @@ -180,11 +180,11 @@ }, { "action-param": "smac", - "action-value": "fa:16:3e:e2:af:28" + "action-value": "00:00:00:00:00:02" }, { "action-param": "dmac", - "action-value": "fa:16:3e:58:92:ba" + "action-value": "00:00:00:00:00:01" } ] } diff --git a/src/tests/p4-fabric-tna/descriptors/sbi-rules-remove.json b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-remove.json similarity index 94% rename from src/tests/p4-fabric-tna/descriptors/sbi-rules-remove.json rename to src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-remove.json index 68132e9e6ec09435cfcbaae16a9c2287e9c649b5..f82b25f893fa5b0f85c93659d70ab75f97c456e3 100644 --- a/src/tests/p4-fabric-tna/descriptors/sbi-rules-remove.json +++ b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/sbi-rules-remove.json @@ -3,10 +3,10 @@ { "device_id": { "device_uuid": { - "uuid": "p4-sw1" + "uuid": "sw1" } }, - "name": "p4-sw1", + "name": "sw1", "device_operational_status": "DEVICEOPERATIONALSTATUS_ENABLED", "device_config": { "config_rules": [ @@ -131,15 +131,15 @@ "action-params": [ { "action-param": "src_ip", - "action-value": "10.10.10.120" + "action-value": "192.168.5.139" }, { "action-param": "mon_ip", - "action-value": "10.10.10.41" + "action-value": "192.168.5.137" }, { "action-param": "mon_port", - "action-value": "32766" + "action-value": "12345" }, { "action-param": "switch_id", @@ -173,15 +173,15 @@ "action-params": [ { "action-param": "src_ip", - "action-value": "10.10.10.120" + "action-value": "192.168.5.139" }, { "action-param": "mon_ip", - "action-value": "10.10.10.41" + "action-value": "192.168.5.137" }, { "action-param": "mon_port", - "action-value": "32766" + "action-value": "12345" }, { "action-param": "switch_id", @@ -215,15 +215,15 @@ "action-params": [ { "action-param": "src_ip", - "action-value": "10.10.10.120" + "action-value": "192.168.5.139" }, { "action-param": "mon_ip", - "action-value": "10.10.10.41" + "action-value": "192.168.5.137" }, { "action-param": "mon_port", - "action-value": "32766" + "action-value": "12345" }, { "action-param": "switch_id", @@ -257,15 +257,15 @@ "action-params": [ { "action-param": "src_ip", - "action-value": "10.10.10.120" + "action-value": "192.168.5.139" }, { "action-param": "mon_ip", - "action-value": "10.10.10.41" + "action-value": "192.168.5.137" }, { "action-param": "mon_port", - "action-value": "32766" + "action-value": "12345" }, { "action-param": "switch_id", @@ -299,15 +299,15 @@ "action-params": [ { "action-param": "src_ip", - "action-value": "10.10.10.120" + "action-value": "192.168.5.139" }, { "action-param": "mon_ip", - "action-value": "10.10.10.41" + "action-value": "192.168.5.137" }, { "action-param": "mon_port", - "action-value": "32766" + "action-value": "12345" }, { "action-param": "switch_id", @@ -341,15 +341,15 @@ "action-params": [ { "action-param": "src_ip", - "action-value": "10.10.10.120" + "action-value": "192.168.5.139" }, { "action-param": "mon_ip", - "action-value": "10.10.10.41" + "action-value": "192.168.5.137" }, { "action-param": "mon_port", - "action-value": "32766" + "action-value": "12345" }, { "action-param": "switch_id", @@ -372,7 +372,7 @@ }, { "match-field": "ipv4_dst", - "match-value": "10.10.10.41&&&0xFFFFFFFF" + "match-value": "192.168.5.137&&&0xFFFFFFFF" } ], "action-name": "FabricIngress.int_watchlist.no_report_collector", @@ -473,7 +473,7 @@ }, { "match-field": "eth_dst", - "match-value": "fa:16:3e:fb:cf:96" + "match-value": "46:e4:58:c6:74:53" } ], "action-name": "FabricIngress.forwarding.set_next_id_bridging", @@ -518,7 +518,7 @@ "match-fields": [ { "match-field": "ipv4_dst", - "match-value": "10.10.10.41/32" + "match-value": "192.168.5.137/32" } ], "action-name": "FabricIngress.forwarding.set_next_id_routing_v4", @@ -551,11 +551,11 @@ }, { "action-param": "smac", - "action-value": "fa:16:3e:93:8c:c0" + "action-value": "ee:ee:8c:6c:f3:2c" }, { "action-param": "dmac", - "action-value": "fa:16:3e:fb:cf:96" + "action-value": "46:e4:58:c6:74:53" } ] } @@ -668,7 +668,7 @@ }, { "match-field": "eth_dst", - "match-value": "fa:16:3e:58:92:ba" + "match-value": "00:00:00:00:00:01" } ], "action-name": "FabricIngress.forwarding.set_next_id_bridging", @@ -713,7 +713,7 @@ "match-fields": [ { "match-field": "ipv4_dst", - "match-value": "10.158.72.25/32" + "match-value": "10.0.0.1/32" } ], "action-name": "FabricIngress.forwarding.set_next_id_routing_v4", @@ -746,11 +746,11 @@ }, { "action-param": "smac", - "action-value": "fa:16:3e:e2:af:28" + "action-value": "00:00:00:00:00:02" }, { "action-param": "dmac", - "action-value": "fa:16:3e:58:92:ba" + "action-value": "00:00:00:00:00:01" } ] } @@ -848,7 +848,7 @@ }, { "match-field": "eth_dst", - "match-value": "fa:16:3e:e2:af:28" + "match-value": "00:00:00:00:00:02" } ], "action-name": "FabricIngress.forwarding.set_next_id_bridging", @@ -893,7 +893,7 @@ "match-fields": [ { "match-field": "ipv4_dst", - "match-value": "172.16.10.9/32" + "match-value": "10.0.0.2/32" } ], "action-name": "FabricIngress.forwarding.set_next_id_routing_v4", @@ -926,11 +926,11 @@ }, { "action-param": "smac", - "action-value": "fa:16:3e:9b:cb:a1" + "action-value": "00:00:00:00:00:01" }, { "action-param": "dmac", - "action-value": "fa:16:3e:e2:af:28" + "action-value": "00:00:00:00:00:02" } ] } diff --git a/src/tests/p4-fabric-tna/descriptors/topology.json b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/topology.json similarity index 79% rename from src/tests/p4-fabric-tna/descriptors/topology.json rename to src/tests/p4-sd-fabric-sbi-connectivity/descriptors/topology.json index 619060e9e00bd589ea988d2cda77f177615b85a0..420cc8f0f883a37ddb07fff749220590b79fe2c2 100644 --- a/src/tests/p4-fabric-tna/descriptors/topology.json +++ b/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/topology.json @@ -10,8 +10,8 @@ { "device_id": {"device_uuid": {"uuid": "tfs-sdn-controller"}}, "name": "tfs-sdn-controller", - "device_type": "ietf-slice", - "device_drivers": ["DEVICEDRIVER_IETF_SLICE"], + "device_type": "teraflowsdn", + "device_drivers": ["DEVICEDRIVER_UNDEFINED"], "device_operational_status": "DEVICEOPERATIONALSTATUS_UNDEFINED", "device_config": {"config_rules": [ {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}}, @@ -22,8 +22,8 @@ ]} }, { - "device_id": {"device_uuid": {"uuid": "west-net"}}, - "device_type": "network", + "device_id": {"device_uuid": {"uuid": "h1"}}, + "device_type": "emu-client", "device_drivers": ["DEVICEDRIVER_UNDEFINED"], "device_config": { "config_rules": [ @@ -36,8 +36,8 @@ } }, { - "device_id": {"device_uuid": {"uuid": "east-net"}}, - "device_type": "network", + "device_id": {"device_uuid": {"uuid": "h2"}}, + "device_type": "emu-client", "device_drivers": ["DEVICEDRIVER_UNDEFINED"], "device_config": { "config_rules": [ @@ -80,26 +80,26 @@ ], "links": [ { - "link_id": {"link_uuid": {"uuid": "sw1/1==west-net/eth1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + "link_id": {"link_uuid": {"uuid": "sw1/1==h1/eth1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ {"device_id": {"device_uuid": {"uuid": "sw1"}}, "endpoint_uuid": {"uuid": "1"}}, - {"device_id": {"device_uuid": {"uuid": "west-net"}}, "endpoint_uuid": {"uuid": "eth1"}} + {"device_id": {"device_uuid": {"uuid": "h1"}}, "endpoint_uuid": {"uuid": "eth1"}} ] }, { - "link_id": {"link_uuid": {"uuid": "west-net/eth1==sw1/1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ - {"device_id": {"device_uuid": {"uuid": "west-net"}}, "endpoint_uuid": {"uuid": "eth1"}}, + "link_id": {"link_uuid": {"uuid": "h1/eth1==sw1/1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "h1"}}, "endpoint_uuid": {"uuid": "eth1"}}, {"device_id": {"device_uuid": {"uuid": "sw1"}}, "endpoint_uuid": {"uuid": "1"}} ] }, { - "link_id": {"link_uuid": {"uuid": "sw1/2==east-net/eth1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + "link_id": {"link_uuid": {"uuid": "sw1/2==h2/eth1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ {"device_id": {"device_uuid": {"uuid": "sw1"}}, "endpoint_uuid": {"uuid": "2"}}, - {"device_id": {"device_uuid": {"uuid": "east-net"}}, "endpoint_uuid": {"uuid": "eth1"}} + {"device_id": {"device_uuid": {"uuid": "h2"}}, "endpoint_uuid": {"uuid": "eth1"}} ] }, { - "link_id": {"link_uuid": {"uuid": "east-net/eth1==sw1/2"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ - {"device_id": {"device_uuid": {"uuid": "east-net"}}, "endpoint_uuid": {"uuid": "eth1"}}, + "link_id": {"link_uuid": {"uuid": "h2/eth1==sw1/2"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "h2"}}, "endpoint_uuid": {"uuid": "eth1"}}, {"device_id": {"device_uuid": {"uuid": "sw1"}}, "endpoint_uuid": {"uuid": "2"}} ] }, diff --git a/src/tests/p4-fabric-tna/p4src/README.md b/src/tests/p4-sd-fabric-sbi-connectivity/p4src/README.md similarity index 100% rename from src/tests/p4-fabric-tna/p4src/README.md rename to src/tests/p4-sd-fabric-sbi-connectivity/p4src/README.md diff --git a/src/tests/p4-fabric-tna/p4src/_pp.p4 b/src/tests/p4-sd-fabric-sbi-connectivity/p4src/_pp.p4 similarity index 100% rename from src/tests/p4-fabric-tna/p4src/_pp.p4 rename to src/tests/p4-sd-fabric-sbi-connectivity/p4src/_pp.p4 diff --git a/src/tests/p4-fabric-tna/p4src/bmv2.json b/src/tests/p4-sd-fabric-sbi-connectivity/p4src/bmv2.json similarity index 100% rename from src/tests/p4-fabric-tna/p4src/bmv2.json rename to src/tests/p4-sd-fabric-sbi-connectivity/p4src/bmv2.json diff --git a/src/tests/p4-fabric-tna/p4src/p4info.txt b/src/tests/p4-sd-fabric-sbi-connectivity/p4src/p4info.txt similarity index 100% rename from src/tests/p4-fabric-tna/p4src/p4info.txt rename to src/tests/p4-sd-fabric-sbi-connectivity/p4src/p4info.txt diff --git a/src/tests/p4-sd-fabric-sbi-connectivity/run_grafana_dashboard.sh b/src/tests/p4-sd-fabric-sbi-connectivity/run_grafana_dashboard.sh new file mode 100644 index 0000000000000000000000000000000000000000..40b9072739872cdc371b048065196b8b97b3fc68 --- /dev/null +++ b/src/tests/p4-sd-fabric-sbi-connectivity/run_grafana_dashboard.sh @@ -0,0 +1,93 @@ +#!/bin/bash +# Copyright 2022-2026 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. + + +# ----------------------------------- +# CONFIGURATION +# ----------------------------------- + +GRAFANA_URL="http://localhost:80/grafana" # Your Grafana URL +GRAFANA_USERNAME="admin" +GRAFANA_PASSWORD="admin" + +DATASOURCE_NAME="Prometheus" +DASHBOARD_FILE="/home/ubuntu/tfs-ctrl/src/tests/p4-sd-fabric-sbi-connectivity/descriptors/grafana-latency.json" # Path to your dashboard JSON + +# ----------------------------------- +# READ DASHBOARD JSON +# ----------------------------------- +if [ ! -f "$DASHBOARD_FILE" ]; then + echo "[ERROR] Dashboard file not found: $DASHBOARD_FILE" + exit 1 +fi + +DASHBOARD_JSON=$(cat "$DASHBOARD_FILE") + +# --------------------------------------- +# 1. Get the datasource UID +# --------------------------------------- + +PROM_UID=$(curl -s \ + -u "${GRAFANA_USERNAME}:${GRAFANA_PASSWORD}" \ + "${GRAFANA_URL}/api/datasources/name/${DATASOURCE_NAME}" \ + | jq -r '.uid') + +if [ -z "$PROM_UID" ] || [ "$PROM_UID" == "null" ]; then + echo "ERROR: Could not retrieve datasource UID. Check datasource name/auth." + exit 1 +fi + +echo "Found datasource UID: $PROM_UID" + +# --------------------------------------- +# 2. Inject the UID into dashboard JSON +# --------------------------------------- + +DASHBOARD_JSON=$(jq --arg uid "$PROM_UID" ' + walk( + if type == "object" and has("datasource") then + .datasource |= + (if type == "object" then .uid = $uid else $uid end) + else . + end + ) +' "$DASHBOARD_FILE") + +# --------------------------------------- +# 3. Wrap in Grafana API import format +# --------------------------------------- + +read -r -d '' IMPORT_JSON << EOF +{ + "dashboard": ${DASHBOARD_JSON}, + "overwrite": true, + "folderId": 0, + "message": "Imported via API" +} +EOF + +# ----------------------------------- +# 4. Import dashboard using API +# ----------------------------------- + +echo "Importing dashboard into Grafana..." + +curl -X POST "${GRAFANA_URL}/api/dashboards/db" \ + -H "Content-Type: application/json" \ + -u "${GRAFANA_USERNAME}:${GRAFANA_PASSWORD}" \ + -d "${IMPORT_JSON}" + +echo +echo "Done" diff --git a/src/tests/p4-sd-fabric-sbi-connectivity/run_grafana_datasources.sh b/src/tests/p4-sd-fabric-sbi-connectivity/run_grafana_datasources.sh new file mode 100644 index 0000000000000000000000000000000000000000..b33b56e773ce68b1c48f4719b201e617afd5da18 --- /dev/null +++ b/src/tests/p4-sd-fabric-sbi-connectivity/run_grafana_datasources.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# Copyright 2022-2026 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. + + +# --------------------------- +# CONFIGURATION +# --------------------------- + +TFS_IP="192.168.5.137" + +GRAFANA_URL="http://localhost:80/grafana" # Your Grafana URL +GRAFANA_USERNAME="admin" +GRAFANA_PASSWORD="admin" + +DATASOURCE_NAME="Prometheus" +PROMETHEUS_URL="http://${TFS_IP}:30090/" # URL of your Prometheus server + +# --------------------------- +# CREATE DATA SOURCE PAYLOAD +# --------------------------- + +read -r -d '' DATA_SOURCE_JSON << EOF +{ + "name": "${DATASOURCE_NAME}", + "type": "prometheus", + "access": "proxy", + "url": "${PROMETHEUS_URL}", + "basicAuth": false, + "isDefault": true, + "editable": true +} +EOF + +# --------------------------- +# SEND REQUEST (with username/password) +# --------------------------- + +echo "Creating Prometheus datasource in Grafana..." + +curl -X POST "${GRAFANA_URL}/api/datasources" \ + -H "Content-Type: application/json" \ + -u "${GRAFANA_USERNAME}:${GRAFANA_PASSWORD}" \ + -d "${DATA_SOURCE_JSON}" + +echo +echo "Done" diff --git a/src/tests/p4-fabric-tna/run_test_01_bootstrap.sh b/src/tests/p4-sd-fabric-sbi-connectivity/run_test_01_bootstrap.sh similarity index 81% rename from src/tests/p4-fabric-tna/run_test_01_bootstrap.sh rename to src/tests/p4-sd-fabric-sbi-connectivity/run_test_01_bootstrap.sh index 7bef3a4487c0b2a0e0c97e09672871206906de5e..2fc0ae61d3cf0035909c1d7d69b8e825f049118c 100755 --- a/src/tests/p4-fabric-tna/run_test_01_bootstrap.sh +++ b/src/tests/p4-sd-fabric-sbi-connectivity/run_test_01_bootstrap.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -18,4 +18,4 @@ # - tfs_runtime_env_vars.sh source tfs_runtime_env_vars.sh -python3 -m pytest --verbose src/tests/p4-fabric-tna/tests-setup/test_functional_bootstrap.py +python3 -m pytest --verbose src/tests/p4-sd-fabric-sbi-connectivity/test_functional_bootstrap.py diff --git a/src/tests/p4-fabric-tna/run_test_04a_service_provision_l3.sh b/src/tests/p4-sd-fabric-sbi-connectivity/run_test_02_sbi_provision.sh similarity index 77% rename from src/tests/p4-fabric-tna/run_test_04a_service_provision_l3.sh rename to src/tests/p4-sd-fabric-sbi-connectivity/run_test_02_sbi_provision.sh index 6bec4a8929394ed7526dee1c840c3cb46efbcce2..90134fe2d43c7830adec8aeae05991903baa7ffb 100755 --- a/src/tests/p4-fabric-tna/run_test_04a_service_provision_l3.sh +++ b/src/tests/p4-sd-fabric-sbi-connectivity/run_test_02_sbi_provision.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,4 +14,4 @@ # limitations under the License. source tfs_runtime_env_vars.sh -python3 -m pytest --verbose src/tests/p4-fabric-tna/tests-service/test_functional_service_provision_l3.py +python3 -m pytest --verbose src/tests/p4-sd-fabric-sbi-connectivity/test_functional_sbi_rules_provision.py diff --git a/src/tests/p4-fabric-tna/run_test_03b_service_deprovision_l2.sh b/src/tests/p4-sd-fabric-sbi-connectivity/run_test_03_sbi_deprovision.sh similarity index 77% rename from src/tests/p4-fabric-tna/run_test_03b_service_deprovision_l2.sh rename to src/tests/p4-sd-fabric-sbi-connectivity/run_test_03_sbi_deprovision.sh index 4bd4edb4556aebe87dfe84ae073ca8dc81878251..44b45aecb7d1034c3dcbacf45d48db26250fa15a 100755 --- a/src/tests/p4-fabric-tna/run_test_03b_service_deprovision_l2.sh +++ b/src/tests/p4-sd-fabric-sbi-connectivity/run_test_03_sbi_deprovision.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,4 +14,4 @@ # limitations under the License. source tfs_runtime_env_vars.sh -python3 -m pytest --verbose src/tests/p4-fabric-tna/tests-service/test_functional_service_deprovision_l2.py +python3 -m pytest --verbose src/tests/p4-sd-fabric-sbi-connectivity/test_functional_sbi_rules_deprovision.py diff --git a/src/tests/p4-fabric-tna/run_test_02a_sbi_provision_int_l2_l3_acl.sh b/src/tests/p4-sd-fabric-sbi-connectivity/run_test_04_cleanup.sh similarity index 78% rename from src/tests/p4-fabric-tna/run_test_02a_sbi_provision_int_l2_l3_acl.sh rename to src/tests/p4-sd-fabric-sbi-connectivity/run_test_04_cleanup.sh index 4ddb1e41d7e0b8cfc29c905047fafc8a1c808a24..cd3f41eb15f7b3d00cc114c6755b223015a7c665 100755 --- a/src/tests/p4-fabric-tna/run_test_02a_sbi_provision_int_l2_l3_acl.sh +++ b/src/tests/p4-sd-fabric-sbi-connectivity/run_test_04_cleanup.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,4 +14,4 @@ # limitations under the License. source tfs_runtime_env_vars.sh -python3 -m pytest --verbose src/tests/p4-fabric-tna/tests-sbi/test_functional_sbi_rules_provision.py +python3 -m pytest --verbose src/tests/p4-sd-fabric-sbi-connectivity/test_functional_cleanup.py diff --git a/src/tests/p4-fabric-tna/run_test_07_cleanup.sh b/src/tests/p4-sd-fabric-sbi-connectivity/run_test_05_purge.sh similarity index 79% rename from src/tests/p4-fabric-tna/run_test_07_cleanup.sh rename to src/tests/p4-sd-fabric-sbi-connectivity/run_test_05_purge.sh index 74db934a8a4fa8390774e52526819e20cb796a23..5a7f85fd8114b0c0c4ef4d5b7ccb6c3fc1b5fd75 100755 --- a/src/tests/p4-fabric-tna/run_test_07_cleanup.sh +++ b/src/tests/p4-sd-fabric-sbi-connectivity/run_test_05_purge.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,4 +14,4 @@ # limitations under the License. source tfs_runtime_env_vars.sh -python3 -m pytest --verbose src/tests/p4-fabric-tna/tests-setup/test_functional_cleanup.py +python3 -m pytest --verbose src/tests/p4-sd-fabric-sbi-connectivity/test_functional_purge.py diff --git a/src/tests/p4-sd-fabric-sbi-connectivity/setup.sh b/src/tests/p4-sd-fabric-sbi-connectivity/setup.sh new file mode 100755 index 0000000000000000000000000000000000000000..f66eaff57f9a4beb80b3f1a690c64b8f3d5bc254 --- /dev/null +++ b/src/tests/p4-sd-fabric-sbi-connectivity/setup.sh @@ -0,0 +1,22 @@ +#! /bin/bash +# Copyright 2022-2026 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-sd-fabric-sbi-connectivity/p4src/p4info.txt tfs/${POD_NAME}:/root/p4 -c=server +kubectl cp src/tests/p4-sd-fabric-sbi-connectivity/p4src/bmv2.json tfs/${POD_NAME}:/root/p4 -c=server diff --git a/src/tests/p4-fabric-tna/tests-setup/test_functional_bootstrap.py b/src/tests/p4-sd-fabric-sbi-connectivity/test_functional_bootstrap.py similarity index 82% rename from src/tests/p4-fabric-tna/tests-setup/test_functional_bootstrap.py rename to src/tests/p4-sd-fabric-sbi-connectivity/test_functional_bootstrap.py index 7c4a6c7a0c583c7dadd68cfb92bbdfab51db6cac..aafd449f97468fcf9a3d41fb15d122ae0891be84 100644 --- a/src/tests/p4-fabric-tna/tests-setup/test_functional_bootstrap.py +++ b/src/tests/p4-sd-fabric-sbi-connectivity/test_functional_bootstrap.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,13 +13,20 @@ # 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 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 tests.tools.test_tools_p4 import ADMIN_CONTEXT_ID, DESC_TOPO +from tests.tools.test_tools_p4 import ADMIN_CONTEXT_ID + +from .Fixtures import ( + context_client, device_client, +) # pylint: disable=unused-import + +from test_functional_common import DESC_TOPOLOGY LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) @@ -36,8 +43,10 @@ def test_scenario_bootstrap( """ validate_empty_scenario(context_client) + LOGGER.info(f"------> TOPOLOGY: {DESC_TOPOLOGY}") + descriptor_loader = DescriptorLoader( - descriptors_file=DESC_TOPO, context_client=context_client, device_client=device_client) + descriptors_file=DESC_TOPOLOGY, context_client=context_client, device_client=device_client) results = descriptor_loader.process() check_descriptor_load_results(results, descriptor_loader) descriptor_loader.validate() diff --git a/src/tests/p4-fabric-tna/tests-setup/test_functional_cleanup.py b/src/tests/p4-sd-fabric-sbi-connectivity/test_functional_cleanup.py similarity index 74% rename from src/tests/p4-fabric-tna/tests-setup/test_functional_cleanup.py rename to src/tests/p4-sd-fabric-sbi-connectivity/test_functional_cleanup.py index fe197de54882f675befcbe769a6f87c4336846e1..e682ab8ea23133eabf6c18c6c0ccabbaa4bc0942 100644 --- a/src/tests/p4-fabric-tna/tests-setup/test_functional_cleanup.py +++ b/src/tests/p4-sd-fabric-sbi-connectivity/test_functional_cleanup.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,11 +13,19 @@ # limitations under the License. import logging -from common.tools.descriptor.Loader import DescriptorLoader, validate_empty_scenario + +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 tests.tools.test_tools_p4 import ADMIN_CONTEXT_ID, DESC_TOPO +from tests.tools.test_tools_p4 import ADMIN_CONTEXT_ID + +from .Fixtures import ( + context_client, device_client, +) # pylint: disable=unused-import + +from test_functional_common import DESC_TOPOLOGY LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) @@ -33,7 +41,7 @@ def test_scenario_cleanup( # Unload topology and validate empty scenario descriptor_loader = DescriptorLoader( - descriptors_file=DESC_TOPO, context_client=context_client, device_client=device_client) + descriptors_file=DESC_TOPOLOGY, 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-sd-fabric-sbi-connectivity/test_functional_common.py b/src/tests/p4-sd-fabric-sbi-connectivity/test_functional_common.py new file mode 100644 index 0000000000000000000000000000000000000000..25f884ccd5caaa91d218d73e4f77cbc5a5c0de07 --- /dev/null +++ b/src/tests/p4-sd-fabric-sbi-connectivity/test_functional_common.py @@ -0,0 +1,78 @@ +# Copyright 2022-2026 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 + +DEV_NB = 4 +CONNECTION_RULES = 3 +ENDPOINT_RULES = 3 + +INT_RULES = 19 +L2_RULES = 10 +L3_RULES = 4 +ACL_RULES = 1 + +DATAPLANE_RULES_NB_INT_B1 = 5 +DATAPLANE_RULES_NB_INT_B2 = 6 +DATAPLANE_RULES_NB_INT_B3 = 8 +DATAPLANE_RULES_NB_RT_WEST = 7 +DATAPLANE_RULES_NB_RT_EAST = 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_WEST +\ + DATAPLANE_RULES_NB_RT_EAST +\ + DATAPLANE_RULES_NB_ACL + +TEST_PATH = os.path.join( + os.path.dirname(os.path.abspath(__file__)) + + '/descriptors') +assert os.path.exists(TEST_PATH), "Invalid path to P4 SD-Fabric tests" + +# Topology descriptor +DESC_TOPOLOGY = os.path.join(TEST_PATH, 'topology.json') +assert os.path.exists(DESC_TOPOLOGY), "Invalid path to the SD-Fabric topology descriptor" + +# SBI descriptors for Rule INSERTION +# The switch cannot digest all rules at once, hence we insert in batches +DESC_FILE_RULES_INSERT_INT_B1 = os.path.join(TEST_PATH, 'sbi-rules-insert-int-b1.json') +assert os.path.exists(DESC_FILE_RULES_INSERT_INT_B1),\ + "Invalid path to the SD-Fabric INT SBI descriptor (batch #1)" + +DESC_FILE_RULES_INSERT_INT_B2 = os.path.join(TEST_PATH, 'sbi-rules-insert-int-b2.json') +assert os.path.exists(DESC_FILE_RULES_INSERT_INT_B2),\ + "Invalid path to the SD-Fabric INT SBI descriptor (batch #2)" + +DESC_FILE_RULES_INSERT_INT_B3 = os.path.join(TEST_PATH, 'sbi-rules-insert-int-b3.json') +assert os.path.exists(DESC_FILE_RULES_INSERT_INT_B3),\ + "Invalid path to the SD-Fabric INT SBI descriptor (batch #3)" + +DESC_FILE_RULES_INSERT_ROUTING_WEST = os.path.join(TEST_PATH, 'sbi-rules-insert-routing-west.json') +assert os.path.exists(DESC_FILE_RULES_INSERT_ROUTING_WEST),\ + "Invalid path to the SD-Fabric routing SBI descriptor (domain1-side)" + +DESC_FILE_RULES_INSERT_ROUTING_EAST = os.path.join(TEST_PATH, 'sbi-rules-insert-routing-east.json') +assert os.path.exists(DESC_FILE_RULES_INSERT_ROUTING_EAST),\ + "Invalid path to the SD-Fabric routing SBI descriptor (domain2-side)" + +DESC_FILE_RULES_INSERT_ACL = os.path.join(TEST_PATH, 'sbi-rules-insert-acl.json') +assert os.path.exists(DESC_FILE_RULES_INSERT_ACL),\ + "Invalid path to the SD-Fabric ACL SBI descriptor" + +# SBI descriptors for Rule DELETION +DESC_FILE_RULES_DELETE_ALL = os.path.join(TEST_PATH, 'sbi-rules-remove.json') +assert os.path.exists(DESC_FILE_RULES_DELETE_ALL),\ + "Invalid path to the SD-Fabric rule removal SBI descriptor" diff --git a/src/tests/p4-fabric-tna/tests-setup/test_functional_purge.py b/src/tests/p4-sd-fabric-sbi-connectivity/test_functional_purge.py similarity index 92% rename from src/tests/p4-fabric-tna/tests-setup/test_functional_purge.py rename to src/tests/p4-sd-fabric-sbi-connectivity/test_functional_purge.py index a4bf927cb4eaa55b087ef08e7bef22b27364c322..1fb49eaf98195199850048b7919b2aaa79aa6da4 100644 --- a/src/tests/p4-fabric-tna/tests-setup/test_functional_purge.py +++ b/src/tests/p4-sd-fabric-sbi-connectivity/test_functional_purge.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,7 +13,10 @@ # limitations under the License. import logging -from common.proto.context_pb2 import ServiceId, DeviceId, LinkId, ServiceStatusEnum, ServiceTypeEnum + +from common.proto.context_pb2 import ( + DeviceId, LinkId, ServiceId, ServiceStatusEnum, ServiceTypeEnum, +) from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Device import json_device_id @@ -21,9 +24,12 @@ from common.tools.object_factory.Service import json_service_id from context.client.ContextClient import ContextClient from device.client.DeviceClient import DeviceClient from service.client.ServiceClient import ServiceClient -from tests.Fixtures import context_client, device_client, service_client # pylint: disable=unused-import from tests.tools.test_tools_p4 import ADMIN_CONTEXT_ID +from .Fixtures import ( + context_client, device_client, service_client, +) # pylint: disable=unused-import + LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/p4-fabric-tna/tests-sbi/test_functional_sbi_rules_deprovision.py b/src/tests/p4-sd-fabric-sbi-connectivity/test_functional_sbi_rules_deprovision.py similarity index 85% rename from src/tests/p4-fabric-tna/tests-sbi/test_functional_sbi_rules_deprovision.py rename to src/tests/p4-sd-fabric-sbi-connectivity/test_functional_sbi_rules_deprovision.py index 4fbf182c5ae81f2f72105736d0b57dcd94cc1e5d..07a3b2a12e91f9a2da0073f98bc6a4cfd13180f9 100644 --- a/src/tests/p4-fabric-tna/tests-sbi/test_functional_sbi_rules_deprovision.py +++ b/src/tests/p4-sd-fabric-sbi-connectivity/test_functional_sbi_rules_deprovision.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,26 +13,20 @@ # limitations under the License. import logging -from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results + +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 tests.tools.test_tools_p4 import ( - ADMIN_CONTEXT_ID, - DESC_FILE_RULES_DELETE_ALL, - DEV_NB, - CONNECTION_RULES, - ENDPOINT_RULES, - DATAPLANE_RULES_NB_INT_B1, - DATAPLANE_RULES_NB_INT_B2, - DATAPLANE_RULES_NB_INT_B3, - DATAPLANE_RULES_NB_RT_WEST, - DATAPLANE_RULES_NB_RT_EAST, - DATAPLANE_RULES_NB_ACL, - DATAPLANE_RULES_NB_TOT, - verify_number_of_rules -) +from tests.tools.test_tools_p4 import * + +from .Fixtures import ( + context_client, device_client, +) # pylint: disable=unused-import + +from test_functional_common import * LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/p4-fabric-tna/tests-sbi/test_functional_sbi_rules_provision.py b/src/tests/p4-sd-fabric-sbi-connectivity/test_functional_sbi_rules_provision.py similarity index 92% rename from src/tests/p4-fabric-tna/tests-sbi/test_functional_sbi_rules_provision.py rename to src/tests/p4-sd-fabric-sbi-connectivity/test_functional_sbi_rules_provision.py index 08b9e2f5ece3057bb985ebb4433a0a9838187b8f..a9183f6691727f737d2fd1a3812252263e5b82fd 100644 --- a/src/tests/p4-fabric-tna/tests-sbi/test_functional_sbi_rules_provision.py +++ b/src/tests/p4-sd-fabric-sbi-connectivity/test_functional_sbi_rules_provision.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,31 +13,20 @@ # limitations under the License. import logging -from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results + +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 tests.tools.test_tools_p4 import ( - ADMIN_CONTEXT_ID, - DESC_FILE_RULES_INSERT_INT_B1, - DESC_FILE_RULES_INSERT_INT_B2, - DESC_FILE_RULES_INSERT_INT_B3, - DESC_FILE_RULES_INSERT_ROUTING_WEST, - DESC_FILE_RULES_INSERT_ROUTING_EAST, - DESC_FILE_RULES_INSERT_ACL, - DEV_NB, - CONNECTION_RULES, - ENDPOINT_RULES, - DATAPLANE_RULES_NB_INT_B1, - DATAPLANE_RULES_NB_INT_B2, - DATAPLANE_RULES_NB_INT_B3, - DATAPLANE_RULES_NB_RT_WEST, - DATAPLANE_RULES_NB_RT_EAST, - DATAPLANE_RULES_NB_ACL, - DATAPLANE_RULES_NB_TOT, - verify_number_of_rules -) +from tests.tools.test_tools_p4 import * + +from .Fixtures import ( + context_client, device_client, +) # pylint: disable=unused-import + +from test_functional_common import * LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/p4-fabric-tna/README.md b/src/tests/p4-sd-fabric-svc-connectivity/README.md similarity index 61% rename from src/tests/p4-fabric-tna/README.md rename to src/tests/p4-sd-fabric-svc-connectivity/README.md index e8ae8fde918b6dd65fc1eb9a078753ea442f22a6..e828cb11f323d1339da9a4b24b3c6d4c02be60f1 100644 --- a/src/tests/p4-fabric-tna/README.md +++ b/src/tests/p4-sd-fabric-svc-connectivity/README.md @@ -1,4 +1,4 @@ -# Tests for P4 routing, ACL, and In-Band Network Telemetry functions +# Tests for P4 routing, ACL, and In-Band Network Telemetry functions via TFS Service API 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 forwarding (L2), routing (L3), L3/L4 access control list (ACL), and In-Band Network Telemetry (INT). The P4 data plane is based on ONF's SD-Fabric implementation, titled [fabric-tna](https://github.com/stratum/fabric-tna) @@ -45,12 +45,35 @@ To conduct this test, follow the steps below. ### Deploy TFS +Go to the TFS parent folder. + ```shell cd ~/tfs-ctrl/ +``` + +Edit `my_deploy.sh` to include the following TFS components and then source the file. + +```shell +nano my_deploy.sh +`export TFS_COMPONENTS="context device pathcomp service kpi_manager kpi_value_writer kpi_value_api telemetry nbi webui"` +``` + +```shell source my_deploy.sh && source tfs_runtime_env_vars.sh +``` + +Now deploy TFS: + +```shell ./deploy/all.sh ``` +When deployed, execute the following command to ensure that the above components are all in place and in a running state: + +```shell +./deploy/show.sh +``` + ### Path setup Ensure that `PATH` variable contains the parent project directory, e.g., "home/$USER/tfs-ctrl". @@ -59,8 +82,16 @@ Ensure that `PYTHONPATH` variable contains the source code directory of TFS, e.g ## 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. +Go to `src/tests/p4-topologies/` and follow the instructions on how to install Mininet in your machine. +After Mininet is installed, run the following command to deploy a single switch P4 topology on Mininet. + +```bash +cd ~/tfs-ctrl/src/tests/p4-topologies/topo-mininet/ +sudo python3 topo-mininet/1switch1path-int.py --host-int-iface=eth0 +``` + +You may need to change the `host-int-iface` to a network interface that suits your setup. +This is the interface through which Mininet sends in-band network telemetry packets to TFS. ## P4 artifacts @@ -76,17 +107,15 @@ For each of these tests, an auxiliary bash script allows to run it with less typ | --------------------------------------------- | --------------------------------------------------------------------------- | | setup.sh | Copy P4 artifacts into the SBI pod | | run_test_01_bootstrap.sh | Connect TFS to the P4 switch | -| run_test_02a_sbi_provision_int_l2_l3_acl.sh | Install L2, L3, INT, and ACL rules on the P4 switch via the SBI service | -| run_test_02b_sbi_deprovision_int_l2_l3_acl.sh | Uninstall L2, L3, INT, and ACL rules from the P4 switch via the SBI service | -| run_test_03a_service_provision_l2.sh | Install L2 forwarding rules via a dedicated P4 L2 service handler | -| run_test_03b_service_deprovision_l2.sh | Uninstall L2 forwarding rules via a dedicated P4 L2 service handler | -| run_test_04a_service_provision_l3.sh | Install L3 routing rules via a dedicated P4 L3 service handler | -| run_test_04b_service_deprovision_l3.sh | Uninstall L3 routing rules via a dedicated P4 L3 service handler | -| run_test_05a_service_provision_acl.sh | Install ACL rules via a dedicated P4 ACL service handler | -| run_test_05b_service_deprovision_acl.sh | Uninstall ACL rules via a dedicated P4 ACL service handler | -| run_test_06a_service_provision_int.sh | Install INT rules via a dedicated P4 INT service handler | -| run_test_06b_service_deprovision_int.sh | Uninstall INT rules via a dedicated P4 INT service handler | -| run_test_07_cleanup.sh | Clean-up context and topology and disconnect TFS from the P4 switch | +| run_test_02_service_provision_int.sh | Install INT rules via a dedicated P4 INT service handler | +| run_test_03_service_provision_l2.sh | Install L2 forwarding rules via a dedicated P4 L2 service handler | +| run_test_04_service_provision_l3.sh | Install L3 routing rules via a dedicated P4 L3 service handler | +| run_test_05_service_provision_acl.sh | Install ACL rules via a dedicated P4 ACL service handler | +| run_test_06_service_deprovision_int.sh | Uninstall INT rules via a dedicated P4 INT service handler | +| run_test_07_service_deprovision_l2.sh | Uninstall L2 forwarding rules via a dedicated P4 L2 service handler | +| run_test_08_service_deprovision_l3.sh | Uninstall L3 routing rules via a dedicated P4 L3 service handler | +| run_test_09_service_deprovision_acl.sh | Uninstall ACL rules via a dedicated P4 ACL service handler | +| run_test_10_cleanup.sh | Clean-up context and topology and disconnect TFS from the P4 switch | Each of the tests above is described in detail below. @@ -99,7 +128,7 @@ 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-fabric-tna/setup.sh +bash src/tests/p4-sd-fabric-svc-connectivity/setup.sh ``` ### Step 1: Bootstrap topology @@ -108,85 +137,50 @@ The bootstrap script registers the context, topology, links, and devices to TFS. ```shell cd ~/tfs-ctrl/ -bash src/tests/p4-fabric-tna/run_test_01_bootstrap.sh -``` - -### Step 2: Manage L2, L3, ACL, and INT via the SBI API (rules) - -Implement forwarding, routing, ACL, and INT network functions by installing P4 rules to the Stratum switch via the TFS SBI API. -In this test, these rules are installed in batches, as the switch cannot digest all these rules at once. - -```shell -cd ~/tfs-ctrl/ -bash src/tests/p4-fabric-tna/run_test_02a_sbi_provision_int_l2_l3_acl.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_01_bootstrap.sh ``` -Deprovision forwarding, 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-fabric-tna/run_test_02b_sbi_deprovision_int_l2_l3_acl.sh -``` - -### Step 3: Manage L2, L3, ACL, and INT via the Service API +### Step 2: Manage L2, L3, ACL, and INT via the Service API To avoid interacting with the switch using low-level P4 rules (via the SBI), we created modular network services, which allow users to easily provision L2, L3, ACL, and INT network functions. These services require users to define the service endpoints as well as some high-level service configuration, while leaving the rest of complexity to tailored service handlers that interact with the SBI on behalf of the user. -#### Provision L2 network service via the Service API - -```shell -cd ~/tfs-ctrl/ -bash src/tests/p4-fabric-tna/run_test_03a_service_provision_l2.sh -``` - -#### Deprovision L2 network service via the Service API - -```shell -cd ~/tfs-ctrl/ -bash src/tests/p4-fabric-tna/run_test_03b_service_deprovision_l2.sh -``` - -#### Provision L3 network service via the Service API - -```shell -cd ~/tfs-ctrl/ -bash src/tests/p4-fabric-tna/run_test_04a_service_provision_l3.sh -``` - -#### Deprovision L3 network service via the Service API +#### Provision L2 + INT + ACL network services via the Service API ```shell cd ~/tfs-ctrl/ -bash src/tests/p4-fabric-tna/run_test_04b_service_deprovision_l3.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_02_service_provision_int.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_03_service_provision_l2.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_05_service_provision_acl.sh ``` -#### Provision ACL network service via the Service API - -```shell -cd ~/tfs-ctrl/ -bash src/tests/p4-fabric-tna/run_test_05a_service_provision_acl.sh -``` +#### Provision L3 + INT + ACL network services via the Service API -#### Deprovision ACL network service via the Service API +Alternatively, you can replace L2 with L3 connectivity as follows: ```shell cd ~/tfs-ctrl/ -bash src/tests/p4-fabric-tna/run_test_05b_service_deprovision_acl.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_02_service_provision_int.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_04_service_provision_l3.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_05_service_provision_acl.sh ``` -#### Provision INT service via the Service API +#### Deprovision L2 + INT + ACL network services via the Service API ```shell cd ~/tfs-ctrl/ -bash src/tests/p4-fabric-tna/run_test_06a_service_provision_int.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_06_service_deprovision_int.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_07_service_deprovision_l2.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_09_service_deprovision_acl.sh ``` -#### Deprovision INT service via the Service API +And for the corresponding L3 service: ```shell cd ~/tfs-ctrl/ -bash src/tests/p4-fabric-tna/run_test_06b_service_deprovision_int.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_06_service_deprovision_int.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_08_service_deprovision_l3.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_09_service_deprovision_acl.sh ``` ### Step 4: Deprovision topology @@ -195,12 +189,12 @@ Delete all the objects (context, topology, links, devices) from TFS: ```shell cd ~/tfs-ctrl/ -bash src/tests/p4-fabric-tna/run_test_07_cleanup.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_10_cleanup.sh ``` Alternatively, a purge test is implemented; this test removes services, links, devices, topology, and context in this order. ```shell cd ~/tfs-ctrl/ -bash src/tests/p4-fabric-tna/run_test_08_purge.sh +bash src/tests/p4-sd-fabric-svc-connectivity/run_test_11_purge.sh ``` diff --git a/src/tests/p4-sd-fabric-svc-connectivity/__init__.py b/src/tests/p4-sd-fabric-svc-connectivity/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2022-2026 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-sd-fabric-svc-connectivity/descriptors/grafana-latency.json b/src/tests/p4-sd-fabric-svc-connectivity/descriptors/grafana-latency.json new file mode 100644 index 0000000000000000000000000000000000000000..e02d1cc268d628de2bcc2f7d4211b77d7a575757 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/descriptors/grafana-latency.json @@ -0,0 +1,175 @@ +{ + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": [], + "__requires": [ + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "8.5.22" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": null, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisLabel": "Latency", + "axisPlacement": "left", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 17, + "gradientMode": "opacity", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineStyle": { + "dash": [ + 20, + 10 + ], + "fill": "dash" + }, + "lineWidth": 2, + "pointSize": 4, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "ns" + }, + "overrides": [] + }, + "gridPos": { + "h": 17, + "w": 23, + "x": 0, + "y": 0 + }, + "id": 2, + "options": { + "legend": { + "calcs": [], + "displayMode": "hidden", + "placement": "bottom" + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "expr": "avg(KPISAMPLETYPE_INT_HOP_LAT_SW01)", + "refId": "A" + } + ], + "title": "P4 switch latency", + "transparent": true, + "type": "timeseries" + } + ], + "refresh": "5s", + "schemaVersion": 36, + "style": "dark", + "tags": [], + "templating": { + "list": [] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Latency", + "uid": "VefdTgZvk", + "version": 2, + "weekStart": "" +} \ No newline at end of file diff --git a/src/tests/p4-fabric-tna/descriptors/service-p4-acl.json b/src/tests/p4-sd-fabric-svc-connectivity/descriptors/service-p4-acl.json similarity index 100% rename from src/tests/p4-fabric-tna/descriptors/service-p4-acl.json rename to src/tests/p4-sd-fabric-svc-connectivity/descriptors/service-p4-acl.json diff --git a/src/tests/p4-fabric-tna/descriptors/service-p4-int.json b/src/tests/p4-sd-fabric-svc-connectivity/descriptors/service-p4-int.json similarity index 94% rename from src/tests/p4-fabric-tna/descriptors/service-p4-int.json rename to src/tests/p4-sd-fabric-svc-connectivity/descriptors/service-p4-int.json index 1a55179ad4167b0857db831a912c85e5d814f0bb..1538f29d1cda6a6892941137653952d5797feaad 100644 --- a/src/tests/p4-fabric-tna/descriptors/service-p4-int.json +++ b/src/tests/p4-sd-fabric-svc-connectivity/descriptors/service-p4-int.json @@ -40,8 +40,8 @@ ], "int_collector_info": { "iface": "eth0", - "mac": "3e:87:de:3d:6d:33", - "ip": "192.168.5.131", + "mac": "46:e4:58:c6:74:53", + "ip": "192.168.5.137", "port": 12345, "vlan_id": 4094, "duration_sec": 2000, diff --git a/src/tests/p4-fabric-tna/descriptors/service-p4-l2-simple.json b/src/tests/p4-sd-fabric-svc-connectivity/descriptors/service-p4-l2.json similarity index 95% rename from src/tests/p4-fabric-tna/descriptors/service-p4-l2-simple.json rename to src/tests/p4-sd-fabric-svc-connectivity/descriptors/service-p4-l2.json index 8ecc2df96b95fc398f87ac42a9badf3dd051f5dd..d943dfb6bf8ed0105ef727c878852a7b5f0f49e9 100644 --- a/src/tests/p4-fabric-tna/descriptors/service-p4-l2-simple.json +++ b/src/tests/p4-sd-fabric-svc-connectivity/descriptors/service-p4-l2.json @@ -2,11 +2,11 @@ "services": [ { "service_id": { - "context_id": {"context_uuid": {"uuid": "admin"}}, "service_uuid": {"uuid": "p4-service-l2"} + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "p4-service-l2"} }, "name": "p4-service-l2", "service_type": "SERVICETYPE_L2NM", - "service_status": {"service_status": "SERVICESTATUS_PLANNED"}, "service_endpoint_ids": [ { "device_id": {"device_uuid": {"uuid": "sw1"}}, diff --git a/src/tests/p4-fabric-tna/descriptors/service-p4-l3.json b/src/tests/p4-sd-fabric-svc-connectivity/descriptors/service-p4-l3.json similarity index 93% rename from src/tests/p4-fabric-tna/descriptors/service-p4-l3.json rename to src/tests/p4-sd-fabric-svc-connectivity/descriptors/service-p4-l3.json index 6fda23e80daf4ba1b549618064ed104bdb5c36e1..1e2c0e84f043c37b4f95b7f744ae5343af226378 100644 --- a/src/tests/p4-fabric-tna/descriptors/service-p4-l3.json +++ b/src/tests/p4-sd-fabric-svc-connectivity/descriptors/service-p4-l3.json @@ -2,11 +2,11 @@ "services": [ { "service_id": { - "context_id": {"context_uuid": {"uuid": "admin"}}, "service_uuid": {"uuid": "p4-service-l3"} + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "p4-service-l3"} }, "name": "p4-service-l3", "service_type": "SERVICETYPE_L3NM", - "service_status": {"service_status": "SERVICESTATUS_PLANNED"}, "service_endpoint_ids": [ { "device_id": {"device_uuid": {"uuid": "sw1"}}, @@ -32,11 +32,13 @@ "port_list": [ { "port_id": 1, - "port_type": "host" + "port_type": "host", + "vlan_id": 4094 }, { "port_id": 2, - "port_type": "host" + "port_type": "host", + "vlan_id": 4094 } ], "routing_list": [ diff --git a/src/tests/p4-sd-fabric-svc-connectivity/descriptors/topology.json b/src/tests/p4-sd-fabric-svc-connectivity/descriptors/topology.json new file mode 100644 index 0000000000000000000000000000000000000000..420cc8f0f883a37ddb07fff749220590b79fe2c2 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/descriptors/topology.json @@ -0,0 +1,113 @@ +{ + "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": "tfs-sdn-controller"}}, + "name": "tfs-sdn-controller", + "device_type": "teraflowsdn", + "device_drivers": ["DEVICEDRIVER_UNDEFINED"], + "device_operational_status": "DEVICEOPERATIONALSTATUS_UNDEFINED", + "device_config": {"config_rules": [ + {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}}, + {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}}, + {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": { + "endpoints": [{"uuid": "mgmt", "name": "mgmt", "type": "mgmt-int"}] + }}} + ]} + }, + { + "device_id": {"device_uuid": {"uuid": "h1"}}, + "device_type": "emu-client", + "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", "name": "eth1", "type": "copper"}] + }}} + ] + } + }, + { + "device_id": {"device_uuid": {"uuid": "h2"}}, + "device_type": "emu-client", + "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", "name": "eth1", "type": "copper"}] + }}} + ] + } + }, + { + "device_id": {"device_uuid": {"uuid": "sw1"}}, + "device_type": "p4-switch", + "device_drivers": ["DEVICEDRIVER_P4"], + "device_operational_status": "DEVICEOPERATIONALSTATUS_DISABLED", + "name": "sw1", + "device_config": { + "config_rules": [ + {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/address", "resource_value": "192.168.5.139"}}, + {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/port", "resource_value": "50001"}}, + {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/settings", "resource_value": { + "id": 1, + "name": "sw1", + "vendor": "Open Networking Foundation", + "hw_ver": "BMv2 simple_switch", + "sw_ver": "Stratum", + "timeout": 60, + "p4bin": "/root/p4/bmv2.json", + "p4info": "/root/p4/p4info.txt", + "endpoints": [ + {"uuid": "1", "name": "1", "type": "port-dataplane"}, + {"uuid": "2", "name": "2", "type": "port-dataplane"}, + {"uuid": "3", "name": "3", "type": "port-int"} + ] + }}} + ] + } + } + ], + "links": [ + { + "link_id": {"link_uuid": {"uuid": "sw1/1==h1/eth1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "sw1"}}, "endpoint_uuid": {"uuid": "1"}}, + {"device_id": {"device_uuid": {"uuid": "h1"}}, "endpoint_uuid": {"uuid": "eth1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "h1/eth1==sw1/1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "h1"}}, "endpoint_uuid": {"uuid": "eth1"}}, + {"device_id": {"device_uuid": {"uuid": "sw1"}}, "endpoint_uuid": {"uuid": "1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "sw1/2==h2/eth1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "sw1"}}, "endpoint_uuid": {"uuid": "2"}}, + {"device_id": {"device_uuid": {"uuid": "h2"}}, "endpoint_uuid": {"uuid": "eth1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "h2/eth1==sw1/2"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "h2"}}, "endpoint_uuid": {"uuid": "eth1"}}, + {"device_id": {"device_uuid": {"uuid": "sw1"}}, "endpoint_uuid": {"uuid": "2"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "sw1/3==tfs-sdn-controller/mgmt"}}, "link_type": "LINKTYPE_MANAGEMENT", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "sw1"}}, "endpoint_uuid": {"uuid": "3"}}, + {"device_id": {"device_uuid": {"uuid": "tfs-sdn-controller"}}, "endpoint_uuid": {"uuid": "mgmt"}} + ] + } + ] +} diff --git a/src/tests/p4-sd-fabric-svc-connectivity/p4src/README.md b/src/tests/p4-sd-fabric-svc-connectivity/p4src/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e17d044fb6100c13e47f1dffb779f4800c59b9d3 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/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-upf-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-sd-fabric-svc-connectivity/p4src/_pp.p4 b/src/tests/p4-sd-fabric-svc-connectivity/p4src/_pp.p4 new file mode 100644 index 0000000000000000000000000000000000000000..870509db7f530c7bf9070e4c24b5b546a2a3441d --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/p4src/_pp.p4 @@ -0,0 +1,2452 @@ +error { + PacketRejectedByParser +} +#include +#define V1MODEL_VERSION 20180101 +#include + +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; +} + +@pa_container_size("egress" , "hdr.outer_udp.sport" , 16) @pa_container_size("egress" , "hdr.outer_udp.dport" , 16) 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; + upf_bridged_metadata_t upf; + int_bridged_metadata_t int_bmd; + bit<1> _pad0; + bit<7> _pad1; + 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; + bool inner_ipv4_checksum_err; + 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 outer_ipv4; + udp_t outer_udp; + gtpu_t outer_gtpu; + gtpu_options_t outer_gtpu_options; + gtpu_ext_psc_t outer_gtpu_ext_psc; + 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(); + 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(); + 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(); + 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>()) { + 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>()) { + 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>()) { + 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(); + 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>(); + 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); + } + @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 { + 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 (fabric_md.bridged.upf.needs_gtpu_encap) { + hash(fabric_md.ecmp_hash, HashAlgorithm.crc32, base, { fabric_md.bridged.upf.tun_peer_id, fabric_md.bridged.upf.teid }, max); + } else 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 UpfIngress(inout ingress_headers_t hdr, inout fabric_ingress_metadata_t fabric_md, inout standard_metadata_t standard_md, inout bool do_upf_uplink_recirc, inout bit<1> drop_ctl) { + counter(4096, CounterType.packets_and_bytes) terminations_counter; + meter(20000, MeterType.bytes) session_meter; + meter(20000, MeterType.bytes) app_meter; + bool is_uplink = false; + bool term_hit = false; + bool sess_hit = false; + bit<32> app_ipv4_addr = 0; + l4_port_t app_l4_port = 0; + bit<8> app_ip_proto = 0; + bit<8> internal_app_id = DEFAULT_APP_ID; + ue_session_id_t ue_session_id = 0; + session_meter_idx_t session_meter_idx_internal = DEFAULT_SESSION_METER_IDX; + app_meter_idx_t app_meter_idx_internal = DEFAULT_APP_METER_IDX; + @hidden action _drop_common() { + drop_ctl = 1; + fabric_md.skip_forwarding = true; + fabric_md.skip_next = true; + } + @hidden action _term_hit(upf_ctr_idx_t ctr_id) { + fabric_md.bridged.upf.upf_ctr_id = ctr_id; + term_hit = true; + } + @hidden action _set_field_encap(teid_t teid, bit<6> qfi) { + fabric_md.bridged.upf.needs_gtpu_encap = true; + fabric_md.bridged.upf.teid = teid; + fabric_md.bridged.upf.qfi = qfi; + } + @hidden action _gtpu_decap() { + fabric_md.bridged.base.ip_eth_type = ETHERTYPE_IPV4; + fabric_md.routing_ipv4_dst = hdr.inner_ipv4.dst_addr; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.udp = hdr.inner_udp; + hdr.inner_udp.setInvalid(); + hdr.tcp = hdr.inner_tcp; + hdr.inner_tcp.setInvalid(); + hdr.icmp = hdr.inner_icmp; + hdr.inner_icmp.setInvalid(); + hdr.gtpu.setInvalid(); + hdr.gtpu_options.setInvalid(); + hdr.gtpu_ext_psc.setInvalid(); + fabric_md.bridged.base.encap_presence = EncapPresence.NONE; + } + @hidden action _iface_common(slice_id_t slice_id) { + fabric_md.bridged.upf.skip_upf = false; + fabric_md.is_upf_hit = true; + fabric_md.upf_slice_id = slice_id; + } + action iface_access(slice_id_t slice_id) { + _iface_common(slice_id); + } + action iface_core(slice_id_t slice_id) { + _iface_common(slice_id); + } + action iface_dbuf(slice_id_t slice_id) { + _iface_common(slice_id); + _gtpu_decap(); + } + action iface_miss() { + fabric_md.bridged.upf.skip_upf = true; + } + table interfaces { + key = { + hdr.ipv4.dst_addr : lpm @name("ipv4_dst_addr") ; + hdr.gtpu.isValid(): exact @name("gtpu_is_valid") ; + } + actions = { + iface_access; + iface_core; + iface_dbuf; + @defaultonly iface_miss; + } + const default_action = iface_miss(); + const size = 64; + } + action set_uplink_session_miss() { + _drop_common(); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_UL_SESSION_MISS; + } + action set_uplink_session_drop() { + sess_hit = true; + _drop_common(); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_UL_SESSION_DROP; + } + action set_downlink_session_miss() { + _drop_common(); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_DL_SESSION_MISS; + } + action set_downlink_session_drop() { + sess_hit = true; + _drop_common(); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_DL_SESSION_DROP; + } + action set_downlink_session(tun_peer_id_t tun_peer_id, session_meter_idx_t session_meter_idx) { + sess_hit = true; + ue_session_id = fabric_md.routing_ipv4_dst; + session_meter_idx_internal = session_meter_idx; + fabric_md.bridged.upf.tun_peer_id = tun_peer_id; + } + action set_downlink_session_buf(tun_peer_id_t tun_peer_id, session_meter_idx_t session_meter_idx) { + sess_hit = true; + ue_session_id = fabric_md.routing_ipv4_dst; + session_meter_idx_internal = session_meter_idx; + fabric_md.bridged.upf.tun_peer_id = tun_peer_id; + fabric_md.bridged.upf.skip_egress_upf_ctr = true; + } + action set_downlink_session_buf_drop() { + sess_hit = true; + ue_session_id = fabric_md.routing_ipv4_dst; + _drop_common(); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_DL_SESSION_DROP_BUFF; + } + action set_uplink_session(session_meter_idx_t session_meter_idx) { + sess_hit = true; + ue_session_id = fabric_md.lkp.ipv4_src; + session_meter_idx_internal = session_meter_idx; + _gtpu_decap(); + } + table downlink_sessions { + key = { + fabric_md.routing_ipv4_dst: exact @name("ue_addr") ; + } + actions = { + set_downlink_session; + set_downlink_session_buf; + set_downlink_session_buf_drop; + set_downlink_session_drop; + @defaultonly set_downlink_session_miss; + } + size = 100000; + const default_action = set_downlink_session_miss(); + } + table uplink_sessions { + key = { + hdr.ipv4.dst_addr: exact @name("tunnel_ipv4_dst") ; + hdr.gtpu.teid : exact @name("teid") ; + } + actions = { + set_uplink_session; + set_uplink_session_drop; + @defaultonly set_uplink_session_miss; + } + size = 100000 * 1; + const default_action = set_uplink_session_miss(); + } + action uplink_drop_miss() { + _drop_common(); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_UL_TERMINATION_MISS; + } + action downlink_drop_miss() { + _drop_common(); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_DL_TERMINATION_MISS; + } + action uplink_drop(upf_ctr_idx_t ctr_id) { + _drop_common(); + _term_hit(ctr_id); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_UL_TERMINATION_DROP; + } + action downlink_drop(upf_ctr_idx_t ctr_id) { + _drop_common(); + _term_hit(ctr_id); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_DL_TERMINATION_DROP; + } + action app_fwd(upf_ctr_idx_t ctr_id, tc_t tc, app_meter_idx_t app_meter_idx) { + _term_hit(ctr_id); + fabric_md.upf_tc = tc; + app_meter_idx_internal = app_meter_idx; + fabric_md.tc_unknown = false; + } + action downlink_fwd_encap(upf_ctr_idx_t ctr_id, tc_t tc, teid_t teid, bit<6> qfi, app_meter_idx_t app_meter_idx) { + app_fwd(ctr_id, tc, app_meter_idx); + _set_field_encap(teid, qfi); + } + table uplink_terminations { + key = { + ue_session_id : exact @name("ue_session_id") ; + internal_app_id: exact @name("app_id") ; + } + actions = { + app_fwd; + uplink_drop; + @defaultonly uplink_drop_miss; + } + const default_action = uplink_drop_miss(); + const size = 100000; + } + table downlink_terminations { + key = { + ue_session_id : exact @name("ue_session_id") ; + internal_app_id: exact @name("app_id") ; + } + actions = { + downlink_fwd_encap; + downlink_drop; + @defaultonly downlink_drop_miss; + } + const default_action = downlink_drop_miss(); + const size = 100000; + } + action set_routing_ipv4_dst(ipv4_addr_t tun_dst_addr) { + fabric_md.routing_ipv4_dst = tun_dst_addr; + } + table ig_tunnel_peers { + key = { + fabric_md.bridged.upf.tun_peer_id: exact @name("tun_peer_id") ; + } + actions = { + set_routing_ipv4_dst; + @defaultonly nop; + } + const default_action = nop(); + const size = 256; + } + action set_app_id(bit<8> app_id) { + internal_app_id = app_id; + } + table applications { + key = { + fabric_md.upf_slice_id: exact @name("slice_id") ; + app_ipv4_addr : lpm @name("app_ipv4_addr") ; + app_l4_port : range @name("app_l4_port") ; + app_ip_proto : ternary @name("app_ip_proto") ; + } + actions = { + set_app_id; + @defaultonly nop; + } + const default_action = nop(); + size = 5 * 1; + } + direct_counter(CounterType.packets) recirc_stats; + action recirc_allow() { + standard_md.egress_spec = FAKE_V1MODEL_RECIRC_PORT; + fabric_md.bridged.base.vlan_id = DEFAULT_VLAN_ID; + do_upf_uplink_recirc = true; + fabric_md.egress_port_set = true; + fabric_md.skip_forwarding = true; + fabric_md.skip_next = true; + recirc_stats.count(); + } + action recirc_deny() { + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_UPLINK_RECIRC_DENY; + do_upf_uplink_recirc = false; + fabric_md.skip_forwarding = true; + fabric_md.skip_next = true; + recirc_stats.count(); + } + action recirc_miss() { + recirc_stats.count(); + } + table uplink_recirc_rules { + key = { + fabric_md.lkp.ipv4_src: ternary @name("ipv4_src") ; + fabric_md.lkp.ipv4_dst: ternary @name("ipv4_dst") ; + } + actions = { + recirc_allow; + recirc_deny; + @defaultonly recirc_miss; + } + const default_action = recirc_miss; + size = 64; + counters = recirc_stats; + } + apply { + if (hdr.ipv4.isValid()) { + switch (interfaces.apply().action_run) { + iface_access: { + is_uplink = true; + app_ipv4_addr = fabric_md.lkp.ipv4_dst; + app_l4_port = fabric_md.lkp.l4_dport; + app_ip_proto = fabric_md.lkp.ip_proto; + if (fabric_md.bridged.base.encap_presence != EncapPresence.NONE) { + uplink_sessions.apply(); + } + } + iface_core: { + app_ipv4_addr = fabric_md.lkp.ipv4_src; + app_l4_port = fabric_md.lkp.l4_sport; + app_ip_proto = fabric_md.lkp.ip_proto; + downlink_sessions.apply(); + } + iface_dbuf: { + app_ipv4_addr = fabric_md.lkp.ipv4_src; + app_l4_port = fabric_md.lkp.l4_sport; + app_ip_proto = fabric_md.lkp.ip_proto; + downlink_sessions.apply(); + } + } + applications.apply(); + if (sess_hit) { + if (is_uplink) { + uplink_terminations.apply(); + uplink_recirc_rules.apply(); + } else { + downlink_terminations.apply(); + } + } else { + fabric_md.bridged.upf.skip_egress_upf_ctr = true; + } + app_meter.execute_meter((bit<32>)app_meter_idx_internal, fabric_md.upf_meter_color); + if (fabric_md.upf_meter_color != MeterColor_t.RED) { + session_meter.execute_meter((bit<32>)session_meter_idx_internal, fabric_md.upf_meter_color); + } + ig_tunnel_peers.apply(); + if (term_hit) { + terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id); + } + } + } +} + +control UpfEgress(inout ingress_headers_t hdr, inout fabric_egress_metadata_t fabric_md) { + counter(4096, CounterType.packets_and_bytes) terminations_counter; + action load_tunnel_params(l4_port_t tunnel_src_port, ipv4_addr_t tunnel_src_addr, ipv4_addr_t tunnel_dst_addr) { + hdr.ipv4.src_addr = tunnel_src_addr; + hdr.ipv4.dst_addr = tunnel_dst_addr; + hdr.udp.sport = tunnel_src_port; + } + table eg_tunnel_peers { + key = { + fabric_md.bridged.upf.tun_peer_id: exact @name("tun_peer_id") ; + } + actions = { + load_tunnel_params; + @defaultonly nop; + } + const default_action = nop(); + const size = 256; + } + @hidden action _encap_initialize() { + hdr.ipv4.version = 4w4; + hdr.ipv4.ihl = 4w5; + hdr.ipv4.dscp = 0; + hdr.ipv4.ecn = 0; + hdr.ipv4.identification = 0x1513; + hdr.ipv4.flags = 0; + hdr.ipv4.frag_offset = 0; + hdr.ipv4.ttl = DEFAULT_IPV4_TTL; + hdr.ipv4.protocol = PROTO_UDP; + hdr.udp.dport = GTPU_UDP_PORT; + hdr.gtpu.version = GTP_V1; + hdr.gtpu.pt = GTP_PROTOCOL_TYPE_GTP; + hdr.gtpu.spare = 0; + hdr.gtpu.seq_flag = 0; + hdr.gtpu.npdu_flag = 0; + hdr.gtpu.msgtype = GTPU_GPDU; + hdr.gtpu.teid = fabric_md.bridged.upf.teid; + hdr.gtpu_options.seq_num = 0; + hdr.gtpu_options.n_pdu_num = 0; + hdr.gtpu_options.next_ext = GTPU_NEXT_EXT_PSC; + hdr.gtpu_ext_psc.len = GTPU_EXT_PSC_LEN; + hdr.gtpu_ext_psc.type = GTPU_EXT_PSC_TYPE_DL; + hdr.gtpu_ext_psc.spare0 = 0; + hdr.gtpu_ext_psc.ppp = 0; + hdr.gtpu_ext_psc.rqi = 0; + hdr.gtpu_ext_psc.next_ext = GTPU_NEXT_EXT_NONE; + } + @hidden action _encap_common() { + hdr.inner_ipv4.setValid(); + hdr.inner_ipv4 = hdr.ipv4; + hdr.udp.setValid(); + hdr.gtpu.setValid(); + _encap_initialize(); + } + action gtpu_only() { + _encap_common(); + hdr.ipv4.total_len = 20 + 8 + 8 + hdr.inner_ipv4.total_len; + hdr.udp.len = 8 + 8 + hdr.inner_ipv4.total_len; + hdr.gtpu.msglen = hdr.inner_ipv4.total_len; + fabric_md.int_report_md.encap_presence = EncapPresence.GTPU_ONLY; + } + action gtpu_with_psc() { + hdr.gtpu_options.setValid(); + hdr.gtpu_ext_psc.setValid(); + _encap_common(); + hdr.ipv4.total_len = 20 + 8 + 8 + 4 + 4 + hdr.inner_ipv4.total_len; + hdr.udp.len = 8 + 8 + 4 + 4 + hdr.inner_ipv4.total_len; + hdr.gtpu.msglen = 4 + 4 + hdr.inner_ipv4.total_len; + hdr.gtpu.ex_flag = 1; + hdr.gtpu_ext_psc.qfi = fabric_md.bridged.upf.qfi; + fabric_md.int_report_md.encap_presence = EncapPresence.GTPU_WITH_PSC; + } + table gtpu_encap { + actions = { + gtpu_only; + gtpu_with_psc; + } + default_action = gtpu_only(); + const size = 1; + } + apply { + if (!fabric_md.bridged.upf.skip_upf) { + if (fabric_md.bridged.upf.needs_gtpu_encap) { + if (hdr.udp.isValid()) { + hdr.inner_udp.setValid(); + hdr.inner_udp = hdr.udp; + hdr.udp.setInvalid(); + } + if (hdr.tcp.isValid()) { + hdr.inner_tcp.setValid(); + hdr.inner_tcp = hdr.tcp; + hdr.tcp.setInvalid(); + } + if (hdr.icmp.isValid()) { + hdr.inner_icmp.setValid(); + hdr.inner_icmp = hdr.icmp; + hdr.icmp.setInvalid(); + } + gtpu_encap.apply(); + eg_tunnel_peers.apply(); + } + if (!fabric_md.bridged.upf.skip_egress_upf_ctr) { + terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id); + } + } + } +} + +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; + fabric_md.bridged.upf.skip_upf = true; + 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>(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; + fabric_md.bridged.upf.skip_upf = true; + 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; + UpfIngress() upf; + 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) { + upf.apply(hdr.ingress, fabric_md.ingress, standard_md, fabric_md.do_upf_uplink_recirc, fabric_md.drop_ctl); + } + 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; + UpfEgress() upf; + 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); + upf.apply(hdr.ingress, fabric_md.egress); + 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-sd-fabric-svc-connectivity/p4src/bmv2.json b/src/tests/p4-sd-fabric-svc-connectivity/p4src/bmv2.json new file mode 100644 index 0000000000000000000000000000000000000000..fe66f93e4c95c397fca7f6d5251802c7a8858a0e --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/p4src/bmv2.json @@ -0,0 +1,28235 @@ +{ + "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", 8, false], + ["tmp_19", 32, false], + ["tmp_20", 32, false], + ["tmp_21", 32, false], + ["tmp_22", 32, false], + ["tmp_23", 48, false], + ["tmp_24", 48, false], + ["tmp_25", 16, false], + ["tmp_26", 32, false], + ["tmp_27", 32, false], + ["tmp_28", 8, false], + ["tmp_29", 16, false], + ["tmp_30", 16, false], + ["tmp_31", 32, false], + ["qos_packet_color", 2, false], + ["upf_is_uplink", 1, false], + ["upf_term_hit", 1, false], + ["upf_sess_hit", 1, false], + ["upf_app_ipv4_addr", 32, false], + ["upf_app_l4_port", 16, false], + ["upf_app_ip_proto", 8, false], + ["upf_internal_app_id", 8, false], + ["upf_ue_session_id", 32, false], + ["upf_session_meter_idx_internal", 15, false], + ["upf_app_meter_idx_internal", 15, false], + ["tmp_32", 32, false], + ["tmp_33", 32, false], + ["tmp_34", 32, false], + ["tmp_35", 32, false], + ["tmp_36", 32, false], + ["tmp_37", 32, false], + ["tmp_38", 32, false], + ["tmp_39", 32, false], + ["tmp_40", 32, false], + ["tmp_41", 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_inner_ipv4_checksum_err38", 1, false], + ["userMetadata._egress_int_md_hop_latency40", 32, false], + ["userMetadata._egress_int_md_timestamp41", 48, false], + ["userMetadata._egress_int_md_vlan_stripped42", 1, false], + ["userMetadata._egress_int_md_queue_report43", 1, false], + ["userMetadata._egress_int_ipv4_len44", 16, false], + ["userMetadata._egress_is_int_recirc45", 1, false], + ["userMetadata._egress_pkt_length46", 16, false], + ["userMetadata._recirc_preserved_report_type47", 3, false], + ["userMetadata._recirc_preserved_egress_port48", 9, false], + ["userMetadata._recirc_preserved_drop_reason49", 8, false], + ["userMetadata._recirc_preserved_ingress_port50", 9, false], + ["_padding_1", 3, 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], + ["_upf_tun_peer_id13", 8, false], + ["_upf_upf_ctr_id14", 12, false], + ["_upf_qfi15", 6, false], + ["_upf_needs_gtpu_encap16", 1, 0], + ["_upf_skip_upf17", 1, 0], + ["_upf_skip_egress_upf_ctr18", 1, 0], + ["_upf_teid19", 32, false], + ["_upf__pad20", 4, false], + ["_int_bmd_report_type21", 3, false], + ["_int_bmd_mirror_session_id22", 10, false], + ["_int_bmd_drop_reason23", 8, false], + ["_int_bmd_queue_id24", 5, false], + ["_int_bmd_egress_port25", 9, false], + ["_int_bmd_wip_type26", 8, false], + ["__pad027", 1, false], + ["__pad128", 7, false], + ["__pad229", 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_outer_ipv437", + "id" : 63, + "header_type" : "ipv4_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_outer_udp38", + "id" : 64, + "header_type" : "udp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_outer_gtpu39", + "id" : 65, + "header_type" : "gtpu_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_outer_gtpu_options40", + "id" : 66, + "header_type" : "gtpu_options_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_outer_gtpu_ext_psc41", + "id" : 67, + "header_type" : "gtpu_ext_psc_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_ipv442", + "id" : 68, + "header_type" : "ipv4_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_ipv643", + "id" : 69, + "header_type" : "ipv6_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_udp44", + "id" : 70, + "header_type" : "udp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_ingress_bridged4", + "id" : 71, + "header_type" : "bridged_metadata_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_bridged36", + "id" : 72, + "header_type" : "bridged_metadata_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_int_report_md39", + "id" : 73, + "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_type47"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._recirc_preserved_egress_port48"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._recirc_preserved_drop_reason49"] + } + ] + }, + { + "id" : 2, + "name" : "field_list231", + "elements" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._recirc_preserved_ingress_port50"] + } + ] + }, + { + "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_length46"] + }, + { + "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_port50"] + }, + { + "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_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_wip_type26"] + }, + { + "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_type26"] + }, + { + "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_type26"] + }, + { + "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/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/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" + }, + { + "name" : "FabricIngress.upf.session_meter", + "id" : 1, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 22, + "column" : 34, + "source_fragment" : "session_meter" + }, + "is_direct" : false, + "size" : 20000, + "rate_count" : 2, + "type" : "bytes" + }, + { + "name" : "FabricIngress.upf.app_meter", + "id" : 2, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 23, + "column" : 34, + "source_fragment" : "app_meter" + }, + "is_direct" : false, + "size" : 20000, + "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/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/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/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/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/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/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/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/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4", + "line" : 19, + "column" : 50, + "source_fragment" : "acl_counter" + } + }, + { + "name" : "FabricIngress.next.hashed_counter", + "id" : 11, + "is_direct" : true, + "binding" : "FabricIngress.next.hashed", + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4", + "line" : 115, + "column" : 50, + "source_fragment" : "hashed_counter" + } + }, + { + "name" : "FabricIngress.next.multicast_counter", + "id" : 12, + "is_direct" : true, + "binding" : "FabricIngress.next.multicast", + "source_info" : { + "filename" : "/home/ubuntu/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" : 13, + "is_direct" : true, + "binding" : "FabricIngress.slice_tc_classifier.classifier", + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4", + "line" : 20, + "column" : 40, + "source_fragment" : "classifier_stats" + } + }, + { + "name" : "FabricIngress.qos.queues_stats", + "id" : 14, + "is_direct" : true, + "binding" : "FabricIngress.qos.queues", + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4", + "line" : 106, + "column" : 40, + "source_fragment" : "queues_stats" + } + }, + { + "name" : "FabricIngress.upf.terminations_counter", + "id" : 15, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 20, + "column" : 49, + "source_fragment" : "terminations_counter" + }, + "size" : 4096, + "is_direct" : false + }, + { + "name" : "FabricIngress.upf.recirc_stats", + "id" : 16, + "is_direct" : true, + "binding" : "FabricIngress.upf.uplink_recirc_rules", + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 356, + "column" : 40, + "source_fragment" : "recirc_stats" + } + }, + { + "name" : "FabricIngress.int_watchlist.watchlist_counter", + "id" : 17, + "is_direct" : true, + "binding" : "FabricIngress.int_watchlist.watchlist", + "source_info" : { + "filename" : "/home/ubuntu/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" : 18, + "is_direct" : true, + "binding" : "FabricIngress.int_ingress.drop_report", + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4", + "line" : 64, + "column" : 50, + "source_fragment" : "drop_report_counter" + } + }, + { + "name" : "FabricEgress.stats.flow_counter", + "id" : 19, + "is_direct" : true, + "binding" : "FabricEgress.stats.flows", + "source_info" : { + "filename" : "/home/ubuntu/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" : 20, + "is_direct" : true, + "binding" : "FabricEgress.egress_next.egress_vlan", + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4", + "line" : 241, + "column" : 50, + "source_fragment" : "egress_vlan_counter" + } + }, + { + "name" : "FabricEgress.upf.terminations_counter", + "id" : 21, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 477, + "column" : 49, + "source_fragment" : "terminations_counter" + }, + "size" : 4096, + "is_direct" : false + }, + { + "name" : "FabricEgress.int_egress.report_counter", + "id" : 22, + "is_direct" : true, + "binding" : "FabricEgress.int_egress.report", + "source_info" : { + "filename" : "/home/ubuntu/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" : 23, + "is_direct" : true, + "binding" : "FabricEgress.int_egress.int_metadata", + "source_info" : { + "filename" : "/home/ubuntu/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/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_18"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_19"] + } + ] + }, + { + "name" : "calc_0", + "id" : 1, + "algo" : "crc32", + "input" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_20"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_21"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_22"] + } + ] + }, + { + "name" : "calc_1", + "id" : 2, + "algo" : "crc32", + "input" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_23"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_24"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_25"] + } + ] + }, + { + "name" : "calc_2", + "id" : 3, + "algo" : "crc32", + "input" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_26"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_27"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_28"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_29"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_30"] + } + ] + }, + { + "name" : "calc_3", + "id" : 4, + "source_info" : { + "filename" : "/home/ubuntu/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_4", + "id" : 5, + "source_info" : { + "filename" : "/home/ubuntu/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_5", + "id" : 6, + "source_info" : { + "filename" : "/home/ubuntu/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_6", + "id" : 7, + "source_info" : { + "filename" : "/home/ubuntu/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_7", + "id" : 8, + "source_info" : { + "filename" : "/home/ubuntu/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" : "nop", + "id" : 6, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 7, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.stats.count", + "id" : 8, + "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/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" : 9, + "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/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_port48"] + }, + { + "type" : "field", + "value" : ["_ingress_packet_out0", "egress_port"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4", + "line" : 20, + "column" : 8, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "FabricIngress.filtering.deny", + "id" : 10, + "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/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/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/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_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x37" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 250, + "column" : 41, + "source_fragment" : "55, ..." + } + } + ] + }, + { + "name" : "FabricIngress.filtering.permit", + "id" : 11, + "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/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" : 12, + "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/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/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4", + "line" : 33, + "column" : 31, + "source_fragment" : "= port_type; ..." + } + } + ] + }, + { + "name" : "FabricIngress.filtering.set_forwarding_type", + "id" : 13, + "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/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" : 14, + "runtime_data" : [ + { + "name" : "drop_reason", + "bitwidth" : 8 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason23"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason23"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 17, + "runtime_data" : [ + { + "name" : "drop_reason", + "bitwidth" : 8 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 18, + "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/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" : 19, + "runtime_data" : [ + { + "name" : "next_id", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_mpls6" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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" : 20, + "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/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4", + "line" : 23, + "column" : 26, + "source_fragment" : "= next_id; ..." + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.nop_routing_v4", + "id" : 21, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.forwarding.drop_routing_v4", + "id" : 22, + "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/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/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" : 23, + "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/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4", + "line" : 23, + "column" : 26, + "source_fragment" : "= next_id; ..." + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.drop_routing_v6", + "id" : 24, + "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/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/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4", + "line" : 152, + "column" : 17, + "source_fragment" : "= 1; ..." + } + } + ] + }, + { + "name" : "FabricIngress.pre_next.set_mpls_label", + "id" : 25, + "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/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" : 26, + "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/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" : 27, + "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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4", + "line" : 27, + "column" : 17, + "source_fragment" : "= 0; ..." + } + } + ] + }, + { + "name" : "FabricIngress.acl.copy_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/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" : 29, + "runtime_data" : [], + "primitives" : [ + { + "op" : "clone_ingress_pkt_to_egress", + "parameters" : [ + { + "type" : "hexstr", + "value" : "0x000001ff" + }, + { + "type" : "hexstr", + "value" : "0x2" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4", + "line" : 42, + "column" : 17, + "source_fragment" : "= 1; ..." + } + } + ] + }, + { + "name" : "FabricIngress.acl.drop", + "id" : 30, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x50" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 252, + "column" : 27, + "source_fragment" : "80, ..." + } + } + ] + }, + { + "name" : "FabricIngress.acl.set_output_port", + "id" : 31, + "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/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_port48"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4", + "line" : 66, + "column" : 17, + "source_fragment" : "= 0; ..." + } + } + ] + }, + { + "name" : "FabricIngress.acl.nop_acl", + "id" : 32, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.next.output_hashed", + "id" : 33, + "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/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_port48"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/fabric-tna/p4src/v1model/../v1model/include/control/next.p4", + "line" : 18, + "column" : 34, + "source_fragment" : "= true; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.routing_hashed", + "id" : 34, + "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/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/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/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_port48"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/fabric-tna/p4src/v1model/../v1model/include/control/next.p4", + "line" : 18, + "column" : 34, + "source_fragment" : "= true; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.set_mcast_group_id", + "id" : 35, + "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/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/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" : 36, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "mcast_grp"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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" : 37, + "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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4", + "line" : 25, + "column" : 29, + "source_fragment" : "= false; ..." + } + } + ] + }, + { + "name" : "FabricIngress.slice_tc_classifier.no_classification", + "id" : 38, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_slice_id26"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4", + "line" : 31, + "column" : 29, + "source_fragment" : "= true; ..." + } + } + ] + }, + { + "name" : "FabricIngress.slice_tc_classifier.trust_dscp", + "id" : 39, + "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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4", + "line" : 40, + "column" : 29, + "source_fragment" : "= false; ..." + } + } + ] + }, + { + "name" : "FabricIngress.qos.use_upf", + "id" : 40, + "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/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" : 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_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/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" : 42, + "runtime_data" : [ + { + "name" : "qid", + "bitwidth" : 5 + } + ], + "primitives" : [] + }, + { + "name" : "FabricIngress.qos.meter_drop", + "id" : 43, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason23"] + }, + { + "type" : "hexstr", + "value" : "0xa0" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 269, + "column" : 36, + "source_fragment" : "160, ..." + } + } + ] + }, + { + "name" : "FabricIngress.qos.set_default_tc", + "id" : 44, + "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/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.upf.iface_access", + "id" : 45, + "runtime_data" : [ + { + "name" : "slice_id", + "bitwidth" : 4 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_skip_upf17"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.skip_upf = false" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_is_upf_hit29"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 86, + "column" : 29, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_upf_slice_id30"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 87, + "column" : 31, + "source_fragment" : "= slice_id; ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.iface_core", + "id" : 46, + "runtime_data" : [ + { + "name" : "slice_id", + "bitwidth" : 4 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_skip_upf17"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.skip_upf = false" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_is_upf_hit29"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 86, + "column" : 29, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_upf_slice_id30"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 87, + "column" : 31, + "source_fragment" : "= slice_id; ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.iface_dbuf", + "id" : 47, + "runtime_data" : [ + { + "name" : "slice_id", + "bitwidth" : 4 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_skip_upf17"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.skip_upf = false" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_is_upf_hit29"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 86, + "column" : 29, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_upf_slice_id30"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 87, + "column" : 31, + "source_fragment" : "= slice_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_ip_eth_type10"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 114, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"] + }, + { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "dst_addr"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 62, + "column" : 35, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_ipv47" + }, + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 64, + "column" : 17, + "source_fragment" : "= hdr.inner_ipv4; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 65, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_udp10" + }, + { + "type" : "header", + "value" : "_ingress_inner_udp20" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 66, + "column" : 16, + "source_fragment" : "= hdr.inner_udp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_udp20" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 67, + "column" : 8, + "source_fragment" : "hdr.inner_udp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_tcp9" + }, + { + "type" : "header", + "value" : "_ingress_inner_tcp19" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 68, + "column" : 16, + "source_fragment" : "= hdr.inner_tcp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_tcp19" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.inner_tcp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_icmp11" + }, + { + "type" : "header", + "value" : "_ingress_inner_icmp21" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 70, + "column" : 17, + "source_fragment" : "= hdr.inner_icmp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_icmp21" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 71, + "column" : 8, + "source_fragment" : "hdr.inner_icmp.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu12" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 72, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu_options13" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu_ext_psc14" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 74, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_encap_presence7"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 80, + "column" : 11, + "source_fragment" : "0x0, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.iface_miss", + "id" : 48, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_skip_upf17"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 104, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.skip_upf = true" + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_uplink_session_miss", + "id" : 49, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x86" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 261, + "column" : 38, + "source_fragment" : "134, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_uplink_session_drop", + "id" : 50, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 136, + "column" : 8, + "source_fragment" : "sess_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x87" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 262, + "column" : 38, + "source_fragment" : "135, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_downlink_session_miss", + "id" : 51, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x84" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 259, + "column" : 38, + "source_fragment" : "132, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_downlink_session_drop", + "id" : 52, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 151, + "column" : 8, + "source_fragment" : "sess_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x85" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 260, + "column" : 38, + "source_fragment" : "133, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_downlink_session", + "id" : 53, + "runtime_data" : [ + { + "name" : "tun_peer_id", + "bitwidth" : 8 + }, + { + "name" : "session_meter_idx", + "bitwidth" : 15 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 159, + "column" : 8, + "source_fragment" : "sess_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_ue_session_id"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 161, + "column" : 8, + "source_fragment" : "ue_session_id = fabric_md.routing_ipv4_dst; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_session_meter_idx_internal"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 162, + "column" : 8, + "source_fragment" : "session_meter_idx_internal = session_meter_idx" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_tun_peer_id13"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 163, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.tun_peer_id = tun_peer_id" + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_downlink_session_buf", + "id" : 54, + "runtime_data" : [ + { + "name" : "tun_peer_id", + "bitwidth" : 8 + }, + { + "name" : "session_meter_idx", + "bitwidth" : 15 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 167, + "column" : 8, + "source_fragment" : "sess_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_ue_session_id"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 169, + "column" : 8, + "source_fragment" : "ue_session_id = fabric_md.routing_ipv4_dst; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_session_meter_idx_internal"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 170, + "column" : 8, + "source_fragment" : "session_meter_idx_internal = session_meter_idx" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_tun_peer_id13"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 171, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.tun_peer_id = tun_peer_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_skip_egress_upf_ctr18"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 175, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.skip_egress_upf_ctr = true" + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_downlink_session_buf_drop", + "id" : 55, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 179, + "column" : 8, + "source_fragment" : "sess_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_ue_session_id"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 182, + "column" : 8, + "source_fragment" : "ue_session_id = fabric_md.routing_ipv4_dst; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x88" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 263, + "column" : 43, + "source_fragment" : "136, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_uplink_session", + "id" : 56, + "runtime_data" : [ + { + "name" : "session_meter_idx", + "bitwidth" : 15 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 190, + "column" : 8, + "source_fragment" : "sess_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_ue_session_id"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 192, + "column" : 8, + "source_fragment" : "ue_session_id = fabric_md.lkp.ipv4_src; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_session_meter_idx_internal"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 193, + "column" : 8, + "source_fragment" : "session_meter_idx_internal = session_meter_idx" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_ip_eth_type10"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 114, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"] + }, + { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "dst_addr"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 62, + "column" : 35, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_ipv47" + }, + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 64, + "column" : 17, + "source_fragment" : "= hdr.inner_ipv4; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 65, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_udp10" + }, + { + "type" : "header", + "value" : "_ingress_inner_udp20" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 66, + "column" : 16, + "source_fragment" : "= hdr.inner_udp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_udp20" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 67, + "column" : 8, + "source_fragment" : "hdr.inner_udp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_tcp9" + }, + { + "type" : "header", + "value" : "_ingress_inner_tcp19" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 68, + "column" : 16, + "source_fragment" : "= hdr.inner_tcp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_tcp19" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.inner_tcp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_icmp11" + }, + { + "type" : "header", + "value" : "_ingress_inner_icmp21" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 70, + "column" : 17, + "source_fragment" : "= hdr.inner_icmp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_icmp21" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 71, + "column" : 8, + "source_fragment" : "hdr.inner_icmp.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu12" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 72, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu_options13" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu_ext_psc14" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 74, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_encap_presence7"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 80, + "column" : 11, + "source_fragment" : "0x0, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.uplink_drop_miss", + "id" : 57, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x8b" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 266, + "column" : 42, + "source_fragment" : "139, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.downlink_drop_miss", + "id" : 58, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x89" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 264, + "column" : 42, + "source_fragment" : "137, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.uplink_drop", + "id" : 59, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 12 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_upf_ctr_id14"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.upf_ctr_id = ctr_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_term_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "term_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x8c" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 267, + "column" : 42, + "source_fragment" : "140, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.downlink_drop", + "id" : 60, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 12 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_upf_ctr_id14"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.upf_ctr_id = ctr_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_term_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "term_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x8a" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 265, + "column" : 42, + "source_fragment" : "138, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.app_fwd", + "id" : 61, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 12 + }, + { + "name" : "tc", + "bitwidth" : 2 + }, + { + "name" : "app_meter_idx", + "bitwidth" : 15 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_upf_ctr_id14"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.upf_ctr_id = ctr_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_term_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "term_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_upf_tc31"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 265, + "column" : 25, + "source_fragment" : "= tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_meter_idx_internal"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 266, + "column" : 8, + "source_fragment" : "app_meter_idx_internal = app_meter_idx" + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 267, + "column" : 29, + "source_fragment" : "= false; ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.downlink_fwd_encap", + "id" : 62, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 12 + }, + { + "name" : "tc", + "bitwidth" : 2 + }, + { + "name" : "teid", + "bitwidth" : 32 + }, + { + "name" : "qfi", + "bitwidth" : 6 + }, + { + "name" : "app_meter_idx", + "bitwidth" : 15 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_upf_ctr_id14"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.upf_ctr_id = ctr_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_term_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "term_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_upf_tc31"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 265, + "column" : 25, + "source_fragment" : "= tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_meter_idx_internal"] + }, + { + "type" : "runtime_data", + "value" : 4 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 266, + "column" : 8, + "source_fragment" : "app_meter_idx_internal = app_meter_idx; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 267, + "column" : 29, + "source_fragment" : "= false; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_needs_gtpu_encap16"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.needs_gtpu_encap = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_teid19"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 55, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.teid = teid; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_qfi15"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.qfi = qfi; ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_routing_ipv4_dst", + "id" : 63, + "runtime_data" : [ + { + "name" : "tun_dst_addr", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 314, + "column" : 35, + "source_fragment" : "= tun_dst_addr; ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_app_id", + "id" : 64, + "runtime_data" : [ + { + "name" : "app_id", + "bitwidth" : 8 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_internal_app_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 334, + "column" : 8, + "source_fragment" : "internal_app_id = app_id" + } + } + ] + }, + { + "name" : "FabricIngress.upf.recirc_allow", + "id" : 65, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "hexstr", + "value" : "0x01fe" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4", + "line" : 36, + "column" : 42, + "source_fragment" : "510; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_vlan_id6"] + }, + { + "type" : "hexstr", + "value" : "0x0ffe" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 147, + "column" : 34, + "source_fragment" : "12w4094; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._do_upf_uplink_recirc1"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 364, + "column" : 29, + "source_fragment" : "= true; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 365, + "column" : 34, + "source_fragment" : "= true; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 366, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 367, + "column" : 28, + "source_fragment" : "= true; ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.recirc_deny", + "id" : 66, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x96" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 268, + "column" : 41, + "source_fragment" : "150, ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._do_upf_uplink_recirc1"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 375, + "column" : 29, + "source_fragment" : "= false; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 376, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 377, + "column" : 28, + "source_fragment" : "= true; ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.recirc_miss", + "id" : 67, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.int_watchlist.mark_to_report", + "id" : 68, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_report_type21"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_type47"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 223, + "column" : 45, + "source_fragment" : "1; ..." + } + } + ] + }, + { + "name" : "FabricIngress.int_watchlist.no_report", + "id" : 69, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_report_type21"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_type47"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 219, + "column" : 50, + "source_fragment" : "0; ..." + } + } + ] + }, + { + "name" : "FabricIngress.int_watchlist.no_report_collector", + "id" : 70, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_report_type21"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 219, + "column" : 50, + "source_fragment" : "0; ..." + } + } + ] + }, + { + "name" : "FabricIngress.int_ingress.report_drop", + "id" : 71, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_bmd_type0"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_type21"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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" : ["_ingress_bridged4", "_upf_skip_upf17"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.skip_upf = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4", + "line" : 36, + "column" : 42, + "source_fragment" : "510; ..." + } + } + ] + }, + { + "name" : "fabric_v1model64", + "id" : 72, + "runtime_data" : [], + "primitives" : [ + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 64, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "fabric_v1model61", + "id" : 73, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 61, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_md)" + } + } + ] + }, + { + "name" : "fabric_v1model70", + "id" : 74, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_ig_port3"] + }, + { + "type" : "hexstr", + "value" : "0x01fe" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4", + "line" : 36, + "column" : 42, + "source_fragment" : "510; ..." + } + } + ] + }, + { + "name" : "lookup_md_init21", + "id" : 75, + "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/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" : 76, + "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/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4", + "line" : 19, + "column" : 23, + "source_fragment" : "= 0; ..." + } + } + ] + }, + { + "name" : "lookup_md_init38", + "id" : 77, + "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/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/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" : 78, + "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/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/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" : 79, + "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/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/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" : 80, + "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/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/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/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/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" : 81, + "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/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/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" : 82, + "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/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/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" : 83, + "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/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/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" : 84, + "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/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/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/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/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" : 85, + "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/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/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/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/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/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4", + "line" : 31, + "column" : 25, + "source_fragment" : "= 0; ..." + } + } + ] + }, + { + "name" : "upf409", + "id" : 86, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_is_uplink"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 409, + "column" : 20, + "source_fragment" : "is_uplink = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ipv4_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_dst12"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 410, + "column" : 20, + "source_fragment" : "app_ipv4_addr = fabric_md.lkp.ipv4_dst; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_l4_port"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_l4_dport15"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 411, + "column" : 20, + "source_fragment" : "app_l4_port = fabric_md.lkp.l4_dport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ip_proto"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 412, + "column" : 20, + "source_fragment" : "app_ip_proto = fabric_md.lkp.ip_proto; ..." + } + } + ] + }, + { + "name" : "upf418", + "id" : 87, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ipv4_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 418, + "column" : 20, + "source_fragment" : "app_ipv4_addr = fabric_md.lkp.ipv4_src; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_l4_port"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 419, + "column" : 20, + "source_fragment" : "app_l4_port = fabric_md.lkp.l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ip_proto"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 420, + "column" : 20, + "source_fragment" : "app_ip_proto = fabric_md.lkp.ip_proto; ..." + } + } + ] + }, + { + "name" : "upf424", + "id" : 88, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ipv4_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 424, + "column" : 20, + "source_fragment" : "app_ipv4_addr = fabric_md.lkp.ipv4_src; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_l4_port"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 425, + "column" : 20, + "source_fragment" : "app_l4_port = fabric_md.lkp.l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ip_proto"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 426, + "column" : 20, + "source_fragment" : "app_ip_proto = fabric_md.lkp.ip_proto; ..." + } + } + ] + }, + { + "name" : "upf443", + "id" : 89, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_skip_egress_upf_ctr18"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 443, + "column" : 16, + "source_fragment" : "fabric_md.bridged.upf.skip_egress_upf_ctr = true" + } + } + ] + }, + { + "name" : "upf448", + "id" : 90, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_14"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["scalars", "upf_session_meter_idx_internal"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 448, + "column" : 44, + "source_fragment" : "(bit<32>) session_meter_idx_internal" + } + }, + { + "op" : "execute_meter", + "parameters" : [ + { + "type" : "meter_array", + "value" : "FabricIngress.upf.session_meter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_14"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_upf_meter_color32"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 448, + "column" : 16, + "source_fragment" : "session_meter.execute_meter((bit<32>) session_meter_idx_internal, fabric_md.upf_meter_color)" + } + } + ] + }, + { + "name" : "upf445", + "id" : 91, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_15"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["scalars", "upf_app_meter_idx_internal"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 445, + "column" : 36, + "source_fragment" : "(bit<32>) app_meter_idx_internal" + } + }, + { + "op" : "execute_meter", + "parameters" : [ + { + "type" : "meter_array", + "value" : "FabricIngress.upf.app_meter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_15"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_upf_meter_color32"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 445, + "column" : 12, + "source_fragment" : "app_meter.execute_meter((bit<32>) app_meter_idx_internal, fabric_md.upf_meter_color)" + } + } + ] + }, + { + "name" : "upf461", + "id" : 92, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_16"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_upf_ctr_id14"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 461, + "column" : 43, + "source_fragment" : "(bit<32>)fabric_md.bridged.upf.upf_ctr_id" + } + }, + { + "op" : "count", + "parameters" : [ + { + "type" : "counter_array", + "value" : "FabricIngress.upf.terminations_counter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_16"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 461, + "column" : 16, + "source_fragment" : "terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id)" + } + } + ] + }, + { + "name" : "upf25", + "id" : 93, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_is_uplink"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 25, + "column" : 4, + "source_fragment" : "bool is_uplink = false;" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_term_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 26, + "column" : 4, + "source_fragment" : "bool term_hit = false;" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 27, + "column" : 4, + "source_fragment" : "bool sess_hit = false;" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ipv4_addr"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 28, + "column" : 4, + "source_fragment" : "bit<32> app_ipv4_addr = 0;" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_l4_port"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 29, + "column" : 4, + "source_fragment" : "l4_port_t app_l4_port = 0;" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ip_proto"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 30, + "column" : 4, + "source_fragment" : "bit<8> app_ip_proto = 0;" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_internal_app_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 55, + "column" : 30, + "source_fragment" : "0; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_ue_session_id"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 32, + "column" : 4, + "source_fragment" : "ue_session_id_t ue_session_id = 0;" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_session_meter_idx_internal"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 72, + "column" : 54, + "source_fragment" : "0; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_meter_idx_internal"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 73, + "column" : 46, + "source_fragment" : "0; ..." + } + } + ] + }, + { + "name" : "filtering100", + "id" : 94, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_17"] + }, + { + "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/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_17"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : "hasher28", + "id" : 95, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_18"] + }, + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_tun_peer_id13"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 32, + "column" : 17, + "source_fragment" : "fabric_md.bridged" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_19"] + }, + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_teid19"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 32, + "column" : 52, + "source_fragment" : "fabric_md.bridged" + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 28, + "column" : 12, + "source_fragment" : "hash( ..." + } + } + ] + }, + { + "name" : "hasher39", + "id" : 96, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_20"] + }, + { + "type" : "field", + "value" : ["_ingress_ipv47", "src_addr"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_21"] + }, + { + "type" : "field", + "value" : ["_ingress_ipv47", "dst_addr"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_22"] + }, + { + "type" : "field", + "value" : ["_ingress_gtpu12", "teid"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_0" + }, + { + "type" : "hexstr", + "value" : "0xffffffff" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 39, + "column" : 12, + "source_fragment" : "hash( ..." + } + } + ] + }, + { + "name" : "hasher50", + "id" : 97, + "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/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 50, + "column" : 32, + "source_fragment" : "= fabric_md.bridged.base.inner_hash; ..." + } + } + ] + }, + { + "name" : "hasher66", + "id" : 98, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_inner_hash1"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_23"] + }, + { + "type" : "field", + "value" : ["_ingress_ethernet3", "dst_addr"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_24"] + }, + { + "type" : "field", + "value" : ["_ingress_ethernet3", "src_addr"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_25"] + }, + { + "type" : "field", + "value" : ["_ingress_eth_type5", "value"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_1" + }, + { + "type" : "hexstr", + "value" : "0xffffffff" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 67, + "column" : 12, + "source_fragment" : "hash( ..." + } + } + ] + }, + { + "name" : "hasher17", + "id" : 99, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_26"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 91, + "column" : 34, + "source_fragment" : "fabric_md" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_27"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_dst12"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 91, + "column" : 34, + "source_fragment" : "fabric_md" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_28"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 91, + "column" : 34, + "source_fragment" : "fabric_md" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_29"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 91, + "column" : 34, + "source_fragment" : "fabric_md" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_30"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_l4_dport15"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_2" + }, + { + "type" : "hexstr", + "value" : "0xffffffff" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 17, + "column" : 8, + "source_fragment" : "hash( ..." + } + } + ] + }, + { + "name" : "slicing174", + "id" : 100, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_31"] + }, + { + "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/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_31"] + }, + { + "type" : "field", + "value" : ["scalars", "qos_packet_color"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 101, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "qos_packet_color"] + }, + { + "type" : "hexstr", + "value" : "0x02" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4", + "line" : 25, + "column" : 10, + "source_fragment" : "2 ..." + } + } + ] + }, + { + "name" : "int112", + "id" : 102, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_egress_port25"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_id24"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 103, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 110, + "column" : 12, + "source_fragment" : "mark_to_drop(standard_md)" + } + } + ] + }, + { + "name" : "fabric_v1model106", + "id" : 104, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_egress_bridged36" + }, + { + "type" : "header", + "value" : "_ingress_bridged4" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 106, + "column" : 8, + "source_fragment" : "fabric_md.egress.bridged = fabric_md" + } + } + ] + }, + { + "name" : "nop", + "id" : 105, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 106, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 107, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 108, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 109, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 110, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 111, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.stats.count", + "id" : 112, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.pkt_io_egress.set_switch_info", + "id" : 113, + "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/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" : 114, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_mpls6" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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" : 115, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_mpls6" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 112, + "column" : 31, + "source_fragment" : "0x8847; ..." + } + } + ] + }, + { + "name" : "FabricEgress.egress_next.push_vlan", + "id" : 116, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_vlan_tag4" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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" : 117, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_vlan_tag4" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 118, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason49"] + }, + { + "type" : "hexstr", + "value" : "0x82" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 257, + "column" : 35, + "source_fragment" : "130, ..." + } + } + ] + }, + { + "name" : "FabricEgress.dscp_rewriter.rewrite", + "id" : 119, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.dscp_rewriter.clear", + "id" : 120, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4", + "line" : 198, + "column" : 8, + "source_fragment" : "tmp_dscp = 0" + } + } + ] + }, + { + "name" : "FabricEgress.upf.load_tunnel_params", + "id" : 121, + "runtime_data" : [ + { + "name" : "tunnel_src_port", + "bitwidth" : 16 + }, + { + "name" : "tunnel_src_addr", + "bitwidth" : 32 + }, + { + "name" : "tunnel_dst_addr", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 486, + "column" : 8, + "source_fragment" : "hdr.ipv4.src_addr = tunnel_src_addr" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 487, + "column" : 8, + "source_fragment" : "hdr.ipv4.dst_addr = tunnel_dst_addr" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_udp10", "sport"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 488, + "column" : 8, + "source_fragment" : "hdr.udp.sport = tunnel_src_port" + } + } + ] + }, + { + "name" : "FabricEgress.upf.gtpu_only", + "id" : 122, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 551, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setValid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + }, + { + "type" : "header", + "value" : "_ingress_ipv47" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 552, + "column" : 23, + "source_fragment" : "= hdr.ipv4; ..." + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_udp10" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 553, + "column" : 8, + "source_fragment" : "hdr.udp.setValid()" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu12" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 554, + "column" : 8, + "source_fragment" : "hdr.gtpu.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "version"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 506, + "column" : 8, + "source_fragment" : "hdr.ipv4.version = 4w4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "ihl"] + }, + { + "type" : "hexstr", + "value" : "0x05" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 507, + "column" : 8, + "source_fragment" : "hdr.ipv4.ihl = 4w5" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 508, + "column" : 8, + "source_fragment" : "hdr.ipv4.dscp = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "ecn"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 509, + "column" : 8, + "source_fragment" : "hdr.ipv4.ecn = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "identification"] + }, + { + "type" : "hexstr", + "value" : "0x1513" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 511, + "column" : 8, + "source_fragment" : "hdr.ipv4.identification = 0x1513" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "flags"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 512, + "column" : 8, + "source_fragment" : "hdr.ipv4.flags = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "frag_offset"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 513, + "column" : 8, + "source_fragment" : "hdr.ipv4.frag_offset = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 150, + "column" : 32, + "source_fragment" : "64; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "protocol"] + }, + { + "type" : "hexstr", + "value" : "0x11" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 134, + "column" : 25, + "source_fragment" : "17; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_udp10", "dport"] + }, + { + "type" : "hexstr", + "value" : "0x0868" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 86, + "column" : 30, + "source_fragment" : "2152; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "version"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 87, + "column" : 22, + "source_fragment" : "3w1; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "pt"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 89, + "column" : 37, + "source_fragment" : "1w1; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "spare"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 527, + "column" : 8, + "source_fragment" : "hdr.gtpu.spare = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "seq_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 529, + "column" : 8, + "source_fragment" : "hdr.gtpu.seq_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "npdu_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 530, + "column" : 8, + "source_fragment" : "hdr.gtpu.npdu_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "msgtype"] + }, + { + "type" : "hexstr", + "value" : "0xff" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 88, + "column" : 25, + "source_fragment" : "0xff; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "teid"] + }, + { + "type" : "field", + "value" : ["_egress_bridged36", "_upf_teid19"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 533, + "column" : 8, + "source_fragment" : "hdr.gtpu.teid = fabric_md.bridged" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_options13", "seq_num"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 535, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.seq_num = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_options13", "n_pdu_num"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 536, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.n_pdu_num = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_options13", "next_ext"] + }, + { + "type" : "hexstr", + "value" : "0x85" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 91, + "column" : 33, + "source_fragment" : "0x85; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "len"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 94, + "column" : 32, + "source_fragment" : "8w1; // 1*4-octets ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "type"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 92, + "column" : 36, + "source_fragment" : "4w0; // Downlink ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "spare0"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 541, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.spare0 = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "ppp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 542, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.ppp = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "rqi"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 543, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.rqi = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "next_ext"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 90, + "column" : 34, + "source_fragment" : "0x0; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "hexstr", + "value" : "0x0024" + }, + "right" : { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "total_len"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 563, + "column" : 8, + "source_fragment" : "hdr.ipv4.total_len = 20 + 8 + 8 ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_udp10", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "hexstr", + "value" : "0x0010" + }, + "right" : { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "total_len"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 565, + "column" : 8, + "source_fragment" : "hdr.udp.len = 8 + 8 ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "msglen"] + }, + { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "total_len"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 567, + "column" : 8, + "source_fragment" : "hdr.gtpu.msglen = hdr.inner_ipv4.total_len" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "encap_presence"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 81, + "column" : 16, + "source_fragment" : "0x1, ..." + } + } + ] + }, + { + "name" : "FabricEgress.upf.gtpu_with_psc", + "id" : 123, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu_options13" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 577, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setValid()" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu_ext_psc14" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 578, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setValid()" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 551, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setValid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + }, + { + "type" : "header", + "value" : "_ingress_ipv47" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 552, + "column" : 23, + "source_fragment" : "= hdr.ipv4; ..." + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_udp10" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 553, + "column" : 8, + "source_fragment" : "hdr.udp.setValid()" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu12" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 554, + "column" : 8, + "source_fragment" : "hdr.gtpu.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "version"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 506, + "column" : 8, + "source_fragment" : "hdr.ipv4.version = 4w4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "ihl"] + }, + { + "type" : "hexstr", + "value" : "0x05" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 507, + "column" : 8, + "source_fragment" : "hdr.ipv4.ihl = 4w5" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 508, + "column" : 8, + "source_fragment" : "hdr.ipv4.dscp = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "ecn"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 509, + "column" : 8, + "source_fragment" : "hdr.ipv4.ecn = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "identification"] + }, + { + "type" : "hexstr", + "value" : "0x1513" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 511, + "column" : 8, + "source_fragment" : "hdr.ipv4.identification = 0x1513" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "flags"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 512, + "column" : 8, + "source_fragment" : "hdr.ipv4.flags = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "frag_offset"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 513, + "column" : 8, + "source_fragment" : "hdr.ipv4.frag_offset = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 150, + "column" : 32, + "source_fragment" : "64; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "protocol"] + }, + { + "type" : "hexstr", + "value" : "0x11" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 134, + "column" : 25, + "source_fragment" : "17; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_udp10", "dport"] + }, + { + "type" : "hexstr", + "value" : "0x0868" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 86, + "column" : 30, + "source_fragment" : "2152; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "version"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 87, + "column" : 22, + "source_fragment" : "3w1; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "pt"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 89, + "column" : 37, + "source_fragment" : "1w1; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "spare"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 527, + "column" : 8, + "source_fragment" : "hdr.gtpu.spare = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "seq_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 529, + "column" : 8, + "source_fragment" : "hdr.gtpu.seq_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "npdu_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 530, + "column" : 8, + "source_fragment" : "hdr.gtpu.npdu_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "msgtype"] + }, + { + "type" : "hexstr", + "value" : "0xff" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 88, + "column" : 25, + "source_fragment" : "0xff; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "teid"] + }, + { + "type" : "field", + "value" : ["_egress_bridged36", "_upf_teid19"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 533, + "column" : 8, + "source_fragment" : "hdr.gtpu.teid = fabric_md.bridged" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_options13", "seq_num"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 535, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.seq_num = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_options13", "n_pdu_num"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 536, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.n_pdu_num = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_options13", "next_ext"] + }, + { + "type" : "hexstr", + "value" : "0x85" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 91, + "column" : 33, + "source_fragment" : "0x85; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "len"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 94, + "column" : 32, + "source_fragment" : "8w1; // 1*4-octets ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "type"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 92, + "column" : 36, + "source_fragment" : "4w0; // Downlink ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "spare0"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 541, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.spare0 = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "ppp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 542, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.ppp = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "rqi"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 543, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.rqi = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "next_ext"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 90, + "column" : 34, + "source_fragment" : "0x0; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "hexstr", + "value" : "0x002c" + }, + "right" : { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "total_len"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 580, + "column" : 8, + "source_fragment" : "hdr.ipv4.total_len = 20 + 8 + 8 ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_udp10", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "hexstr", + "value" : "0x0018" + }, + "right" : { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "total_len"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 583, + "column" : 8, + "source_fragment" : "hdr.udp.len = 8 + 8 ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "msglen"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "hexstr", + "value" : "0x0008" + }, + "right" : { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "total_len"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 586, + "column" : 8, + "source_fragment" : "hdr.gtpu.msglen = 4 + 4 ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "ex_flag"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 588, + "column" : 8, + "source_fragment" : "hdr.gtpu.ex_flag = 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "qfi"] + }, + { + "type" : "field", + "value" : ["_egress_bridged36", "_upf_qfi15"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 589, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.qfi = fabric_md.bridged" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "encap_presence"] + }, + { + "type" : "hexstr", + "value" : "0x02" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 82, + "column" : 20, + "source_fragment" : "0x2, ..." + } + } + ] + }, + { + "name" : "FabricEgress.parser_emulator.parse_int_ingress_drop", + "id" : 124, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "parser_emulator_hdr_report_ethernet" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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_md39" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "ip_eth_type"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 114, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "report_type"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 221, + "column" : 45, + "source_fragment" : "4; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "mirror_type"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_md39", "bmd_type"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 169, + "column" : 23, + "source_fragment" : "4, ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "encap_presence"] + }, + { + "type" : "field", + "value" : ["_egress_bridged36", "_base_encap_presence7"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "flow_hash"] + }, + { + "type" : "field", + "value" : ["_egress_bridged36", "_base_inner_hash1"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason23"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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" : 125, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "parser_emulator_hdr_report_ethernet" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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_md39" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "ip_eth_type"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 114, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "report_type"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 221, + "column" : 45, + "source_fragment" : "4; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "mirror_type"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_md39", "bmd_type"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 169, + "column" : 23, + "source_fragment" : "4, ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "encap_presence"] + }, + { + "type" : "field", + "value" : ["_egress_bridged36", "_base_encap_presence7"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "flow_hash"] + }, + { + "type" : "field", + "value" : ["_egress_bridged36", "_base_inner_hash1"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason23"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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" : 126, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "parser_emulator_hdr_report_ethernet" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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_md39", "bmd_type"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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" : ["_egress_bridged36", "_upf_skip_upf17"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4", + "line" : 114, + "column" : 12, + "source_fragment" : "fabric_md.bridged.upf.skip_upf = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["parser_emulator_hdr_report_fixed_header", "ig_tstamp"] + }, + { + "type" : "field", + "value" : ["_egress_int_report_md39", "ig_tstamp"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "ig_port"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "eg_port"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "queue_id"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_md39", "queue_occupancy"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "eg_tstamp"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 127, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "parser_emulator_hdr_report_ethernet" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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_md39", "bmd_type"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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" : ["_egress_bridged36", "_upf_skip_upf17"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4", + "line" : 114, + "column" : 12, + "source_fragment" : "fabric_md.bridged.upf.skip_upf = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["parser_emulator_hdr_report_fixed_header", "ig_tstamp"] + }, + { + "type" : "field", + "value" : ["_egress_int_report_md39", "ig_tstamp"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "ig_port"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "eg_port"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "queue_id"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_md39", "queue_occupancy"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "eg_tstamp"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 128, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.int_egress.reset_quota", + "id" : 129, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.int_egress.set_config", + "id" : 130, + "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/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/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" : 131, + "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/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/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/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/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_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/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_32"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_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/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_33"] + }, + { + "type" : "field", + "value" : ["scalars", "int_egress_reg"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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" : 132, + "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/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/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/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/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_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/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_34"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_35"] + }, + { + "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/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_35"] + }, + { + "type" : "field", + "value" : ["scalars", "int_egress_reg"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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" : 133, + "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/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/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/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/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_36"] + }, + { + "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/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_36"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_37"] + }, + { + "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/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_37"] + }, + { + "type" : "field", + "value" : ["scalars", "int_egress_reg"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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_reason23"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 134, + "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/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/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/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/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_38"] + }, + { + "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/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_38"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_39"] + }, + { + "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/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_39"] + }, + { + "type" : "field", + "value" : ["scalars", "int_egress_reg"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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_reason23"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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" : 135, + "runtime_data" : [ + { + "name" : "report_type", + "bitwidth" : 3 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_fabric_md_bridged", "_int_bmd_mirror_session_id22"] + }, + { + "type" : "hexstr", + "value" : "0x01fa" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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/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/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" : 136, + "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/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/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" : 137, + "runtime_data" : [], + "primitives" : [ + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 136, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "fabric_v1model133", + "id" : 138, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._egress_cpu_port37"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 139, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_ipv47" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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" : 140, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_bridged36", "_int_bmd_drop_reason23"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._recirc_preserved_drop_reason49"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_type21"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._recirc_preserved_report_type47"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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_recirc45"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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" : 141, + "runtime_data" : [], + "primitives" : [ + { + "op" : "recirculate", + "parameters" : [ + { + "type" : "hexstr", + "value" : "0x3" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 142, + "runtime_data" : [], + "primitives" : [ + { + "op" : "recirculate", + "parameters" : [ + { + "type" : "hexstr", + "value" : "0x1" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 143, + "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/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/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/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/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/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/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/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/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" : 144, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_ipv47" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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" : 145, + "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/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/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/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/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/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/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/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/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_recirc45"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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" : 146, + "runtime_data" : [], + "primitives" : [ + { + "op" : "recirculate", + "parameters" : [ + { + "type" : "hexstr", + "value" : "0x4" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 147, + "runtime_data" : [], + "primitives" : [ + { + "op" : "recirculate", + "parameters" : [ + { + "type" : "hexstr", + "value" : "0x1" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 148, + "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/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/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/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/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/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4", + "line" : 173, + "column" : 27, + "source_fragment" : "= hdr; ..." + } + } + ] + }, + { + "name" : "packetio51", + "id" : 149, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_packet_in1" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_port50"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4", + "line" : 54, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "packetio60", + "id" : 150, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._egress_pkt_length46"] + }, + { + "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/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" : 151, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_bridged36", "_int_bmd_report_type21"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/fabric-tna/p4src/v1model/../v1model/include/control/next.p4", + "line" : 285, + "column" : 21, + "source_fragment" : "= 1; ..." + } + } + ] + }, + { + "name" : "next325", + "id" : 152, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason49"] + }, + { + "type" : "hexstr", + "value" : "0x83" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 258, + "column" : 32, + "source_fragment" : "131, ..." + } + } + ] + }, + { + "name" : "next323", + "id" : 153, + "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/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" : 154, + "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/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" : 155, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason49"] + }, + { + "type" : "hexstr", + "value" : "0x1a" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 247, + "column" : 30, + "source_fragment" : "26, ..." + } + } + ] + }, + { + "name" : "next343", + "id" : 156, + "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/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" : 157, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason49"] + }, + { + "type" : "hexstr", + "value" : "0x1a" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 247, + "column" : 30, + "source_fragment" : "26, ..." + } + } + ] + }, + { + "name" : "upf610", + "id" : 158, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_udp20" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 610, + "column" : 20, + "source_fragment" : "hdr.inner_udp.setValid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_udp20" + }, + { + "type" : "header", + "value" : "_ingress_udp10" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 611, + "column" : 34, + "source_fragment" : "= hdr.udp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_udp10" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 612, + "column" : 20, + "source_fragment" : "hdr.udp.setInvalid()" + } + } + ] + }, + { + "name" : "upf615", + "id" : 159, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_tcp19" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 615, + "column" : 20, + "source_fragment" : "hdr.inner_tcp.setValid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_tcp19" + }, + { + "type" : "header", + "value" : "_ingress_tcp9" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 616, + "column" : 34, + "source_fragment" : "= hdr.tcp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_tcp9" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 617, + "column" : 20, + "source_fragment" : "hdr.tcp.setInvalid()" + } + } + ] + }, + { + "name" : "upf620", + "id" : 160, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_icmp21" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 620, + "column" : 20, + "source_fragment" : "hdr.inner_icmp.setValid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_icmp21" + }, + { + "type" : "header", + "value" : "_ingress_icmp11" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 621, + "column" : 35, + "source_fragment" : "= hdr.icmp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_icmp11" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 622, + "column" : 20, + "source_fragment" : "hdr.icmp.setInvalid()" + } + } + ] + }, + { + "name" : "upf628", + "id" : 161, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_40"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["_egress_bridged36", "_upf_upf_ctr_id14"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 628, + "column" : 43, + "source_fragment" : "(bit<32>)fabric_md.bridged.upf.upf_ctr_id" + } + }, + { + "op" : "count", + "parameters" : [ + { + "type" : "counter_array", + "value" : "FabricEgress.upf.terminations_counter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_40"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 628, + "column" : 16, + "source_fragment" : "terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id)" + } + } + ] + }, + { + "name" : "int128", + "id" : 162, + "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/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/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/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/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/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/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/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/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/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/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_md39" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_latency40"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_timestamp41"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_stripped42"] + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_report43"] + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_length46"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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" : 163, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_41"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["int_egress_fabric_md_bridged", "_int_bmd_mirror_session_id22"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_41"] + }, + { + "type" : "hexstr", + "value" : "0x1" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4", + "line" : 383, + "column" : 16, + "source_fragment" : "clone_preserving_field_list(CloneType.E2E, ..." + } + } + ] + }, + { + "name" : "int373", + "id" : 164, + "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/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" : 165, + "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/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4", + "line" : 217, + "column" : 16, + "source_fragment" : "hdr.ipv4.dscp = tmp_dscp" + } + } + ] + }, + { + "name" : "slicing189", + "id" : 166, + "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/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_md39" + }, + { + "type" : "header", + "value" : "int_egress_fabric_md_int_report_md" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_latency40"] + }, + { + "type" : "field", + "value" : ["int_egress_fabric_md_int_md", "hop_latency"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_timestamp41"] + }, + { + "type" : "field", + "value" : ["int_egress_fabric_md_int_md", "timestamp"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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" : 167, + "runtime_data" : [], + "primitives" : [ + { + "op" : "recirculate", + "parameters" : [ + { + "type" : "hexstr", + "value" : "0x5" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 170, + "column" : 12, + "source_fragment" : "recirculate_preserving_field_list(NO_PRESERVATION)" + } + } + ] + }, + { + "name" : "fabric_v1model174", + "id" : 168, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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" : [73], + "actions" : ["fabric_v1model61"], + "base_default_next" : "node_3", + "next_tables" : { + "fabric_v1model61" : "node_3" + }, + "default_entry" : { + "action_id" : 73, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_fabric_v1model64", + "id" : 1, + "source_info" : { + "filename" : "/home/ubuntu/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" : [72], + "actions" : ["fabric_v1model64"], + "base_default_next" : "node_5", + "next_tables" : { + "fabric_v1model64" : "node_5" + }, + "default_entry" : { + "action_id" : 72, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_fabric_v1model70", + "id" : 2, + "source_info" : { + "filename" : "/home/ubuntu/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" : [74], + "actions" : ["fabric_v1model70"], + "base_default_next" : "tbl_lookup_md_init15", + "next_tables" : { + "fabric_v1model70" : "tbl_lookup_md_init15" + }, + "default_entry" : { + "action_id" : 74, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init15", + "id" : 3, + "source_info" : { + "filename" : "/home/ubuntu/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" : [76], + "actions" : ["lookup_md_init15"], + "base_default_next" : "node_8", + "next_tables" : { + "lookup_md_init15" : "node_8" + }, + "default_entry" : { + "action_id" : 76, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init21", + "id" : 4, + "source_info" : { + "filename" : "/home/ubuntu/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" : [75], + "actions" : ["lookup_md_init21"], + "base_default_next" : "tbl_lookup_md_init24", + "next_tables" : { + "lookup_md_init21" : "tbl_lookup_md_init24" + }, + "default_entry" : { + "action_id" : 75, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init24", + "id" : 5, + "source_info" : { + "filename" : "/home/ubuntu/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" : [85], + "actions" : ["lookup_md_init24"], + "base_default_next" : "node_11", + "next_tables" : { + "lookup_md_init24" : "node_11" + }, + "default_entry" : { + "action_id" : 85, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init33", + "id" : 6, + "source_info" : { + "filename" : "/home/ubuntu/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" : [80], + "actions" : ["lookup_md_init33"], + "base_default_next" : "node_13", + "next_tables" : { + "lookup_md_init33" : "node_13" + }, + "default_entry" : { + "action_id" : 80, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init38", + "id" : 7, + "source_info" : { + "filename" : "/home/ubuntu/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" : [77], + "actions" : ["lookup_md_init38"], + "base_default_next" : "node_27", + "next_tables" : { + "lookup_md_init38" : "node_27" + }, + "default_entry" : { + "action_id" : 77, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init41", + "id" : 8, + "source_info" : { + "filename" : "/home/ubuntu/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" : [78], + "actions" : ["lookup_md_init41"], + "base_default_next" : "node_27", + "next_tables" : { + "lookup_md_init41" : "node_27" + }, + "default_entry" : { + "action_id" : 78, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init44", + "id" : 9, + "source_info" : { + "filename" : "/home/ubuntu/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" : [79], + "actions" : ["lookup_md_init44"], + "base_default_next" : "node_27", + "next_tables" : { + "lookup_md_init44" : "node_27" + }, + "default_entry" : { + "action_id" : 79, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init48", + "id" : 10, + "source_info" : { + "filename" : "/home/ubuntu/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" : [84], + "actions" : ["lookup_md_init48"], + "base_default_next" : "node_21", + "next_tables" : { + "lookup_md_init48" : "node_21" + }, + "default_entry" : { + "action_id" : 84, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init53", + "id" : 11, + "source_info" : { + "filename" : "/home/ubuntu/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" : [81], + "actions" : ["lookup_md_init53"], + "base_default_next" : "node_27", + "next_tables" : { + "lookup_md_init53" : "node_27" + }, + "default_entry" : { + "action_id" : 81, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init56", + "id" : 12, + "source_info" : { + "filename" : "/home/ubuntu/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" : [82], + "actions" : ["lookup_md_init56"], + "base_default_next" : "node_27", + "next_tables" : { + "lookup_md_init56" : "node_27" + }, + "default_entry" : { + "action_id" : 82, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init59", + "id" : 13, + "source_info" : { + "filename" : "/home/ubuntu/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" : [83], + "actions" : ["lookup_md_init59"], + "base_default_next" : "node_27", + "next_tables" : { + "lookup_md_init59" : "node_27" + }, + "default_entry" : { + "action_id" : 83, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_pkt_io_do_packet_out", + "id" : 14, + "source_info" : { + "filename" : "/home/ubuntu/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" : [9], + "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" : 9, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.int_watchlist.watchlist", + "id" : 15, + "source_info" : { + "filename" : "/home/ubuntu/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" : [68, 70, 69], + "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" : 69, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.stats.flows", + "id" : 16, + "source_info" : { + "filename" : "/home/ubuntu/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" : [8], + "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" : 8, + "action_const" : true, + "action_data" : ["0x0"], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.slice_tc_classifier.classifier", + "id" : 17, + "source_info" : { + "filename" : "/home/ubuntu/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" : [37, 39, 38], + "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" : 38, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.filtering.ingress_port_vlan", + "id" : 18, + "source_info" : { + "filename" : "/home/ubuntu/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" : [10, 11, 12], + "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" : 10, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.filtering.fwd_classifier", + "id" : 19, + "source_info" : { + "filename" : "/home/ubuntu/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" : [13], + "actions" : ["FabricIngress.filtering.set_forwarding_type"], + "base_default_next" : "tbl_filtering100", + "next_tables" : { + "FabricIngress.filtering.set_forwarding_type" : "tbl_filtering100" + }, + "default_entry" : { + "action_id" : 13, + "action_const" : true, + "action_data" : ["0x0"], + "action_entry_const" : true + } + }, + { + "name" : "tbl_filtering100", + "id" : 20, + "source_info" : { + "filename" : "/home/ubuntu/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" : [94], + "actions" : ["filtering100"], + "base_default_next" : "node_35", + "next_tables" : { + "filtering100" : "node_35" + }, + "default_entry" : { + "action_id" : 94, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf25", + "id" : 21, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 25, + "column" : 4, + "source_fragment" : "bool is_uplink = false; ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [93], + "actions" : ["upf25"], + "base_default_next" : "node_37", + "next_tables" : { + "upf25" : "node_37" + }, + "default_entry" : { + "action_id" : 93, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.interfaces", + "id" : 22, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 107, + "column" : 10, + "source_fragment" : "interfaces" + }, + "key" : [ + { + "match_type" : "lpm", + "name" : "ipv4_dst_addr", + "target" : ["_ingress_ipv47", "dst_addr"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "gtpu_is_valid", + "target" : ["_ingress_gtpu12", "$valid$"], + "mask" : null + } + ], + "match_type" : "lpm", + "type" : "simple", + "max_size" : 64, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [45, 46, 47, 48], + "actions" : ["FabricIngress.upf.iface_access", "FabricIngress.upf.iface_core", "FabricIngress.upf.iface_dbuf", "FabricIngress.upf.iface_miss"], + "base_default_next" : "FabricIngress.upf.applications", + "next_tables" : { + "FabricIngress.upf.iface_access" : "tbl_upf409", + "FabricIngress.upf.iface_core" : "tbl_upf418", + "FabricIngress.upf.iface_dbuf" : "tbl_upf424", + "FabricIngress.upf.iface_miss" : "FabricIngress.upf.applications" + }, + "default_entry" : { + "action_id" : 48, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf409", + "id" : 23, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 409, + "column" : 30, + "source_fragment" : "= true; ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [86], + "actions" : ["upf409"], + "base_default_next" : "node_40", + "next_tables" : { + "upf409" : "node_40" + }, + "default_entry" : { + "action_id" : 86, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.uplink_sessions", + "id" : 24, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 213, + "column" : 10, + "source_fragment" : "uplink_sessions" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "tunnel_ipv4_dst", + "target" : ["_ingress_ipv47", "dst_addr"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "teid", + "target" : ["_ingress_gtpu12", "teid"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 100000, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [56, 50, 49], + "actions" : ["FabricIngress.upf.set_uplink_session", "FabricIngress.upf.set_uplink_session_drop", "FabricIngress.upf.set_uplink_session_miss"], + "base_default_next" : "FabricIngress.upf.applications", + "next_tables" : { + "FabricIngress.upf.set_uplink_session" : "FabricIngress.upf.applications", + "FabricIngress.upf.set_uplink_session_drop" : "FabricIngress.upf.applications", + "FabricIngress.upf.set_uplink_session_miss" : "FabricIngress.upf.applications" + }, + "default_entry" : { + "action_id" : 49, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf418", + "id" : 25, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 418, + "column" : 34, + "source_fragment" : "= fabric_md.lkp.ipv4_src; ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [87], + "actions" : ["upf418"], + "base_default_next" : "FabricIngress.upf.downlink_sessions", + "next_tables" : { + "upf418" : "FabricIngress.upf.downlink_sessions" + }, + "default_entry" : { + "action_id" : 87, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.downlink_sessions", + "id" : 26, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 198, + "column" : 10, + "source_fragment" : "downlink_sessions" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "ue_addr", + "target" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 100000, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [53, 54, 55, 52, 51], + "actions" : ["FabricIngress.upf.set_downlink_session", "FabricIngress.upf.set_downlink_session_buf", "FabricIngress.upf.set_downlink_session_buf_drop", "FabricIngress.upf.set_downlink_session_drop", "FabricIngress.upf.set_downlink_session_miss"], + "base_default_next" : "FabricIngress.upf.applications", + "next_tables" : { + "FabricIngress.upf.set_downlink_session" : "FabricIngress.upf.applications", + "FabricIngress.upf.set_downlink_session_buf" : "FabricIngress.upf.applications", + "FabricIngress.upf.set_downlink_session_buf_drop" : "FabricIngress.upf.applications", + "FabricIngress.upf.set_downlink_session_drop" : "FabricIngress.upf.applications", + "FabricIngress.upf.set_downlink_session_miss" : "FabricIngress.upf.applications" + }, + "default_entry" : { + "action_id" : 51, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf424", + "id" : 27, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 424, + "column" : 34, + "source_fragment" : "= fabric_md.lkp.ipv4_src; ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [88], + "actions" : ["upf424"], + "base_default_next" : "FabricIngress.upf.downlink_sessions", + "next_tables" : { + "upf424" : "FabricIngress.upf.downlink_sessions" + }, + "default_entry" : { + "action_id" : 88, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.applications", + "id" : 28, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 337, + "column" : 10, + "source_fragment" : "applications" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "slice_id", + "target" : ["scalars", "userMetadata._ingress_upf_slice_id30"], + "mask" : null + }, + { + "match_type" : "lpm", + "name" : "app_ipv4_addr", + "target" : ["scalars", "upf_app_ipv4_addr"], + "mask" : null + }, + { + "match_type" : "range", + "name" : "app_l4_port", + "target" : ["scalars", "upf_app_l4_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "app_ip_proto", + "target" : ["scalars", "upf_app_ip_proto"], + "mask" : null + } + ], + "match_type" : "range", + "type" : "simple", + "max_size" : 5, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [64, 5], + "actions" : ["FabricIngress.upf.set_app_id", "nop"], + "base_default_next" : "node_47", + "next_tables" : { + "FabricIngress.upf.set_app_id" : "node_47", + "nop" : "node_47" + }, + "default_entry" : { + "action_id" : 5, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.uplink_terminations", + "id" : 29, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 280, + "column" : 10, + "source_fragment" : "uplink_terminations" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "ue_session_id", + "target" : ["scalars", "upf_ue_session_id"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "app_id", + "target" : ["scalars", "upf_internal_app_id"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 100000, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [61, 59, 57], + "actions" : ["FabricIngress.upf.app_fwd", "FabricIngress.upf.uplink_drop", "FabricIngress.upf.uplink_drop_miss"], + "base_default_next" : "FabricIngress.upf.uplink_recirc_rules", + "next_tables" : { + "FabricIngress.upf.app_fwd" : "FabricIngress.upf.uplink_recirc_rules", + "FabricIngress.upf.uplink_drop" : "FabricIngress.upf.uplink_recirc_rules", + "FabricIngress.upf.uplink_drop_miss" : "FabricIngress.upf.uplink_recirc_rules" + }, + "default_entry" : { + "action_id" : 57, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.uplink_recirc_rules", + "id" : 30, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 387, + "column" : 10, + "source_fragment" : "uplink_recirc_rules" + }, + "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", + "type" : "simple", + "max_size" : 64, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [65, 66, 67], + "actions" : ["FabricIngress.upf.recirc_allow", "FabricIngress.upf.recirc_deny", "FabricIngress.upf.recirc_miss"], + "base_default_next" : "tbl_upf445", + "next_tables" : { + "FabricIngress.upf.recirc_allow" : "tbl_upf445", + "FabricIngress.upf.recirc_deny" : "tbl_upf445", + "FabricIngress.upf.recirc_miss" : "tbl_upf445" + }, + "default_entry" : { + "action_id" : 67, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.downlink_terminations", + "id" : 31, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 295, + "column" : 10, + "source_fragment" : "downlink_terminations" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "ue_session_id", + "target" : ["scalars", "upf_ue_session_id"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "app_id", + "target" : ["scalars", "upf_internal_app_id"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 100000, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [62, 60, 58], + "actions" : ["FabricIngress.upf.downlink_fwd_encap", "FabricIngress.upf.downlink_drop", "FabricIngress.upf.downlink_drop_miss"], + "base_default_next" : "tbl_upf445", + "next_tables" : { + "FabricIngress.upf.downlink_fwd_encap" : "tbl_upf445", + "FabricIngress.upf.downlink_drop" : "tbl_upf445", + "FabricIngress.upf.downlink_drop_miss" : "tbl_upf445" + }, + "default_entry" : { + "action_id" : 58, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf443", + "id" : 32, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 443, + "column" : 58, + "source_fragment" : "=" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [89], + "actions" : ["upf443"], + "base_default_next" : "tbl_upf445", + "next_tables" : { + "upf443" : "tbl_upf445" + }, + "default_entry" : { + "action_id" : 89, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf445", + "id" : 33, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 445, + "column" : 12, + "source_fragment" : "app_meter.execute_meter((bit<32>) app_meter_idx_internal, fabric_md.upf_meter_color)" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [91], + "actions" : ["upf445"], + "base_default_next" : "node_54", + "next_tables" : { + "upf445" : "node_54" + }, + "default_entry" : { + "action_id" : 91, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf448", + "id" : 34, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 448, + "column" : 16, + "source_fragment" : "session_meter.execute_meter((bit<32>) session_meter_idx_internal, fabric_md.upf_meter_color)" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [90], + "actions" : ["upf448"], + "base_default_next" : "FabricIngress.upf.ig_tunnel_peers", + "next_tables" : { + "upf448" : "FabricIngress.upf.ig_tunnel_peers" + }, + "default_entry" : { + "action_id" : 90, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.ig_tunnel_peers", + "id" : 35, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 317, + "column" : 10, + "source_fragment" : "ig_tunnel_peers" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "tun_peer_id", + "target" : ["_ingress_bridged4", "_upf_tun_peer_id13"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 256, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [63, 4], + "actions" : ["FabricIngress.upf.set_routing_ipv4_dst", "nop"], + "base_default_next" : "node_57", + "next_tables" : { + "FabricIngress.upf.set_routing_ipv4_dst" : "node_57", + "nop" : "node_57" + }, + "default_entry" : { + "action_id" : 4, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf461", + "id" : 36, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 461, + "column" : 16, + "source_fragment" : "terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id)" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [92], + "actions" : ["upf461"], + "base_default_next" : "node_59", + "next_tables" : { + "upf461" : "node_59" + }, + "default_entry" : { + "action_id" : 92, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.forwarding.bridging", + "id" : 37, + "source_info" : { + "filename" : "/home/ubuntu/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" : [18, 14], + "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" : 14, + "action_const" : true, + "action_data" : ["0x59"], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.forwarding.mpls", + "id" : 38, + "source_info" : { + "filename" : "/home/ubuntu/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" : [19, 15], + "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" : 15, + "action_const" : true, + "action_data" : ["0x81"], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.forwarding.routing_v4", + "id" : 39, + "source_info" : { + "filename" : "/home/ubuntu/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" : [20, 21, 22, 16], + "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" : 16, + "action_const" : false, + "action_data" : ["0x1d"], + "action_entry_const" : false + } + }, + { + "name" : "FabricIngress.forwarding.routing_v6", + "id" : 40, + "source_info" : { + "filename" : "/home/ubuntu/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" : [23, 24, 17], + "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" : 17, + "action_const" : false, + "action_data" : ["0x1d"], + "action_entry_const" : false + } + }, + { + "name" : "tbl_hasher17", + "id" : 41, + "source_info" : { + "filename" : "/home/ubuntu/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" : [99], + "actions" : ["hasher17"], + "base_default_next" : "node_69", + "next_tables" : { + "hasher17" : "node_69" + }, + "default_entry" : { + "action_id" : 99, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_hasher28", + "id" : 42, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 28, + "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" : [95], + "actions" : ["hasher28"], + "base_default_next" : "node_76", + "next_tables" : { + "hasher28" : "node_76" + }, + "default_entry" : { + "action_id" : 95, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_hasher39", + "id" : 43, + "source_info" : { + "filename" : "/home/ubuntu/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" : [96], + "actions" : ["hasher39"], + "base_default_next" : "node_76", + "next_tables" : { + "hasher39" : "node_76" + }, + "default_entry" : { + "action_id" : 96, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_hasher50", + "id" : 44, + "source_info" : { + "filename" : "/home/ubuntu/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" : [97], + "actions" : ["hasher50"], + "base_default_next" : "node_76", + "next_tables" : { + "hasher50" : "node_76" + }, + "default_entry" : { + "action_id" : 97, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_hasher66", + "id" : 45, + "source_info" : { + "filename" : "/home/ubuntu/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" : [98], + "actions" : ["hasher66"], + "base_default_next" : "node_76", + "next_tables" : { + "hasher66" : "node_76" + }, + "default_entry" : { + "action_id" : 98, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.pre_next.next_mpls", + "id" : 46, + "source_info" : { + "filename" : "/home/ubuntu/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" : [25, 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" : 47, + "source_info" : { + "filename" : "/home/ubuntu/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" : [26, 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" : 48, + "source_info" : { + "filename" : "/home/ubuntu/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" : [27, 29, 28, 30, 31, 32], + "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_80", + "next_tables" : { + "FabricIngress.acl.set_next_id_acl" : "node_80", + "FabricIngress.acl.punt_to_cpu" : "node_80", + "FabricIngress.acl.copy_to_cpu" : "node_80", + "FabricIngress.acl.drop" : "node_80", + "FabricIngress.acl.set_output_port" : "node_80", + "FabricIngress.acl.nop_acl" : "node_80" + }, + "default_entry" : { + "action_id" : 32, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.next.hashed", + "id" : 49, + "source_info" : { + "filename" : "/home/ubuntu/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" : [33, 34, 2], + "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" : 50, + "source_info" : { + "filename" : "/home/ubuntu/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" : [35, 36], + "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" : 36, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.qos.set_slice_tc", + "id" : 51, + "source_info" : { + "filename" : "/home/ubuntu/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" : [40, 41, 7], + "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" : 7, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + }, + "entries" : [ + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 40, + "action_data" : [] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 41, + "action_data" : [] + }, + "priority" : 2 + } + ] + }, + { + "name" : "FabricIngress.qos.default_tc", + "id" : 52, + "source_info" : { + "filename" : "/home/ubuntu/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" : [44, 3], + "actions" : ["FabricIngress.qos.set_default_tc", "nop"], + "base_default_next" : "node_85", + "next_tables" : { + "FabricIngress.qos.set_default_tc" : "node_85", + "nop" : "node_85" + }, + "default_entry" : { + "action_id" : 3, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing174", + "id" : 53, + "source_info" : { + "filename" : "/home/ubuntu/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" : [100], + "actions" : ["slicing174"], + "base_default_next" : "FabricIngress.qos.queues", + "next_tables" : { + "slicing174" : "FabricIngress.qos.queues" + }, + "default_entry" : { + "action_id" : 100, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing177", + "id" : 54, + "source_info" : { + "filename" : "/home/ubuntu/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" : [101], + "actions" : ["slicing177"], + "base_default_next" : "FabricIngress.qos.queues", + "next_tables" : { + "slicing177" : "FabricIngress.qos.queues" + }, + "default_entry" : { + "action_id" : 101, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.qos.queues", + "id" : 55, + "source_info" : { + "filename" : "/home/ubuntu/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" : [42, 43], + "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" : 42, + "action_const" : true, + "action_data" : ["0x0"], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int112", + "id" : 56, + "source_info" : { + "filename" : "/home/ubuntu/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" : [102], + "actions" : ["int112"], + "base_default_next" : "FabricIngress.int_ingress.drop_report", + "next_tables" : { + "int112" : "FabricIngress.int_ingress.drop_report" + }, + "default_entry" : { + "action_id" : 102, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.int_ingress.drop_report", + "id" : 57, + "source_info" : { + "filename" : "/home/ubuntu/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_type21"], + "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" : [71, 6], + "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" : 6, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + }, + "entries" : [ + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 71, + "action_data" : [] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 71, + "action_data" : [] + }, + "priority" : 2 + }, + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 71, + "action_data" : [] + }, + "priority" : 3 + } + ] + }, + { + "name" : "tbl_fabric_v1model106", + "id" : 58, + "source_info" : { + "filename" : "/home/ubuntu/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" : [104], + "actions" : ["fabric_v1model106"], + "base_default_next" : "node_92", + "next_tables" : { + "fabric_v1model106" : "node_92" + }, + "default_entry" : { + "action_id" : 104, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_fabric_v1model110", + "id" : 59, + "source_info" : { + "filename" : "/home/ubuntu/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" : [103], + "actions" : ["fabric_v1model110"], + "base_default_next" : null, + "next_tables" : { + "fabric_v1model110" : null + }, + "default_entry" : { + "action_id" : 103, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + } + ], + "action_profiles" : [ + { + "name" : "FabricIngress.next.hashed_profile", + "id" : 0, + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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/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/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 84, + "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" : "tbl_upf25", + "true_next" : "node_59" + }, + { + "name" : "node_37", + "id" : 13, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 406, + "column" : 12, + "source_fragment" : "hdr.ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_ingress_ipv47", "$valid$"] + } + } + }, + "true_next" : "FabricIngress.upf.interfaces", + "false_next" : "node_59" + }, + { + "name" : "node_40", + "id" : 14, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 413, + "column" : 24, + "source_fragment" : "fabric_md.bridged.base.encap_presence != EncapPresence.NONE" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_encap_presence7"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + }, + "true_next" : "FabricIngress.upf.uplink_sessions", + "false_next" : "FabricIngress.upf.applications" + }, + { + "name" : "node_47", + "id" : 15, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 433, + "column" : 16, + "source_fragment" : "sess_hit" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + } + } + }, + "true_next" : "node_48", + "false_next" : "tbl_upf443" + }, + { + "name" : "node_48", + "id" : 16, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 434, + "column" : 20, + "source_fragment" : "is_uplink" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "upf_is_uplink"] + } + } + }, + "true_next" : "FabricIngress.upf.uplink_terminations", + "false_next" : "FabricIngress.upf.downlink_terminations" + }, + { + "name" : "node_54", + "id" : 17, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 446, + "column" : 16, + "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_upf448", + "false_next" : "FabricIngress.upf.ig_tunnel_peers" + }, + { + "name" : "node_57", + "id" : 18, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 451, + "column" : 16, + "source_fragment" : "term_hit" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "upf_term_hit"] + } + } + }, + "true_next" : "tbl_upf461", + "false_next" : "node_59" + }, + { + "name" : "node_59", + "id" : 19, + "source_info" : { + "filename" : "/home/ubuntu/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_60", + "true_next" : "tbl_hasher17" + }, + { + "name" : "node_60", + "id" : 20, + "source_info" : { + "filename" : "/home/ubuntu/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_62" + }, + { + "name" : "node_62", + "id" : 21, + "source_info" : { + "filename" : "/home/ubuntu/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_64" + }, + { + "name" : "node_64", + "id" : 22, + "source_info" : { + "filename" : "/home/ubuntu/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_66" + }, + { + "name" : "node_66", + "id" : 23, + "source_info" : { + "filename" : "/home/ubuntu/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_69", + "id" : 24, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 27, + "column" : 12, + "source_fragment" : "fabric_md.bridged" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_needs_gtpu_encap16"] + } + } + }, + "true_next" : "tbl_hasher28", + "false_next" : "node_71" + }, + { + "name" : "node_71", + "id" : 25, + "source_info" : { + "filename" : "/home/ubuntu/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_73" + }, + { + "name" : "node_73", + "id" : 26, + "source_info" : { + "filename" : "/home/ubuntu/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_76", + "id" : 27, + "source_info" : { + "filename" : "/home/ubuntu/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_80", + "id" : 28, + "source_info" : { + "filename" : "/home/ubuntu/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.hashed", + "true_next" : "FabricIngress.qos.set_slice_tc" + }, + { + "name" : "node_85", + "id" : 29, + "source_info" : { + "filename" : "/home/ubuntu/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_92", + "id" : 30, + "source_info" : { + "filename" : "/home/ubuntu/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/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" : 60, + "source_info" : { + "filename" : "/home/ubuntu/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" : [138], + "actions" : ["fabric_v1model133"], + "base_default_next" : "node_97", + "next_tables" : { + "fabric_v1model133" : "node_97" + }, + "default_entry" : { + "action_id" : 138, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_fabric_v1model136", + "id" : 61, + "source_info" : { + "filename" : "/home/ubuntu/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" : [137], + "actions" : ["fabric_v1model136"], + "base_default_next" : "node_99", + "next_tables" : { + "fabric_v1model136" : "node_99" + }, + "default_entry" : { + "action_id" : 137, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator14", + "id" : 62, + "source_info" : { + "filename" : "/home/ubuntu/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" : [140], + "actions" : ["int_tna_parser_emulator14"], + "base_default_next" : "node_101", + "next_tables" : { + "int_tna_parser_emulator14" : "node_101" + }, + "default_entry" : { + "action_id" : 140, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator148", + "id" : 63, + "source_info" : { + "filename" : "/home/ubuntu/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" : [139], + "actions" : ["int_tna_parser_emulator148"], + "base_default_next" : "node_103", + "next_tables" : { + "int_tna_parser_emulator148" : "node_103" + }, + "default_entry" : { + "action_id" : 139, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_parser_emulator_parse_int_ingress_drop", + "id" : 64, + "source_info" : { + "filename" : "/home/ubuntu/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" : [124], + "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" : 124, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator166", + "id" : 65, + "source_info" : { + "filename" : "/home/ubuntu/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" : [141], + "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" : 141, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_parser_emulator_parse_int_report_mirror", + "id" : 66, + "source_info" : { + "filename" : "/home/ubuntu/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" : [126], + "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" : 126, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator169", + "id" : 67, + "source_info" : { + "filename" : "/home/ubuntu/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" : [142], + "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" : 142, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator173", + "id" : 68, + "source_info" : { + "filename" : "/home/ubuntu/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" : [143], + "actions" : ["int_tna_parser_emulator173"], + "base_default_next" : "node_109", + "next_tables" : { + "int_tna_parser_emulator173" : "node_109" + }, + "default_entry" : { + "action_id" : 143, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator14_0", + "id" : 69, + "source_info" : { + "filename" : "/home/ubuntu/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" : [145], + "actions" : ["int_tna_parser_emulator14_0"], + "base_default_next" : "node_111", + "next_tables" : { + "int_tna_parser_emulator14_0" : "node_111" + }, + "default_entry" : { + "action_id" : 145, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator148_0", + "id" : 70, + "source_info" : { + "filename" : "/home/ubuntu/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" : [144], + "actions" : ["int_tna_parser_emulator148_0"], + "base_default_next" : "node_113", + "next_tables" : { + "int_tna_parser_emulator148_0" : "node_113" + }, + "default_entry" : { + "action_id" : 144, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_parser_emulator_parse_int_ingress_drop_0", + "id" : 71, + "source_info" : { + "filename" : "/home/ubuntu/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" : [125], + "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" : 125, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator166_0", + "id" : 72, + "source_info" : { + "filename" : "/home/ubuntu/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" : [146], + "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" : 146, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_parser_emulator_parse_int_report_mirror_0", + "id" : 73, + "source_info" : { + "filename" : "/home/ubuntu/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" : [127], + "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" : 127, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator169_0", + "id" : 74, + "source_info" : { + "filename" : "/home/ubuntu/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" : [147], + "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" : 147, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator173_0", + "id" : 75, + "source_info" : { + "filename" : "/home/ubuntu/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" : [148], + "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" : 148, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.pkt_io_egress.switch_info", + "id" : 76, + "source_info" : { + "filename" : "/home/ubuntu/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" : [113, 105], + "actions" : ["FabricEgress.pkt_io_egress.set_switch_info", "nop"], + "base_default_next" : "node_120", + "next_tables" : { + "FabricEgress.pkt_io_egress.set_switch_info" : "node_120", + "nop" : "node_120" + }, + "default_entry" : { + "action_id" : 105, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_packetio51", + "id" : 77, + "source_info" : { + "filename" : "/home/ubuntu/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" : [149], + "actions" : ["packetio51"], + "base_default_next" : "node_122", + "next_tables" : { + "packetio51" : "node_122" + }, + "default_entry" : { + "action_id" : 149, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_packetio60", + "id" : 78, + "source_info" : { + "filename" : "/home/ubuntu/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" : [150], + "actions" : ["packetio60"], + "base_default_next" : "node_124", + "next_tables" : { + "packetio60" : "node_124" + }, + "default_entry" : { + "action_id" : 150, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.stats.flows", + "id" : 79, + "source_info" : { + "filename" : "/home/ubuntu/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" : [112], + "actions" : ["FabricEgress.stats.count"], + "base_default_next" : "node_126", + "next_tables" : { + "FabricEgress.stats.count" : "node_126" + }, + "default_entry" : { + "action_id" : 112, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_next283", + "id" : 80, + "source_info" : { + "filename" : "/home/ubuntu/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" : [151], + "actions" : ["next283"], + "base_default_next" : "node_128", + "next_tables" : { + "next283" : "node_128" + }, + "default_entry" : { + "action_id" : 151, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_egress_next_pop_mpls_if_present", + "id" : 81, + "source_info" : { + "filename" : "/home/ubuntu/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" : [114], + "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], + "base_default_next" : "node_132", + "next_tables" : { + "FabricEgress.egress_next.pop_mpls_if_present" : "node_132" + }, + "default_entry" : { + "action_id" : 114, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_egress_next_set_mpls", + "id" : 82, + "source_info" : { + "filename" : "/home/ubuntu/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" : [115], + "actions" : ["FabricEgress.egress_next.set_mpls"], + "base_default_next" : "node_132", + "next_tables" : { + "FabricEgress.egress_next.set_mpls" : "node_132" + }, + "default_entry" : { + "action_id" : 115, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.egress_next.egress_vlan", + "id" : 83, + "source_info" : { + "filename" : "/home/ubuntu/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" : [116, 117, 118], + "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"], + "base_default_next" : "node_134", + "next_tables" : { + "FabricEgress.egress_next.push_vlan" : "node_134", + "FabricEgress.egress_next.pop_vlan" : "node_134", + "FabricEgress.egress_next.drop" : "node_134" + }, + "default_entry" : { + "action_id" : 118, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_next323", + "id" : 84, + "source_info" : { + "filename" : "/home/ubuntu/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" : [153], + "actions" : ["next323"], + "base_default_next" : "node_136", + "next_tables" : { + "next323" : "node_136" + }, + "default_entry" : { + "action_id" : 153, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_next325", + "id" : 85, + "source_info" : { + "filename" : "/home/ubuntu/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" : [152], + "actions" : ["next325"], + "base_default_next" : "node_148", + "next_tables" : { + "next325" : "node_148" + }, + "default_entry" : { + "action_id" : 152, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_next333", + "id" : 86, + "source_info" : { + "filename" : "/home/ubuntu/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" : [154], + "actions" : ["next333"], + "base_default_next" : "node_141", + "next_tables" : { + "next333" : "node_141" + }, + "default_entry" : { + "action_id" : 154, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_next336", + "id" : 87, + "source_info" : { + "filename" : "/home/ubuntu/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" : [155], + "actions" : ["next336"], + "base_default_next" : "node_148", + "next_tables" : { + "next336" : "node_148" + }, + "default_entry" : { + "action_id" : 155, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_next343", + "id" : 88, + "source_info" : { + "filename" : "/home/ubuntu/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" : [156], + "actions" : ["next343"], + "base_default_next" : "node_146", + "next_tables" : { + "next343" : "node_146" + }, + "default_entry" : { + "action_id" : 156, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_next346", + "id" : 89, + "source_info" : { + "filename" : "/home/ubuntu/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" : [157], + "actions" : ["next346"], + "base_default_next" : "node_148", + "next_tables" : { + "next346" : "node_148" + }, + "default_entry" : { + "action_id" : 157, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf610", + "id" : 90, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 610, + "column" : 20, + "source_fragment" : "hdr.inner_udp.setValid(); ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [158], + "actions" : ["upf610"], + "base_default_next" : "node_152", + "next_tables" : { + "upf610" : "node_152" + }, + "default_entry" : { + "action_id" : 158, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf615", + "id" : 91, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 615, + "column" : 20, + "source_fragment" : "hdr.inner_tcp.setValid(); ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [159], + "actions" : ["upf615"], + "base_default_next" : "node_154", + "next_tables" : { + "upf615" : "node_154" + }, + "default_entry" : { + "action_id" : 159, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf620", + "id" : 92, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 620, + "column" : 20, + "source_fragment" : "hdr.inner_icmp.setValid(); ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [160], + "actions" : ["upf620"], + "base_default_next" : "FabricEgress.upf.gtpu_encap", + "next_tables" : { + "upf620" : "FabricEgress.upf.gtpu_encap" + }, + "default_entry" : { + "action_id" : 160, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.upf.gtpu_encap", + "id" : 93, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 597, + "column" : 10, + "source_fragment" : "gtpu_encap" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [122, 123], + "actions" : ["FabricEgress.upf.gtpu_only", "FabricEgress.upf.gtpu_with_psc"], + "base_default_next" : "FabricEgress.upf.eg_tunnel_peers", + "next_tables" : { + "FabricEgress.upf.gtpu_only" : "FabricEgress.upf.eg_tunnel_peers", + "FabricEgress.upf.gtpu_with_psc" : "FabricEgress.upf.eg_tunnel_peers" + }, + "default_entry" : { + "action_id" : 122, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "FabricEgress.upf.eg_tunnel_peers", + "id" : 94, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 491, + "column" : 10, + "source_fragment" : "eg_tunnel_peers" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "tun_peer_id", + "target" : ["_egress_bridged36", "_upf_tun_peer_id13"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 256, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [121, 107], + "actions" : ["FabricEgress.upf.load_tunnel_params", "nop"], + "base_default_next" : "node_158", + "next_tables" : { + "FabricEgress.upf.load_tunnel_params" : "node_158", + "nop" : "node_158" + }, + "default_entry" : { + "action_id" : 107, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf628", + "id" : 95, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 628, + "column" : 16, + "source_fragment" : "terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id)" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [161], + "actions" : ["upf628"], + "base_default_next" : "tbl_int128", + "next_tables" : { + "upf628" : "tbl_int128" + }, + "default_entry" : { + "action_id" : 161, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int128", + "id" : 96, + "source_info" : { + "filename" : "/home/ubuntu/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" : [162], + "actions" : ["int128"], + "base_default_next" : "FabricEgress.int_egress.queue_latency_thresholds", + "next_tables" : { + "int128" : "FabricEgress.int_egress.queue_latency_thresholds" + }, + "default_entry" : { + "action_id" : 162, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.int_egress.queue_latency_thresholds", + "id" : 97, + "source_info" : { + "filename" : "/home/ubuntu/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" : [128, 129, 108], + "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" : 108, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "FabricEgress.int_egress.config", + "id" : 98, + "source_info" : { + "filename" : "/home/ubuntu/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" : [130], + "actions" : ["FabricEgress.int_egress.set_config"], + "base_default_next" : "tbl_int373", + "next_tables" : { + "FabricEgress.int_egress.set_config" : "tbl_int373" + }, + "default_entry" : { + "action_id" : 130, + "action_const" : false, + "action_data" : ["0xffffff00", "0xffffc0000000"], + "action_entry_const" : false + } + }, + { + "name" : "tbl_int373", + "id" : 99, + "source_info" : { + "filename" : "/home/ubuntu/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" : [164], + "actions" : ["int373"], + "base_default_next" : "node_164", + "next_tables" : { + "int373" : "node_164" + }, + "default_entry" : { + "action_id" : 164, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.int_egress.report", + "id" : 100, + "source_info" : { + "filename" : "/home/ubuntu/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" : [131, 132, 133, 134, 109], + "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" : 109, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "FabricEgress.int_egress.int_metadata", + "id" : 101, + "source_info" : { + "filename" : "/home/ubuntu/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_type21"], + "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_report43"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 2, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [135, 110], + "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" : 110, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + }, + "entries" : [ + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 135, + "action_data" : ["0x1"] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 135, + "action_data" : ["0x4"] + }, + "priority" : 2 + } + ] + }, + { + "name" : "tbl_int383", + "id" : 102, + "source_info" : { + "filename" : "/home/ubuntu/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" : [163], + "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" : 163, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.int_egress.adjust_int_report_hdr_length", + "id" : 103, + "source_info" : { + "filename" : "/home/ubuntu/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_type26"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 2, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [111, 136], + "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" : 111, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + }, + "entries" : [ + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 136, + "action_data" : ["0xfff2", "0xffde"] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 136, + "action_data" : ["0xffee", "0xffda"] + }, + "priority" : 2 + } + ] + }, + { + "name" : "tbl_slicing189", + "id" : 104, + "source_info" : { + "filename" : "/home/ubuntu/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" : [166], + "actions" : ["slicing189"], + "base_default_next" : "FabricEgress.dscp_rewriter.rewriter", + "next_tables" : { + "slicing189" : "FabricEgress.dscp_rewriter.rewriter" + }, + "default_entry" : { + "action_id" : 166, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.dscp_rewriter.rewriter", + "id" : 105, + "source_info" : { + "filename" : "/home/ubuntu/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" : [119, 120, 106], + "actions" : ["FabricEgress.dscp_rewriter.rewrite", "FabricEgress.dscp_rewriter.clear", "nop"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "node_171", + "__MISS__" : "node_173" + }, + "default_entry" : { + "action_id" : 106, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing217", + "id" : 106, + "source_info" : { + "filename" : "/home/ubuntu/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" : [165], + "actions" : ["slicing217"], + "base_default_next" : "node_173", + "next_tables" : { + "slicing217" : "node_173" + }, + "default_entry" : { + "action_id" : 165, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_fabric_v1model170", + "id" : 107, + "source_info" : { + "filename" : "/home/ubuntu/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" : [167], + "actions" : ["fabric_v1model170"], + "base_default_next" : "node_175", + "next_tables" : { + "fabric_v1model170" : "node_175" + }, + "default_entry" : { + "action_id" : 167, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_fabric_v1model174", + "id" : 108, + "source_info" : { + "filename" : "/home/ubuntu/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" : [168], + "actions" : ["fabric_v1model174"], + "base_default_next" : null, + "next_tables" : { + "fabric_v1model174" : null + }, + "default_entry" : { + "action_id" : 168, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + } + ], + "action_profiles" : [], + "conditionals" : [ + { + "name" : "node_97", + "id" : 31, + "source_info" : { + "filename" : "/home/ubuntu/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_99" + }, + { + "name" : "node_99", + "id" : 32, + "source_info" : { + "filename" : "/home/ubuntu/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_109" + }, + { + "name" : "node_101", + "id" : 33, + "source_info" : { + "filename" : "/home/ubuntu/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_103" + }, + { + "name" : "node_103", + "id" : 34, + "source_info" : { + "filename" : "/home/ubuntu/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_type47"] + }, + "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_109", + "id" : 35, + "source_info" : { + "filename" : "/home/ubuntu/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_type21"] + }, + "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_111", + "id" : 36, + "source_info" : { + "filename" : "/home/ubuntu/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_113" + }, + { + "name" : "node_113", + "id" : 37, + "source_info" : { + "filename" : "/home/ubuntu/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_type21"] + }, + "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_120", + "id" : 38, + "source_info" : { + "filename" : "/home/ubuntu/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_122" + }, + { + "name" : "node_122", + "id" : 39, + "source_info" : { + "filename" : "/home/ubuntu/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_124" + }, + { + "name" : "node_124", + "id" : 40, + "source_info" : { + "filename" : "/home/ubuntu/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_126" + }, + { + "name" : "node_126", + "id" : 41, + "source_info" : { + "filename" : "/home/ubuntu/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_128" + }, + { + "name" : "node_128", + "id" : 42, + "source_info" : { + "filename" : "/home/ubuntu/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_129", + "false_next" : "tbl_egress_next_set_mpls" + }, + { + "name" : "node_129", + "id" : 43, + "source_info" : { + "filename" : "/home/ubuntu/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_132" + }, + { + "name" : "node_132", + "id" : 44, + "source_info" : { + "filename" : "/home/ubuntu/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_recirc45"] + } + } + }, + "false_next" : "FabricEgress.egress_next.egress_vlan", + "true_next" : "node_134" + }, + { + "name" : "node_134", + "id" : 45, + "source_info" : { + "filename" : "/home/ubuntu/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_138" + }, + { + "name" : "node_136", + "id" : 46, + "source_info" : { + "filename" : "/home/ubuntu/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" : "node_148" + }, + { + "name" : "node_138", + "id" : 47, + "source_info" : { + "filename" : "/home/ubuntu/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_139", + "false_next" : "node_143" + }, + { + "name" : "node_139", + "id" : 48, + "source_info" : { + "filename" : "/home/ubuntu/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_141" + }, + { + "name" : "node_141", + "id" : 49, + "source_info" : { + "filename" : "/home/ubuntu/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" : "node_148" + }, + { + "name" : "node_143", + "id" : 50, + "source_info" : { + "filename" : "/home/ubuntu/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_144", + "false_next" : "node_148" + }, + { + "name" : "node_144", + "id" : 51, + "source_info" : { + "filename" : "/home/ubuntu/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_146" + }, + { + "name" : "node_146", + "id" : 52, + "source_info" : { + "filename" : "/home/ubuntu/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" : "node_148" + }, + { + "name" : "node_148", + "id" : 53, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 607, + "column" : 13, + "source_fragment" : "fabric_md.bridged" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_egress_bridged36", "_upf_skip_upf17"] + } + } + }, + "false_next" : "node_149", + "true_next" : "tbl_int128" + }, + { + "name" : "node_149", + "id" : 54, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 608, + "column" : 16, + "source_fragment" : "fabric_md.bridged" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_egress_bridged36", "_upf_needs_gtpu_encap16"] + } + } + }, + "true_next" : "node_150", + "false_next" : "node_158" + }, + { + "name" : "node_150", + "id" : 55, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 609, + "column" : 20, + "source_fragment" : "hdr.udp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_ingress_udp10", "$valid$"] + } + } + }, + "true_next" : "tbl_upf610", + "false_next" : "node_152" + }, + { + "name" : "node_152", + "id" : 56, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 614, + "column" : 20, + "source_fragment" : "hdr.tcp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_ingress_tcp9", "$valid$"] + } + } + }, + "true_next" : "tbl_upf615", + "false_next" : "node_154" + }, + { + "name" : "node_154", + "id" : 57, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 619, + "column" : 20, + "source_fragment" : "hdr.icmp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_ingress_icmp11", "$valid$"] + } + } + }, + "true_next" : "tbl_upf620", + "false_next" : "FabricEgress.upf.gtpu_encap" + }, + { + "name" : "node_158", + "id" : 58, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 627, + "column" : 17, + "source_fragment" : "fabric_md.bridged" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_egress_bridged36", "_upf_skip_egress_upf_ctr18"] + } + } + }, + "false_next" : "tbl_upf628", + "true_next" : "tbl_int128" + }, + { + "name" : "node_164", + "id" : 59, + "source_info" : { + "filename" : "/home/ubuntu/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_171", + "id" : 60, + "source_info" : { + "filename" : "/home/ubuntu/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_173" + }, + { + "name" : "node_173", + "id" : 61, + "source_info" : { + "filename" : "/home/ubuntu/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_175" + }, + { + "name" : "node_175", + "id" : 62, + "source_info" : { + "filename" : "/home/ubuntu/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/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_3", + "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/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_4", + "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/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_5", + "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/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_6", + "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/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_7", + "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/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-sd-fabric-svc-connectivity/p4src/p4info.txt b/src/tests/p4-sd-fabric-svc-connectivity/p4src/p4info.txt new file mode 100644 index 0000000000000000000000000000000000000000..d502367c0c2acb101b7ea4c4df11837b0d8c3271 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/p4src/p4info.txt @@ -0,0 +1,2482 @@ +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: 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: 41155994 + name: "FabricIngress.upf.interfaces" + alias: "interfaces" + } + match_fields { + id: 1 + name: "ipv4_dst_addr" + bitwidth: 32 + match_type: LPM + } + match_fields { + id: 2 + name: "gtpu_is_valid" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 30131500 + } + action_refs { + id: 19786139 + } + action_refs { + id: 19466514 + } + action_refs { + id: 30204657 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 30204657 + size: 64 +} +tables { + preamble { + id: 37952203 + name: "FabricIngress.upf.downlink_sessions" + alias: "downlink_sessions" + } + match_fields { + id: 1 + name: "ue_addr" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16984383 + } + action_refs { + id: 31195396 + } + action_refs { + id: 21581660 + } + action_refs { + id: 24509779 + } + action_refs { + id: 32013192 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 32013192 + size: 100000 +} +tables { + preamble { + id: 45463032 + name: "FabricIngress.upf.uplink_sessions" + alias: "uplink_sessions" + } + match_fields { + id: 1 + name: "tunnel_ipv4_dst" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "teid" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 31219743 + } + action_refs { + id: 24328070 + } + action_refs { + id: 20368148 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 20368148 + size: 100000 +} +tables { + preamble { + id: 50169666 + name: "FabricIngress.upf.uplink_terminations" + alias: "uplink_terminations" + } + match_fields { + id: 1 + name: "ue_session_id" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "app_id" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 25805419 + } + action_refs { + id: 28764209 + } + action_refs { + id: 20624836 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 20624836 + size: 100000 +} +tables { + preamble { + id: 35221941 + name: "FabricIngress.upf.downlink_terminations" + alias: "downlink_terminations" + } + match_fields { + id: 1 + name: "ue_session_id" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "app_id" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 23536134 + } + action_refs { + id: 30742995 + } + action_refs { + id: 26608757 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 26608757 + size: 100000 +} +tables { + preamble { + id: 48831175 + name: "FabricIngress.upf.ig_tunnel_peers" + alias: "ig_tunnel_peers" + } + match_fields { + id: 1 + name: "tun_peer_id" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 26011763 + } + action_refs { + id: 28485346 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 28485346 + size: 256 +} +tables { + preamble { + id: 46184415 + name: "FabricIngress.upf.applications" + alias: "applications" + } + match_fields { + id: 1 + name: "slice_id" + bitwidth: 4 + match_type: EXACT + } + match_fields { + id: 2 + name: "app_ipv4_addr" + bitwidth: 32 + match_type: LPM + } + match_fields { + id: 3 + name: "app_l4_port" + bitwidth: 16 + match_type: RANGE + } + match_fields { + id: 4 + name: "app_ip_proto" + bitwidth: 8 + match_type: TERNARY + } + action_refs { + id: 26631629 + } + action_refs { + id: 28485346 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 28485346 + size: 5 +} +tables { + preamble { + id: 34400315 + name: "FabricIngress.upf.uplink_recirc_rules" + alias: "uplink_recirc_rules" + } + match_fields { + id: 1 + name: "ipv4_src" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 2 + name: "ipv4_dst" + bitwidth: 32 + match_type: TERNARY + } + action_refs { + id: 28119063 + } + action_refs { + id: 19222227 + } + action_refs { + id: 29186084 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 29186084 + direct_resource_ids: 335275671 + size: 64 +} +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: 37756041 + name: "FabricEgress.upf.eg_tunnel_peers" + alias: "eg_tunnel_peers" + } + match_fields { + id: 1 + name: "tun_peer_id" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 28490145 + } + action_refs { + id: 28485346 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 28485346 + size: 256 +} +tables { + preamble { + id: 35202849 + name: "FabricEgress.upf.gtpu_encap" + alias: "gtpu_encap" + } + action_refs { + id: 18154440 + } + action_refs { + id: 25872588 + } + size: 1 +} +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: 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: 30131500 + name: "FabricIngress.upf.iface_access" + alias: "iface_access" + } + params { + id: 1 + name: "slice_id" + bitwidth: 4 + } +} +actions { + preamble { + id: 19786139 + name: "FabricIngress.upf.iface_core" + alias: "iface_core" + } + params { + id: 1 + name: "slice_id" + bitwidth: 4 + } +} +actions { + preamble { + id: 19466514 + name: "FabricIngress.upf.iface_dbuf" + alias: "iface_dbuf" + } + params { + id: 1 + name: "slice_id" + bitwidth: 4 + } +} +actions { + preamble { + id: 30204657 + name: "FabricIngress.upf.iface_miss" + alias: "iface_miss" + } +} +actions { + preamble { + id: 20368148 + name: "FabricIngress.upf.set_uplink_session_miss" + alias: "set_uplink_session_miss" + } +} +actions { + preamble { + id: 24328070 + name: "FabricIngress.upf.set_uplink_session_drop" + alias: "set_uplink_session_drop" + } +} +actions { + preamble { + id: 32013192 + name: "FabricIngress.upf.set_downlink_session_miss" + alias: "set_downlink_session_miss" + } +} +actions { + preamble { + id: 24509779 + name: "FabricIngress.upf.set_downlink_session_drop" + alias: "set_downlink_session_drop" + } +} +actions { + preamble { + id: 16984383 + name: "FabricIngress.upf.set_downlink_session" + alias: "set_downlink_session" + } + params { + id: 1 + name: "tun_peer_id" + bitwidth: 8 + } + params { + id: 2 + name: "session_meter_idx" + bitwidth: 15 + } +} +actions { + preamble { + id: 31195396 + name: "FabricIngress.upf.set_downlink_session_buf" + alias: "set_downlink_session_buf" + } + params { + id: 1 + name: "tun_peer_id" + bitwidth: 8 + } + params { + id: 2 + name: "session_meter_idx" + bitwidth: 15 + } +} +actions { + preamble { + id: 21581660 + name: "FabricIngress.upf.set_downlink_session_buf_drop" + alias: "set_downlink_session_buf_drop" + } +} +actions { + preamble { + id: 31219743 + name: "FabricIngress.upf.set_uplink_session" + alias: "set_uplink_session" + } + params { + id: 1 + name: "session_meter_idx" + bitwidth: 15 + } +} +actions { + preamble { + id: 20624836 + name: "FabricIngress.upf.uplink_drop_miss" + alias: "uplink_drop_miss" + } +} +actions { + preamble { + id: 26608757 + name: "FabricIngress.upf.downlink_drop_miss" + alias: "downlink_drop_miss" + } +} +actions { + preamble { + id: 28764209 + name: "FabricIngress.upf.uplink_drop" + alias: "uplink_drop" + } + params { + id: 1 + name: "ctr_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 30742995 + name: "FabricIngress.upf.downlink_drop" + alias: "downlink_drop" + } + params { + id: 1 + name: "ctr_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 25805419 + name: "FabricIngress.upf.app_fwd" + alias: "app_fwd" + } + params { + id: 1 + name: "ctr_id" + bitwidth: 12 + } + params { + id: 2 + name: "tc" + bitwidth: 2 + } + params { + id: 3 + name: "app_meter_idx" + bitwidth: 15 + } +} +actions { + preamble { + id: 23536134 + name: "FabricIngress.upf.downlink_fwd_encap" + alias: "downlink_fwd_encap" + } + params { + id: 1 + name: "ctr_id" + bitwidth: 12 + } + params { + id: 2 + name: "tc" + bitwidth: 2 + } + params { + id: 3 + name: "teid" + bitwidth: 32 + } + params { + id: 4 + name: "qfi" + bitwidth: 6 + } + params { + id: 5 + name: "app_meter_idx" + bitwidth: 15 + } +} +actions { + preamble { + id: 26011763 + name: "FabricIngress.upf.set_routing_ipv4_dst" + alias: "set_routing_ipv4_dst" + } + params { + id: 1 + name: "tun_dst_addr" + bitwidth: 32 + } +} +actions { + preamble { + id: 26631629 + name: "FabricIngress.upf.set_app_id" + alias: "set_app_id" + } + params { + id: 1 + name: "app_id" + bitwidth: 8 + } +} +actions { + preamble { + id: 28119063 + name: "FabricIngress.upf.recirc_allow" + alias: "recirc_allow" + } +} +actions { + preamble { + id: 19222227 + name: "FabricIngress.upf.recirc_deny" + alias: "recirc_deny" + } +} +actions { + preamble { + id: 29186084 + name: "FabricIngress.upf.recirc_miss" + alias: "recirc_miss" + } +} +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: 28490145 + name: "FabricEgress.upf.load_tunnel_params" + alias: "load_tunnel_params" + } + params { + id: 1 + name: "tunnel_src_port" + bitwidth: 16 + } + params { + id: 2 + name: "tunnel_src_addr" + bitwidth: 32 + } + params { + id: 3 + name: "tunnel_dst_addr" + bitwidth: 32 + } +} +actions { + preamble { + id: 18154440 + name: "FabricEgress.upf.gtpu_only" + alias: "gtpu_only" + } +} +actions { + preamble { + id: 25872588 + name: "FabricEgress.upf.gtpu_with_psc" + alias: "gtpu_with_psc" + } +} +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 +} +counters { + preamble { + id: 316677328 + name: "FabricIngress.upf.terminations_counter" + alias: "FabricIngress.upf.terminations_counter" + } + spec { + unit: BOTH + } + size: 4096 +} +counters { + preamble { + id: 314209362 + name: "FabricEgress.upf.terminations_counter" + alias: "FabricEgress.upf.terminations_counter" + } + spec { + unit: BOTH + } + size: 4096 +} +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: 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: 335275671 + name: "FabricIngress.upf.recirc_stats" + alias: "recirc_stats" + } + spec { + unit: PACKETS + } + direct_table_id: 34400315 +} +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 +} +meters { + preamble { + id: 345152250 + name: "FabricIngress.upf.session_meter" + alias: "session_meter" + } + spec { + unit: BYTES + } + size: 20000 +} +meters { + preamble { + id: 343216442 + name: "FabricIngress.upf.app_meter" + alias: "app_meter" + } + spec { + unit: BYTES + } + size: 20000 +} +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-sd-fabric-svc-connectivity/run_grafana_dashboard.sh b/src/tests/p4-sd-fabric-svc-connectivity/run_grafana_dashboard.sh new file mode 100644 index 0000000000000000000000000000000000000000..5bdcdd369e80fd3fec255a2369ac7e157dee644d --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/run_grafana_dashboard.sh @@ -0,0 +1,93 @@ +#!/bin/bash +# Copyright 2022-2026 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. + + +# ----------------------------------- +# CONFIGURATION +# ----------------------------------- + +GRAFANA_URL="http://localhost:80/grafana" # Your Grafana URL +GRAFANA_USERNAME="admin" +GRAFANA_PASSWORD="admin" + +DATASOURCE_NAME="Prometheus" +DASHBOARD_FILE="/home/ubuntu/tfs-ctrl/src/tests/p4-sd-fabric-svc-connectivity/descriptors/grafana-latency.json" # Path to your dashboard JSON + +# ----------------------------------- +# READ DASHBOARD JSON +# ----------------------------------- +if [ ! -f "$DASHBOARD_FILE" ]; then + echo "[ERROR] Dashboard file not found: $DASHBOARD_FILE" + exit 1 +fi + +DASHBOARD_JSON=$(cat "$DASHBOARD_FILE") + +# --------------------------------------- +# 1. Get the datasource UID +# --------------------------------------- + +PROM_UID=$(curl -s \ + -u "${GRAFANA_USERNAME}:${GRAFANA_PASSWORD}" \ + "${GRAFANA_URL}/api/datasources/name/${DATASOURCE_NAME}" \ + | jq -r '.uid') + +if [ -z "$PROM_UID" ] || [ "$PROM_UID" == "null" ]; then + echo "ERROR: Could not retrieve datasource UID. Check datasource name/auth." + exit 1 +fi + +echo "Found datasource UID: $PROM_UID" + +# --------------------------------------- +# 2. Inject the UID into dashboard JSON +# --------------------------------------- + +DASHBOARD_JSON=$(jq --arg uid "$PROM_UID" ' + walk( + if type == "object" and has("datasource") then + .datasource |= + (if type == "object" then .uid = $uid else $uid end) + else . + end + ) +' "$DASHBOARD_FILE") + +# --------------------------------------- +# 3. Wrap in Grafana API import format +# --------------------------------------- + +read -r -d '' IMPORT_JSON << EOF +{ + "dashboard": ${DASHBOARD_JSON}, + "overwrite": true, + "folderId": 0, + "message": "Imported via API" +} +EOF + +# ----------------------------------- +# 4. Import dashboard using API +# ----------------------------------- + +echo "Importing dashboard into Grafana..." + +curl -X POST "${GRAFANA_URL}/api/dashboards/db" \ + -H "Content-Type: application/json" \ + -u "${GRAFANA_USERNAME}:${GRAFANA_PASSWORD}" \ + -d "${IMPORT_JSON}" + +echo +echo "Done" diff --git a/src/tests/p4-sd-fabric-svc-connectivity/run_grafana_datasources.sh b/src/tests/p4-sd-fabric-svc-connectivity/run_grafana_datasources.sh new file mode 100644 index 0000000000000000000000000000000000000000..b33b56e773ce68b1c48f4719b201e617afd5da18 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/run_grafana_datasources.sh @@ -0,0 +1,58 @@ +#!/bin/bash +# Copyright 2022-2026 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. + + +# --------------------------- +# CONFIGURATION +# --------------------------- + +TFS_IP="192.168.5.137" + +GRAFANA_URL="http://localhost:80/grafana" # Your Grafana URL +GRAFANA_USERNAME="admin" +GRAFANA_PASSWORD="admin" + +DATASOURCE_NAME="Prometheus" +PROMETHEUS_URL="http://${TFS_IP}:30090/" # URL of your Prometheus server + +# --------------------------- +# CREATE DATA SOURCE PAYLOAD +# --------------------------- + +read -r -d '' DATA_SOURCE_JSON << EOF +{ + "name": "${DATASOURCE_NAME}", + "type": "prometheus", + "access": "proxy", + "url": "${PROMETHEUS_URL}", + "basicAuth": false, + "isDefault": true, + "editable": true +} +EOF + +# --------------------------- +# SEND REQUEST (with username/password) +# --------------------------- + +echo "Creating Prometheus datasource in Grafana..." + +curl -X POST "${GRAFANA_URL}/api/datasources" \ + -H "Content-Type: application/json" \ + -u "${GRAFANA_USERNAME}:${GRAFANA_PASSWORD}" \ + -d "${DATA_SOURCE_JSON}" + +echo +echo "Done" diff --git a/src/tests/p4-sd-fabric-svc-connectivity/run_test_01_bootstrap.sh b/src/tests/p4-sd-fabric-svc-connectivity/run_test_01_bootstrap.sh new file mode 100755 index 0000000000000000000000000000000000000000..3e7f22b90e529408778503f054bda739b13dbf2f --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/run_test_01_bootstrap.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-connectivity/tests-setup/test_functional_bootstrap.py diff --git a/src/tests/p4-sd-fabric-svc-connectivity/run_test_02_service_provision_int.sh b/src/tests/p4-sd-fabric-svc-connectivity/run_test_02_service_provision_int.sh new file mode 100755 index 0000000000000000000000000000000000000000..6d33f8a9b28117194f7c1f4eaefcdb4fa0ec2e95 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/run_test_02_service_provision_int.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_int.py diff --git a/src/tests/p4-sd-fabric-svc-connectivity/run_test_03_service_provision_l2.sh b/src/tests/p4-sd-fabric-svc-connectivity/run_test_03_service_provision_l2.sh new file mode 100755 index 0000000000000000000000000000000000000000..f5d4c814cd33f602969dde6e22e6dcbd177d5875 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/run_test_03_service_provision_l2.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_l2.py diff --git a/src/tests/p4-sd-fabric-svc-connectivity/run_test_04_service_provision_l3.sh b/src/tests/p4-sd-fabric-svc-connectivity/run_test_04_service_provision_l3.sh new file mode 100755 index 0000000000000000000000000000000000000000..1b27756809f06ceb0c6d3130b60c3494cc91cccd --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/run_test_04_service_provision_l3.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_l3.py diff --git a/src/tests/p4-sd-fabric-svc-connectivity/run_test_05_service_provision_acl.sh b/src/tests/p4-sd-fabric-svc-connectivity/run_test_05_service_provision_acl.sh new file mode 100755 index 0000000000000000000000000000000000000000..fc95c0d61f95f3fd6145f0bf5358f13572e6dc70 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/run_test_05_service_provision_acl.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_acl.py diff --git a/src/tests/p4-sd-fabric-svc-connectivity/run_test_06_service_deprovision_int.sh b/src/tests/p4-sd-fabric-svc-connectivity/run_test_06_service_deprovision_int.sh new file mode 100755 index 0000000000000000000000000000000000000000..035353e196da2f935600dae88f0547924bb44e4b --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/run_test_06_service_deprovision_int.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_int.py diff --git a/src/tests/p4-sd-fabric-svc-connectivity/run_test_07_service_deprovision_l2.sh b/src/tests/p4-sd-fabric-svc-connectivity/run_test_07_service_deprovision_l2.sh new file mode 100755 index 0000000000000000000000000000000000000000..fb60d0eba92ae0d56f2167d2f4099684ef58301d --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/run_test_07_service_deprovision_l2.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_l2.py diff --git a/src/tests/p4-sd-fabric-svc-connectivity/run_test_08_service_deprovision_l3.sh b/src/tests/p4-sd-fabric-svc-connectivity/run_test_08_service_deprovision_l3.sh new file mode 100755 index 0000000000000000000000000000000000000000..6c14c8ab9564f3787fc7a5c37d8d7c61b0178a22 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/run_test_08_service_deprovision_l3.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_l3.py diff --git a/src/tests/p4-sd-fabric-svc-connectivity/run_test_09_service_deprovision_acl.sh b/src/tests/p4-sd-fabric-svc-connectivity/run_test_09_service_deprovision_acl.sh new file mode 100755 index 0000000000000000000000000000000000000000..1e3bd5b09ebe7d6e078e073139d3f8951f5d13d0 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/run_test_09_service_deprovision_acl.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_acl.py diff --git a/src/tests/p4-fabric-tna/run_test_03a_service_provision_l2.sh b/src/tests/p4-sd-fabric-svc-connectivity/run_test_10_cleanup.sh similarity index 77% rename from src/tests/p4-fabric-tna/run_test_03a_service_provision_l2.sh rename to src/tests/p4-sd-fabric-svc-connectivity/run_test_10_cleanup.sh index 618a3457f481a0cbe23888dd7e0d13e4f36dc68a..558bf7e322310c21fa9a6550ffb11714ca61bddf 100755 --- a/src/tests/p4-fabric-tna/run_test_03a_service_provision_l2.sh +++ b/src/tests/p4-sd-fabric-svc-connectivity/run_test_10_cleanup.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,4 +14,4 @@ # limitations under the License. source tfs_runtime_env_vars.sh -python3 -m pytest --verbose src/tests/p4-fabric-tna/tests-service/test_functional_service_provision_l2.py +python3 -m pytest --verbose src/tests/p4-sd-fabric-svc-connectivity/tests-setup/test_functional_cleanup.py diff --git a/src/tests/p4-sd-fabric-svc-connectivity/run_test_11_purge.sh b/src/tests/p4-sd-fabric-svc-connectivity/run_test_11_purge.sh new file mode 100755 index 0000000000000000000000000000000000000000..02e500f88a508650e91621c2df28a84da8a4b5f6 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/run_test_11_purge.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-connectivity/tests-setup/test_functional_purge.py diff --git a/src/tests/p4-sd-fabric-svc-connectivity/setup.sh b/src/tests/p4-sd-fabric-svc-connectivity/setup.sh new file mode 100755 index 0000000000000000000000000000000000000000..5a1daf120010addbece095303d7a673934c9b822 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/setup.sh @@ -0,0 +1,22 @@ +#! /bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-connectivity/p4src/p4info.txt tfs/${POD_NAME}:/root/p4 -c=server +kubectl cp src/tests/p4-sd-fabric-svc-connectivity/p4src/bmv2.json tfs/${POD_NAME}:/root/p4 -c=server diff --git a/src/tests/p4-sd-fabric-svc-connectivity/tests-service/Fixtures.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/Fixtures.py new file mode 100644 index 0000000000000000000000000000000000000000..cf77538f9d3860c1a45c56038288b87b08b8fd01 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/Fixtures.py @@ -0,0 +1,39 @@ +# Copyright 2022-2026 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 pytest +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from service.client.ServiceClient import ServiceClient + + +@pytest.fixture(scope='session') +def context_client(): + _client = ContextClient() + yield _client + _client.close() + + +@pytest.fixture(scope='session') +def device_client(): + _client = DeviceClient() + yield _client + _client.close() + + +@pytest.fixture(scope='session') +def service_client(): + _client = ServiceClient() + yield _client + _client.close() diff --git a/src/tests/p4-sd-fabric-svc-connectivity/tests-service/__init__.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2022-2026 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-fabric-tna/tests-service/test_functional_service_deprovision_acl.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_acl.py similarity index 88% rename from src/tests/p4-fabric-tna/tests-service/test_functional_service_deprovision_acl.py rename to src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_acl.py index fa8f313976680dc3ffe8a1ed27f118903223f64b..d18d4e583bcd9625cf50fc50b58542d12ae1bbdb 100644 --- a/src/tests/p4-fabric-tna/tests-service/test_functional_service_deprovision_acl.py +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_acl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,23 +13,26 @@ # limitations under the License. import logging -from common.proto.context_pb2 import ServiceId, ServiceStatusEnum, ServiceTypeEnum + +from common.proto.context_pb2 import ( + ServiceId, ServiceStatusEnum, ServiceTypeEnum, +) from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Service import json_service_id from context.client.ContextClient import ContextClient from service.client.ServiceClient import ServiceClient -from tests.Fixtures import context_client, service_client # pylint: disable=unused-import -from tests.tools.test_tools_p4 import ( - ADMIN_CONTEXT_ID, - DEV_NB, - P4_DEV_NB, - ACL_RULES, - identify_number_of_p4_devices, - get_number_of_rules, - verify_active_service_type +from tests.tools.test_tools_p4 import * + +from .Fixtures import ( # pylint: disable=unused-import + context_client, service_client, ) +DEV_NB = 4 +P4_DEV_NB = 1 + +ACL_RULES = 1 + LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/p4-fabric-tna/tests-service/test_functional_service_deprovision_int.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_int.py similarity index 88% rename from src/tests/p4-fabric-tna/tests-service/test_functional_service_deprovision_int.py rename to src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_int.py index fe73810c085082a5cb798bb761397d2fabe9a4f0..541f4253abc053d3be77d1f5aae641e5c4935fb6 100644 --- a/src/tests/p4-fabric-tna/tests-service/test_functional_service_deprovision_int.py +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_int.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,23 +13,26 @@ # limitations under the License. import logging -from common.proto.context_pb2 import ServiceId, ServiceStatusEnum, ServiceTypeEnum + +from common.proto.context_pb2 import ( + ServiceId, ServiceStatusEnum, ServiceTypeEnum, +) from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Service import json_service_id from context.client.ContextClient import ContextClient from service.client.ServiceClient import ServiceClient -from tests.Fixtures import context_client, service_client # pylint: disable=unused-import -from tests.tools.test_tools_p4 import ( - ADMIN_CONTEXT_ID, - DEV_NB, - P4_DEV_NB, - INT_RULES, - identify_number_of_p4_devices, - get_number_of_rules, - verify_active_service_type +from tests.tools.test_tools_p4 import * + +from .Fixtures import ( # pylint: disable=unused-import + context_client, service_client, ) +DEV_NB = 4 +P4_DEV_NB = 1 + +INT_RULES = 19 + LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/p4-fabric-tna/tests-service/test_functional_service_deprovision_l2.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_l2.py similarity index 88% rename from src/tests/p4-fabric-tna/tests-service/test_functional_service_deprovision_l2.py rename to src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_l2.py index bd1d740b92460e218ee0006ed9ce5ec1751e257d..001bd1b689246b136cbb5fae57e9dc601ab0bb41 100644 --- a/src/tests/p4-fabric-tna/tests-service/test_functional_service_deprovision_l2.py +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_l2.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,23 +13,26 @@ # limitations under the License. import logging -from common.proto.context_pb2 import ServiceId, ServiceStatusEnum, ServiceTypeEnum + +from common.proto.context_pb2 import ( + ServiceId, ServiceStatusEnum, ServiceTypeEnum, +) from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Service import json_service_id from context.client.ContextClient import ContextClient from service.client.ServiceClient import ServiceClient -from tests.Fixtures import context_client, service_client # pylint: disable=unused-import -from tests.tools.test_tools_p4 import ( - ADMIN_CONTEXT_ID, - DEV_NB, - P4_DEV_NB, - L2_RULES, - identify_number_of_p4_devices, - get_number_of_rules, - verify_active_service_type +from tests.tools.test_tools_p4 import * + +from .Fixtures import ( # pylint: disable=unused-import + context_client, service_client, ) +DEV_NB = 4 +P4_DEV_NB = 1 + +L2_RULES = 12 + LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/p4-fabric-tna/tests-service/test_functional_service_deprovision_l3.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_l3.py similarity index 88% rename from src/tests/p4-fabric-tna/tests-service/test_functional_service_deprovision_l3.py rename to src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_l3.py index 7f669fbe3c56b3d04b52e0c7f640d09ab45c739a..c5bbe1d142e37365455b26e9b36f2953881b2d0d 100644 --- a/src/tests/p4-fabric-tna/tests-service/test_functional_service_deprovision_l3.py +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_deprovision_l3.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,23 +13,26 @@ # limitations under the License. import logging -from common.proto.context_pb2 import ServiceId, ServiceStatusEnum, ServiceTypeEnum + +from common.proto.context_pb2 import ( + ServiceId, ServiceStatusEnum, ServiceTypeEnum, +) from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.Context import json_context_id from common.tools.object_factory.Service import json_service_id from context.client.ContextClient import ContextClient from service.client.ServiceClient import ServiceClient -from tests.Fixtures import context_client, service_client # pylint: disable=unused-import -from tests.tools.test_tools_p4 import ( - ADMIN_CONTEXT_ID, - DEV_NB, - P4_DEV_NB, - L3_RULES, - identify_number_of_p4_devices, - get_number_of_rules, - verify_active_service_type +from tests.tools.test_tools_p4 import * + +from .Fixtures import ( # pylint: disable=unused-import + context_client, service_client, ) +DEV_NB = 4 +P4_DEV_NB = 1 + +L3_RULES = 14 + LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/p4-fabric-tna/tests-service/test_functional_service_provision_acl.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_acl.py similarity index 78% rename from src/tests/p4-fabric-tna/tests-service/test_functional_service_provision_acl.py rename to src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_acl.py index d9da5d3814a006552254adf3cd28ed9588548d2a..14d8c04a863a5f1ddeaff4a70a1748d30b9a94eb 100644 --- a/src/tests/p4-fabric-tna/tests-service/test_functional_service_provision_acl.py +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_acl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,24 +13,37 @@ # limitations under the License. import logging -from common.proto.context_pb2 import ServiceStatusEnum, ServiceTypeEnum -from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results +import os + +from common.proto.context_pb2 import ServiceTypeEnum +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 service.client.ServiceClient import ServiceClient -from tests.Fixtures import context_client, device_client, service_client # pylint: disable=unused-import -from tests.tools.test_tools_p4 import ( - ADMIN_CONTEXT_ID, - DESC_FILE_SERVICE_P4_ACL, - DEV_NB, - P4_DEV_NB, - ACL_RULES, - identify_number_of_p4_devices, - get_number_of_rules, - verify_active_service_type +from tests.tools.test_tools_p4 import * + +from .Fixtures import ( # pylint: disable=unused-import + context_client, device_client, service_client, ) +DEV_NB = 4 +P4_DEV_NB = 1 + +ACL_RULES = 1 + +TEST_PATH = os.path.join( + os.path.dirname(os.path.dirname( + os.path.abspath(__file__) + )) + '/descriptors') +assert os.path.exists(TEST_PATH), "Invalid path to tests" + +# Topology descriptor +DESC_FILE_SERVICE_P4_ACL = os.path.join(TEST_PATH, 'service-p4-acl.json') +assert os.path.exists(DESC_FILE_SERVICE_P4_ACL), "Invalid path to the ACL service descriptor" + LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/p4-fabric-tna/tests-service/test_functional_service_provision_int.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_int.py similarity index 79% rename from src/tests/p4-fabric-tna/tests-service/test_functional_service_provision_int.py rename to src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_int.py index 13ae470c8cb447a55aa0ff75511253190c2c0419..795b12725d82c4592734048828ac94563505d1f7 100644 --- a/src/tests/p4-fabric-tna/tests-service/test_functional_service_provision_int.py +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_int.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,24 +13,37 @@ # limitations under the License. import logging +import os + from common.proto.context_pb2 import ServiceTypeEnum -from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results +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 service.client.ServiceClient import ServiceClient -from tests.Fixtures import context_client, device_client, service_client # pylint: disable=unused-import -from tests.tools.test_tools_p4 import ( - ADMIN_CONTEXT_ID, - DESC_FILE_SERVICE_P4_INT, - DEV_NB, - P4_DEV_NB, - INT_RULES, - identify_number_of_p4_devices, - get_number_of_rules, - verify_active_service_type +from tests.tools.test_tools_p4 import * + +from .Fixtures import ( # pylint: disable=unused-import + context_client, device_client, service_client, ) +DEV_NB = 4 +P4_DEV_NB = 1 + +INT_RULES = 19 + +TEST_PATH = os.path.join( + os.path.dirname(os.path.dirname( + os.path.abspath(__file__) + )) + '/descriptors') +assert os.path.exists(TEST_PATH), "Invalid path to tests" + +# Topology descriptor +DESC_FILE_SERVICE_P4_INT = os.path.join(TEST_PATH, 'service-p4-int.json') +assert os.path.exists(DESC_FILE_SERVICE_P4_INT), "Invalid path to the INT service descriptor" + LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/p4-fabric-tna/tests-service/test_functional_service_provision_l2.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_l2.py similarity index 77% rename from src/tests/p4-fabric-tna/tests-service/test_functional_service_provision_l2.py rename to src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_l2.py index 5de0d511f3fdc354e1b649254e24d84547122e7b..46a314ed5e3f25f9114b1aa8ce741095e6b0ba54 100644 --- a/src/tests/p4-fabric-tna/tests-service/test_functional_service_provision_l2.py +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_l2.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,24 +13,37 @@ # limitations under the License. import logging -from common.proto.context_pb2 import ServiceStatusEnum, ServiceTypeEnum -from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results +import os + +from common.proto.context_pb2 import ServiceTypeEnum +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 service.client.ServiceClient import ServiceClient -from tests.Fixtures import context_client, device_client, service_client # pylint: disable=unused-import -from tests.tools.test_tools_p4 import ( - ADMIN_CONTEXT_ID, - DESC_FILE_SERVICE_P4_L2_SIMPLE, - DEV_NB, - P4_DEV_NB, - L2_RULES, - identify_number_of_p4_devices, - get_number_of_rules, - verify_active_service_type +from tests.tools.test_tools_p4 import * + +from .Fixtures import ( # pylint: disable=unused-import + context_client, device_client, service_client, ) +DEV_NB = 4 +P4_DEV_NB = 1 + +L2_RULES = 12 + +TEST_PATH = os.path.join( + os.path.dirname(os.path.dirname( + os.path.abspath(__file__) + )) + '/descriptors') +assert os.path.exists(TEST_PATH), "Invalid path to tests" + +# Topology descriptor +DESC_FILE_SERVICE_P4_L2 = os.path.join(TEST_PATH, 'service-p4-l2.json') +assert os.path.exists(DESC_FILE_SERVICE_P4_L2), "Invalid path to the L2 service descriptor" + LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) @@ -60,7 +73,7 @@ def test_service_creation_l2( # Load service descriptor_loader = DescriptorLoader( - descriptors_file=DESC_FILE_SERVICE_P4_L2_SIMPLE, + descriptors_file=DESC_FILE_SERVICE_P4_L2, context_client=context_client, device_client=device_client, service_client=service_client ) results = descriptor_loader.process() diff --git a/src/tests/p4-fabric-tna/tests-service/test_functional_service_provision_l3.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_l3.py similarity index 78% rename from src/tests/p4-fabric-tna/tests-service/test_functional_service_provision_l3.py rename to src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_l3.py index 2bd6731440ff439a0def44bf26e290ba516da69c..9a8eba1caa2526e35ff00d634049c8f285abea8b 100644 --- a/src/tests/p4-fabric-tna/tests-service/test_functional_service_provision_l3.py +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-service/test_functional_service_provision_l3.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,24 +13,37 @@ # limitations under the License. import logging -from common.proto.context_pb2 import ServiceStatusEnum, ServiceTypeEnum -from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results +import os + +from common.proto.context_pb2 import ServiceTypeEnum +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 service.client.ServiceClient import ServiceClient -from tests.Fixtures import context_client, device_client, service_client # pylint: disable=unused-import -from tests.tools.test_tools_p4 import ( - ADMIN_CONTEXT_ID, - DESC_FILE_SERVICE_P4_L3, - DEV_NB, - P4_DEV_NB, - L3_RULES, - identify_number_of_p4_devices, - get_number_of_rules, - verify_active_service_type +from tests.tools.test_tools_p4 import * + +from .Fixtures import ( # pylint: disable=unused-import + context_client, device_client, service_client, ) +DEV_NB = 4 +P4_DEV_NB = 1 + +L3_RULES = 14 + +TEST_PATH = os.path.join( + os.path.dirname(os.path.dirname( + os.path.abspath(__file__) + )) + '/descriptors') +assert os.path.exists(TEST_PATH), "Invalid path to tests" + +# Topology descriptor +DESC_FILE_SERVICE_P4_L3 = os.path.join(TEST_PATH, 'service-p4-l3.json') +assert os.path.exists(DESC_FILE_SERVICE_P4_L3), "Invalid path to the L3 service descriptor" + LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/p4-sd-fabric-svc-connectivity/tests-setup/Fixtures.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-setup/Fixtures.py new file mode 100644 index 0000000000000000000000000000000000000000..cf77538f9d3860c1a45c56038288b87b08b8fd01 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-setup/Fixtures.py @@ -0,0 +1,39 @@ +# Copyright 2022-2026 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 pytest +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from service.client.ServiceClient import ServiceClient + + +@pytest.fixture(scope='session') +def context_client(): + _client = ContextClient() + yield _client + _client.close() + + +@pytest.fixture(scope='session') +def device_client(): + _client = DeviceClient() + yield _client + _client.close() + + +@pytest.fixture(scope='session') +def service_client(): + _client = ServiceClient() + yield _client + _client.close() diff --git a/src/tests/p4-sd-fabric-svc-connectivity/tests-setup/__init__.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-setup/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-setup/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2022-2026 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-sd-fabric-svc-connectivity/tests-setup/test_functional_bootstrap.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-setup/test_functional_bootstrap.py new file mode 100644 index 0000000000000000000000000000000000000000..0f60221ff6497ab1bfef1b41dfa0419ebaeb4c0d --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-setup/test_functional_bootstrap.py @@ -0,0 +1,85 @@ +# Copyright 2022-2026 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, 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.tools.test_tools_p4 import ADMIN_CONTEXT_ID + +from .Fixtures import ( # pylint: disable=unused-import + context_client, device_client, +) + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +TEST_PATH = os.path.join( + os.path.dirname(os.path.dirname( + os.path.abspath(__file__) + )) + '/descriptors') +assert os.path.exists(TEST_PATH), "Invalid path to tests" + +# Topology descriptor +DESC_TOPOLOGY = os.path.join(TEST_PATH, 'topology.json') +assert os.path.exists(DESC_TOPOLOGY), "Invalid path to the topology descriptor" + +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_TOPOLOGY, 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-sd-fabric-svc-connectivity/tests-setup/test_functional_cleanup.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-setup/test_functional_cleanup.py new file mode 100644 index 0000000000000000000000000000000000000000..ca303173f198515e85370ca41c4a12a0519c0077 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-setup/test_functional_cleanup.py @@ -0,0 +1,55 @@ +# Copyright 2022-2026 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.tools.descriptor.Loader import ( + DescriptorLoader, validate_empty_scenario, +) +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from tests.tools.test_tools_p4 import ADMIN_CONTEXT_ID + +from .Fixtures import ( # pylint: disable=unused-import + context_client, device_client, +) + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +TEST_PATH = os.path.join( + os.path.dirname(os.path.dirname( + os.path.abspath(__file__) + )) + '/descriptors') +assert os.path.exists(TEST_PATH), "Invalid path to tests" + +# Topology descriptor +DESC_TOPOLOGY = os.path.join(TEST_PATH, 'topology.json') +assert os.path.exists(DESC_TOPOLOGY), "Invalid path to the topology descriptor" + +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_TOPOLOGY, 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-sd-fabric-svc-connectivity/tests-setup/test_functional_purge.py b/src/tests/p4-sd-fabric-svc-connectivity/tests-setup/test_functional_purge.py new file mode 100644 index 0000000000000000000000000000000000000000..07c77266690511c6cc963c2ec6908a1d3061f2c8 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-connectivity/tests-setup/test_functional_purge.py @@ -0,0 +1,89 @@ +# Copyright 2022-2026 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.proto.context_pb2 import ( + DeviceId, LinkId, ServiceId, ServiceStatusEnum, ServiceTypeEnum, +) +from common.tools.grpc.Tools import grpc_message_to_json_string +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 context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from service.client.ServiceClient import ServiceClient +from tests.tools.test_tools_p4 import ADMIN_CONTEXT_ID + +from .Fixtures import ( # pylint: disable=unused-import + context_client, device_client, service_client, +) + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +def test_clean_services( + context_client : ContextClient, # pylint: disable=redefined-outer-name + service_client : ServiceClient # pylint: disable=redefined-outer-name +) -> None: + response = context_client.ListServices(ADMIN_CONTEXT_ID) + LOGGER.warning('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response))) + + for service in response.services: + service_id = service.service_id + assert service_id + + service_uuid = service_id.service_uuid.uuid + context_uuid = service_id.context_id.context_uuid.uuid + assert service.service_status.service_status == ServiceStatusEnum.SERVICESTATUS_ACTIVE + + # Delete service + service_client.DeleteService(ServiceId(**json_service_id(service_uuid, json_context_id(context_uuid)))) + +def test_clean_links( + context_client : ContextClient, # pylint: disable=redefined-outer-name +) -> None: + response = context_client.ListLinks(ADMIN_CONTEXT_ID) + + for link in response.links: + link_id = link.link_id + + # Delete link + context_client.RemoveLink(LinkId(**link_id)) + +def test_clean_devices( + context_client : ContextClient, # pylint: disable=redefined-outer-name + device_client : DeviceClient # 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))) + + for device in response.devices: + device_uuid = device.device_id.device_uuid.uuid + device_json = json_device_id(device_uuid) + + # Delete device + device_client.DeleteDevice(DeviceId(**device_json)) + +def test_clean_context( + context_client : ContextClient # pylint: disable=redefined-outer-name +) -> None: + # Verify the scenario has no services/slices + response = context_client.ListTopologies(ADMIN_CONTEXT_ID) + + for topology in response.topologies: + topology_id = topology.topology_id + response = context_client.RemoveTopology(topology_id) + + response = context_client.RemoveContext(ADMIN_CONTEXT_ID) diff --git a/src/tests/p4-sd-fabric-svc-upf/README.md b/src/tests/p4-sd-fabric-svc-upf/README.md new file mode 100644 index 0000000000000000000000000000000000000000..2a9eff3044a05e1f982f63e6edd08daac0446d2d --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/README.md @@ -0,0 +1,158 @@ +# Tests for TFS Ecosystem Days #7 - PoC#1 + +This directory contains the necessary scripts and configurations to run tests atop a Stratum-based P4 switch that acts as a 5G UPF. +The P4 data plane is based on ONF's SD-Fabric implementation, titled [fabric-tna](https://github.com/stratum/fabric-tna) + +## 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. + +### Deploy TFS + +Go to the TFS parent folder. + +```shell +cd ~/tfs-ctrl/ +``` + +Edit `my_deploy.sh` to include the following TFS components and then source the file. + +```shell +nano my_deploy.sh +`export TFS_COMPONENTS="context device pathcomp service nbi webui"` +``` + +```shell +source my_deploy.sh && source tfs_runtime_env_vars.sh +``` + +Now deploy TFS: + +```shell +./deploy/all.sh +``` + +When deployed, execute the following command to ensure that the above components are all in place and in a running state: + +```shell +./deploy/show.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 + +Open `topology/README.md` and follow the instructions on how to install a Stratum switch in a Linux namespace. + +## 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 + +A set of tests is implemented, each focusing on different aspects of TFS. +For each of these tests, an auxiliary bash script allows to run it with less typing. + +| Bash Runner | Purpose | +| --------------------------------------------- | --------------------------------------------------------------------------- | +| setup.sh | Copy P4 artifacts into the SBI pod | +| run_test_01_bootstrap.sh | Connect TFS to the P4 switch | +| run_test_02_service_provision_upf.sh | Install UPF forwarding rules via a dedicated P4 UPF service handler | +| run_test_03_service_deprovision_upf.sh | Uninstall UPF forwarding rules via a dedicated P4 PF service handler | +| run_test_04_cleanup.sh | Clean-up context and topology and disconnect TFS from the P4 switch | + +Each of the tests above is described in detail below. + +### Step 0: 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-sd-fabric-svc-upf/setup.sh +``` + +### Step 1: Bootstrap topology + +The bootstrap script registers the context, topology, links, and devices to TFS. + +```shell +cd ~/tfs-ctrl/ +bash src/tests/p4-sd-fabric-svc-upf/run_test_01_bootstrap.sh +``` + +### Step 2: Provision UPF via the Service API + +```shell +cd ~/tfs-ctrl/ +bash src/tests/p4-sd-fabric-svc-upf/run_test_02_service_provision_upf.sh +``` + +### Step 3: Deprovision UPF via the Service API + +```shell +cd ~/tfs-ctrl/ +bash src/tests/p4-sd-fabric-svc-upf/run_test_03_service_deprovision_upf.sh +``` + +### Step 4: Deprovision topology + +Delete all the objects (context, topology, links, devices) from TFS: + +```shell +cd ~/tfs-ctrl/ +bash src/tests/p4-sd-fabric-svc-upf/run_test_04_cleanup.sh +``` + +### Step 5: Purge context and topology (if needed) + +Alternatively, a purge test is implemented; this test removes services, links, devices, topology, and context in this order. + +```shell +cd ~/tfs-ctrl/ +bash src/tests/p4-sd-fabric-svc-upf/run_test_05_purge.sh +``` diff --git a/src/tests/p4-sd-fabric-svc-upf/__init__.py b/src/tests/p4-sd-fabric-svc-upf/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2022-2026 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-sd-fabric-svc-upf/descriptors/all.json b/src/tests/p4-sd-fabric-svc-upf/descriptors/all.json new file mode 100644 index 0000000000000000000000000000000000000000..cebb197a40f9351b84abab1e14f7b212ab01db0e --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/descriptors/all.json @@ -0,0 +1,134 @@ +{ + "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": "tfs-sdn-controller"}}, + "name": "tfs-sdn-controller", + "device_type": "teraflowsdn", + "device_drivers": ["DEVICEDRIVER_UNDEFINED"], + "device_operational_status": "DEVICEOPERATIONALSTATUS_UNDEFINED", + "device_config": {"config_rules": [ + {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}}, + {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}}, + {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": { + "endpoints": [{"uuid": "mgmt", "name": "mgmt", "type": "mgmt-int"}] + }}} + ]} + }, + { + "device_id": {"device_uuid": {"uuid": "5gc"}}, + "device_type": "oran-cn", + "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": "mgmt", "name": "mgmt", "type": "mgmt-int"}] + }}} + ] + } + }, + { + "device_id": {"device_uuid": {"uuid": "5g-gNb"}}, + "device_type": "emu-packet-radio-router", + "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", "name": "eth1", "type": "copper"}] + }}} + ] + } + }, + { + "device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, + "device_type": "p4-switch", + "device_drivers": ["DEVICEDRIVER_P4"], + "device_operational_status": "DEVICEOPERATIONALSTATUS_DISABLED", + "name": "sw1-5g-upf", + "device_config": { + "config_rules": [ + {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/address", "resource_value": "192.168.7.56"}}, + {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/port", "resource_value": "50001"}}, + {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/settings", "resource_value": { + "id": 1, + "name": "sw1-5g-upf", + "vendor": "Open Networking Foundation", + "hw_ver": "BMv2 simple_switch", + "sw_ver": "Stratum", + "timeout": 60, + "p4bin": "/root/p4/bmv2.json", + "p4info": "/root/p4/p4info.txt", + "endpoints": [ + {"uuid": "sw1-1", "name": "1", "type": "port-dp-net-access"}, + {"uuid": "sw1-2", "name": "2", "type": "port-dp-net-core"}, + {"uuid": "sw1-3", "name": "3", "type": "port-cp-5gc"}, + {"uuid": "sw1-4", "name": "4", "type": "port-cp-sdn"} + ] + }}} + ] + } + }, + { + "device_id": {"device_uuid": {"uuid": "data-network"}}, + "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", "name": "eth1", "type": "copper"}] + }}} + ] + } + } + ], + "links": [ + { + "link_id": {"link_uuid": {"uuid": "5g-gNb/eth1==sw1-5g-upf/sw1-1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "5g-gNb"}}, "endpoint_uuid": {"uuid": "eth1"}}, + {"device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, "endpoint_uuid": {"uuid": "sw1-1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "sw1-5g-upf/sw1-1==5g-gNb/eth1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, "endpoint_uuid": {"uuid": "sw1-1"}}, + {"device_id": {"device_uuid": {"uuid": "5g-gNb"}}, "endpoint_uuid": {"uuid": "eth1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "sw1-5g-upf/sw1-2==data-network/eth1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, "endpoint_uuid": {"uuid": "sw1-2"}}, + {"device_id": {"device_uuid": {"uuid": "data-network"}}, "endpoint_uuid": {"uuid": "eth1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "data-network/eth1==sw1-5g-upf/sw1-2"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "data-network"}}, "endpoint_uuid": {"uuid": "eth1"}}, + {"device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, "endpoint_uuid": {"uuid": "sw1-2"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "sw1-5g-upf/sw1-3==5gc/mgmt"}}, "link_type": "LINKTYPE_MANAGEMENT", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, "endpoint_uuid": {"uuid": "sw1-3"}}, + {"device_id": {"device_uuid": {"uuid": "5gc"}}, "endpoint_uuid": {"uuid": "mgmt"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "sw1-5g-upf/sw1-4==tfs-sdn-controller/mgmt"}}, "link_type": "LINKTYPE_MANAGEMENT", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, "endpoint_uuid": {"uuid": "sw1-4"}}, + {"device_id": {"device_uuid": {"uuid": "tfs-sdn-controller"}}, "endpoint_uuid": {"uuid": "mgmt"}} + ] + } + ] +} diff --git a/src/tests/p4-sd-fabric-svc-upf/descriptors/context.json b/src/tests/p4-sd-fabric-svc-upf/descriptors/context.json new file mode 100644 index 0000000000000000000000000000000000000000..08e617ba5f9a2d1c839d1d17d1fcae9d9659f89e --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/descriptors/context.json @@ -0,0 +1,5 @@ +{ + "contexts": [ + {"context_id": {"context_uuid": {"uuid": "admin"}}} + ] +} diff --git a/src/tests/p4-sd-fabric-svc-upf/descriptors/devices.json b/src/tests/p4-sd-fabric-svc-upf/descriptors/devices.json new file mode 100644 index 0000000000000000000000000000000000000000..c537ead3c7418da7673581111ced38f8443952d2 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/descriptors/devices.json @@ -0,0 +1,89 @@ +{ + "devices": [ + { + "device_id": {"device_uuid": {"uuid": "tfs-sdn-controller"}}, + "name": "tfs-sdn-controller", + "device_type": "teraflowsdn", + "device_drivers": ["DEVICEDRIVER_UNDEFINED"], + "device_operational_status": "DEVICEOPERATIONALSTATUS_UNDEFINED", + "device_config": {"config_rules": [ + {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "127.0.0.1"}}, + {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "0"}}, + {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": { + "endpoints": [{"uuid": "mgmt", "name": "mgmt", "type": "mgmt-int"}] + }}} + ]} + }, + { + "device_id": {"device_uuid": {"uuid": "5gc"}}, + "device_type": "oran-cn", + "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": "mgmt", "name": "mgmt", "type": "mgmt-int"}] + }}} + ] + } + }, + { + "device_id": {"device_uuid": {"uuid": "5g-gNb"}}, + "device_type": "emu-packet-radio-router", + "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", "name": "eth1", "type": "copper"}] + }}} + ] + } + }, + { + "device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, + "device_type": "p4-switch", + "device_drivers": ["DEVICEDRIVER_P4"], + "device_operational_status": "DEVICEOPERATIONALSTATUS_DISABLED", + "name": "sw1-5g-upf", + "device_config": { + "config_rules": [ + {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/address", "resource_value": "192.168.7.56"}}, + {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/port", "resource_value": "50001"}}, + {"action": "CONFIGACTION_SET", "custom": {"resource_key": "_connect/settings", "resource_value": { + "id": 1, + "name": "sw1-5g-upf", + "vendor": "Open Networking Foundation", + "hw_ver": "BMv2 simple_switch", + "sw_ver": "Stratum", + "timeout": 60, + "p4bin": "/root/p4/bmv2.json", + "p4info": "/root/p4/p4info.txt", + "endpoints": [ + {"uuid": "sw1-1", "name": "1", "type": "port-dp-net-access"}, + {"uuid": "sw1-2", "name": "2", "type": "port-dp-net-core"}, + {"uuid": "sw1-3", "name": "3", "type": "port-cp-5gc"}, + {"uuid": "sw1-4", "name": "4", "type": "port-cp-sdn"} + ] + }}} + ] + } + }, + { + "device_id": {"device_uuid": {"uuid": "data-network"}}, + "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", "name": "eth1", "type": "copper"}] + }}} + ] + } + } + ] +} diff --git a/src/tests/p4-sd-fabric-svc-upf/descriptors/links.json b/src/tests/p4-sd-fabric-svc-upf/descriptors/links.json new file mode 100644 index 0000000000000000000000000000000000000000..ea28f012b1169abad388bff5ca3cfa914aa62927 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/descriptors/links.json @@ -0,0 +1,40 @@ +{ + "links": [ + { + "link_id": {"link_uuid": {"uuid": "5g-gNb/eth1==sw1-5g-upf/sw1-1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "5g-gNb"}}, "endpoint_uuid": {"uuid": "eth1"}}, + {"device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, "endpoint_uuid": {"uuid": "sw1-1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "sw1-5g-upf/sw1-1==5g-gNb/eth1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, "endpoint_uuid": {"uuid": "sw1-1"}}, + {"device_id": {"device_uuid": {"uuid": "5g-gNb"}}, "endpoint_uuid": {"uuid": "eth1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "sw1-5g-upf/sw1-2==data-network/eth1"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, "endpoint_uuid": {"uuid": "sw1-2"}}, + {"device_id": {"device_uuid": {"uuid": "data-network"}}, "endpoint_uuid": {"uuid": "eth1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "data-network/eth1==sw1-5g-upf/sw1-2"}}, "link_type": "LINKTYPE_COPPER", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "data-network"}}, "endpoint_uuid": {"uuid": "eth1"}}, + {"device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, "endpoint_uuid": {"uuid": "sw1-2"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "sw1-5g-upf/sw1-3==5gc/mgmt"}}, "link_type": "LINKTYPE_MANAGEMENT", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, "endpoint_uuid": {"uuid": "sw1-3"}}, + {"device_id": {"device_uuid": {"uuid": "5gc"}}, "endpoint_uuid": {"uuid": "mgmt"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "sw1-5g-upf/sw1-4==tfs-sdn-controller/mgmt"}}, "link_type": "LINKTYPE_MANAGEMENT", "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, "endpoint_uuid": {"uuid": "sw1-4"}}, + {"device_id": {"device_uuid": {"uuid": "tfs-sdn-controller"}}, "endpoint_uuid": {"uuid": "mgmt"}} + ] + } + ] +} diff --git a/src/tests/p4-sd-fabric-svc-upf/descriptors/send_descriptors_service.sh b/src/tests/p4-sd-fabric-svc-upf/descriptors/send_descriptors_service.sh new file mode 100644 index 0000000000000000000000000000000000000000..0a8f8a1bd9d04f7d629e983f4343381bb9f1d3c3 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/descriptors/send_descriptors_service.sh @@ -0,0 +1,25 @@ +#!/bin/bash +# Copyright 2022-2026 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. + + +CREDENTIALS="admin:admin" +CONTEXT="admin" +TFS_IP="192.168.5.137" +HEADER="Content-Type: application/json" + +##### Raw HTTP requests to provision the UPF TFS service +# curl -X PUT --header "Content-Type: application/json" --data @service-upf.json --user "admin:admin" http://192.168.5.137/tfs-api/context/admin/service/p4-service-upf + +curl -X PUT --header "${HEADER}" --data @service-upf.json --user ${CREDENTIALS} http://${TFS_IP}/tfs-api/context/${CONTEXT}/service/p4-service-upf diff --git a/src/tests/p4-sd-fabric-svc-upf/descriptors/send_descriptors_topo.sh b/src/tests/p4-sd-fabric-svc-upf/descriptors/send_descriptors_topo.sh new file mode 100644 index 0000000000000000000000000000000000000000..4ddab3685d70b5614b2a900c3877040389aeb17d --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/descriptors/send_descriptors_topo.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Copyright 2022-2026 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. + + +CREDENTIALS="admin:admin" +CONTEXT="admin" +TFS_IP="192.168.5.137" +HEADER="Content-Type: application/json" + +###### Disclaimer: Currently TFS does not possess a single NBI endpoint where all context, topologies, devices, and links can be given at once. +# For this reason, you need to issue 4 different requests to 4 different NBI endpoints as follows. + +# curl -X POST --header "Content-Type: application/json" --data @context.json --user "admin:admin" http://192.168.5.137/tfs-api/contexts +# curl -X POST --header "Content-Type: application/json" --data @topologies.json --user "admin:admin" http://192.168.5.137/tfs-api/context/admin/topologies +# curl -X POST --header "Content-Type: application/json" --data @devices.json --user "admin:admin" http://192.168.5.137/tfs-api/devices +# curl -X POST --header "Content-Type: application/json" --data @links.json --user "admin:admin" http://192.168.5.137/tfs-api/links + +dispatch() { + echo "Onboarding topology" + curl -X POST --header "${HEADER}" --data @context.json --user ${CREDENTIALS} http://${TFS_IP}/tfs-api/contexts + curl -X POST --header "${HEADER}" --data @topologies.json --user ${CREDENTIALS} http://${TFS_IP}/tfs-api/context/${CONTEXT}/topologies + curl -X POST --header "${HEADER}" --data @devices.json --user ${CREDENTIALS} http://${TFS_IP}/tfs-api/devices + curl -X POST --header "${HEADER}" --data @links.json --user ${CREDENTIALS} http://${TFS_IP}/tfs-api/links +} + +dispatch + +exit 0 diff --git a/src/tests/p4-sd-fabric-svc-upf/descriptors/service-upf-ui.json b/src/tests/p4-sd-fabric-svc-upf/descriptors/service-upf-ui.json new file mode 100644 index 0000000000000000000000000000000000000000..d031de781d1ad05be84fc1c27121279e4fc03d66 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/descriptors/service-upf-ui.json @@ -0,0 +1,144 @@ +{ + "services": [ + { + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "p4-service-upf"} + }, + "name": "p4-service-upf", + "service_type": "SERVICETYPE_UPF", + "service_endpoint_ids": [ + { + "device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, + "endpoint_uuid": {"uuid": "sw1-1"} + }, + { + "device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, + "endpoint_uuid": {"uuid": "sw1-2"} + } + ], + "service_config": { + "config_rules": [ + { + "action": "CONFIGACTION_SET", + "custom": { + "resource_key": "/settings", + "resource_value": { + "switch_info": [ + { + "sw1-5g-upf": { + "arch": "v1model", + "dpid": 1, + "port_list": [ + { + "port_id": 1, + "port_type": "host", + "vlan_id": 4094 + }, + { + "port_id": 2, + "port_type": "host", + "vlan_id": 4094 + } + ], + "fwd_list": [ + { + "port_id": 1, + "host_mac": "50:3e:aa:85:89:09", + "host_label": "N3 - 5G gNB" + }, + { + "port_id": 2, + "host_mac": "50:3e:aa:52:3e:38", + "host_label": "N3 - 5G UPF" + }, + { + "port_id": 1, + "host_mac": "18:a6:f7:0e:73:e5", + "host_label": "N6 - 5G UPF" + }, + { + "port_id": 2, + "host_mac": "50:3e:aa:96:ba:dd", + "host_label": "N6 - Data Network" + } + ], + "routing_list": [ + { + "port_id": 1, + "ipv4_dst": "10.10.2.2", + "ipv4_prefix_len": 32, + "mac_src": "18:a6:f7:0e:73:e5", + "mac_dst": "50:3e:aa:96:ba:dd" + }, + { + "port_id": 2, + "ipv4_dst": "12.1.1.0", + "ipv4_prefix_len": 24, + "mac_src": "50:3e:aa:52:3e:38", + "mac_dst": "50:3e:aa:85:89:09" + } + ], + "upf": { + "uplink_port": 1, + "uplink_ip": "10.10.1.1", + "uplink_mac": "50:3e:aa:52:3e:38", + + "downlink_port": 2, + "downlink_ip": "10.10.2.1", + "downlink_mac": "18:a6:f7:0e:73:e5", + + "slice_id": 0, + "teid": 1, + "app_id": 0, + "app_meter_id": 0, + "ctr_id": 401, + "tc_id": 3, + "tunnel_peer_id": 1 + }, + "gnb": { + "ip": "10.10.1.2", + "mac": "50:3e:aa:85:89:09" + }, + "ue_list": [ + { + "ue_id": "UE 1", + "ue_ip": "12.1.1.51", + "pdu_sessions": [ + { + "pdu_session_id": 0, + "dnn": "Data Network 1", + "pdu_session_type": "0x0800", + "gtpu_tunnel": { + "uplink": { + "src": "10.10.1.2", + "dst": "10.10.1.1" + }, + "downlink": { + "src": "10.10.1.1", + "dst": "10.10.1.2" + } + } + } + ], + "qos_flows": [ + { + "qfi": 0, + "5qi": 9, + "qos_type": "Non-GBR" + } + ] + } + ] + } + } + ] + } + } + } + ] + }, + "service_constraints": [] + } + ] +} diff --git a/src/tests/p4-sd-fabric-svc-upf/descriptors/service-upf.json b/src/tests/p4-sd-fabric-svc-upf/descriptors/service-upf.json new file mode 100644 index 0000000000000000000000000000000000000000..e1437ca2f3861f03a4815e688b33d157a143a3b0 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/descriptors/service-upf.json @@ -0,0 +1,140 @@ +{ + "service_id": { + "context_id": {"context_uuid": {"uuid": "admin"}}, + "service_uuid": {"uuid": "p4-service-upf"} + }, + "name": "p4-service-upf", + "service_type": "SERVICETYPE_UPF", + "service_endpoint_ids": [ + { + "device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, + "endpoint_uuid": {"uuid": "sw1-1"} + }, + { + "device_id": {"device_uuid": {"uuid": "sw1-5g-upf"}}, + "endpoint_uuid": {"uuid": "sw1-2"} + } + ], + "service_config": { + "config_rules": [ + { + "action": "CONFIGACTION_SET", + "custom": { + "resource_key": "/settings", + "resource_value": { + "switch_info": [ + { + "sw1-5g-upf": { + "arch": "v1model", + "dpid": 1, + "port_list": [ + { + "port_id": 1, + "port_type": "host", + "vlan_id": 4094 + }, + { + "port_id": 2, + "port_type": "host", + "vlan_id": 4094 + } + ], + "fwd_list": [ + { + "port_id": 1, + "host_mac": "50:3e:aa:85:89:09", + "host_label": "N3 - 5G gNB" + }, + { + "port_id": 2, + "host_mac": "50:3e:aa:52:3e:38", + "host_label": "N3 - 5G UPF" + }, + { + "port_id": 1, + "host_mac": "18:a6:f7:0e:73:e5", + "host_label": "N6 - 5G UPF" + }, + { + "port_id": 2, + "host_mac": "50:3e:aa:96:ba:dd", + "host_label": "N6 - Data Network" + } + ], + "routing_list": [ + { + "port_id": 1, + "ipv4_dst": "10.10.2.2", + "ipv4_prefix_len": 32, + "mac_src": "18:a6:f7:0e:73:e5", + "mac_dst": "50:3e:aa:96:ba:dd" + }, + { + "port_id": 2, + "ipv4_dst": "12.1.1.0", + "ipv4_prefix_len": 24, + "mac_src": "50:3e:aa:52:3e:38", + "mac_dst": "50:3e:aa:85:89:09" + } + ], + "upf": { + "uplink_port": 1, + "uplink_ip": "10.10.1.1", + "uplink_mac": "50:3e:aa:52:3e:38", + + "downlink_port": 2, + "downlink_ip": "10.10.2.1", + "downlink_mac": "18:a6:f7:0e:73:e5", + + "slice_id": 0, + "teid": 1, + "app_id": 0, + "app_meter_id": 0, + "ctr_id": 401, + "tc_id": 3, + "tunnel_peer_id": 1 + }, + "gnb": { + "ip": "10.10.1.2", + "mac": "50:3e:aa:85:89:09" + }, + "ue_list": [ + { + "ue_id": "UE 1", + "ue_ip": "12.1.1.51", + "pdu_sessions": [ + { + "pdu_session_id": 0, + "dnn": "Data Network 1", + "pdu_session_type": "0x0800", + "gtpu_tunnel": { + "uplink": { + "src": "10.10.1.2", + "dst": "10.10.1.1" + }, + "downlink": { + "src": "10.10.1.1", + "dst": "10.10.1.2" + } + } + } + ], + "qos_flows": [ + { + "qfi": 0, + "5qi": 9, + "qos_type": "Non-GBR" + } + ] + } + ] + } + } + ] + } + } + } + ] + }, + "service_constraints": [] +} diff --git a/src/tests/p4-sd-fabric-svc-upf/descriptors/topologies.json b/src/tests/p4-sd-fabric-svc-upf/descriptors/topologies.json new file mode 100644 index 0000000000000000000000000000000000000000..a38381fb7f5f17a21e36bab67d7622ec485eb600 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/descriptors/topologies.json @@ -0,0 +1,6 @@ +{ + "topologies": [ + {"topology_id": {"context_id": {"context_uuid": {"uuid": "admin"}}, "topology_uuid": {"uuid": "admin"}} + } + ] +} diff --git a/src/tests/p4-sd-fabric-svc-upf/p4src/README.md b/src/tests/p4-sd-fabric-svc-upf/p4src/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e17d044fb6100c13e47f1dffb779f4800c59b9d3 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/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-upf-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-sd-fabric-svc-upf/p4src/_pp.p4 b/src/tests/p4-sd-fabric-svc-upf/p4src/_pp.p4 new file mode 100644 index 0000000000000000000000000000000000000000..870509db7f530c7bf9070e4c24b5b546a2a3441d --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/p4src/_pp.p4 @@ -0,0 +1,2452 @@ +error { + PacketRejectedByParser +} +#include +#define V1MODEL_VERSION 20180101 +#include + +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; +} + +@pa_container_size("egress" , "hdr.outer_udp.sport" , 16) @pa_container_size("egress" , "hdr.outer_udp.dport" , 16) 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; + upf_bridged_metadata_t upf; + int_bridged_metadata_t int_bmd; + bit<1> _pad0; + bit<7> _pad1; + 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; + bool inner_ipv4_checksum_err; + 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 outer_ipv4; + udp_t outer_udp; + gtpu_t outer_gtpu; + gtpu_options_t outer_gtpu_options; + gtpu_ext_psc_t outer_gtpu_ext_psc; + 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(); + 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(); + 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(); + 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>()) { + 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>()) { + 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>()) { + 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(); + 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>(); + 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); + } + @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 { + 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 (fabric_md.bridged.upf.needs_gtpu_encap) { + hash(fabric_md.ecmp_hash, HashAlgorithm.crc32, base, { fabric_md.bridged.upf.tun_peer_id, fabric_md.bridged.upf.teid }, max); + } else 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 UpfIngress(inout ingress_headers_t hdr, inout fabric_ingress_metadata_t fabric_md, inout standard_metadata_t standard_md, inout bool do_upf_uplink_recirc, inout bit<1> drop_ctl) { + counter(4096, CounterType.packets_and_bytes) terminations_counter; + meter(20000, MeterType.bytes) session_meter; + meter(20000, MeterType.bytes) app_meter; + bool is_uplink = false; + bool term_hit = false; + bool sess_hit = false; + bit<32> app_ipv4_addr = 0; + l4_port_t app_l4_port = 0; + bit<8> app_ip_proto = 0; + bit<8> internal_app_id = DEFAULT_APP_ID; + ue_session_id_t ue_session_id = 0; + session_meter_idx_t session_meter_idx_internal = DEFAULT_SESSION_METER_IDX; + app_meter_idx_t app_meter_idx_internal = DEFAULT_APP_METER_IDX; + @hidden action _drop_common() { + drop_ctl = 1; + fabric_md.skip_forwarding = true; + fabric_md.skip_next = true; + } + @hidden action _term_hit(upf_ctr_idx_t ctr_id) { + fabric_md.bridged.upf.upf_ctr_id = ctr_id; + term_hit = true; + } + @hidden action _set_field_encap(teid_t teid, bit<6> qfi) { + fabric_md.bridged.upf.needs_gtpu_encap = true; + fabric_md.bridged.upf.teid = teid; + fabric_md.bridged.upf.qfi = qfi; + } + @hidden action _gtpu_decap() { + fabric_md.bridged.base.ip_eth_type = ETHERTYPE_IPV4; + fabric_md.routing_ipv4_dst = hdr.inner_ipv4.dst_addr; + hdr.ipv4 = hdr.inner_ipv4; + hdr.inner_ipv4.setInvalid(); + hdr.udp = hdr.inner_udp; + hdr.inner_udp.setInvalid(); + hdr.tcp = hdr.inner_tcp; + hdr.inner_tcp.setInvalid(); + hdr.icmp = hdr.inner_icmp; + hdr.inner_icmp.setInvalid(); + hdr.gtpu.setInvalid(); + hdr.gtpu_options.setInvalid(); + hdr.gtpu_ext_psc.setInvalid(); + fabric_md.bridged.base.encap_presence = EncapPresence.NONE; + } + @hidden action _iface_common(slice_id_t slice_id) { + fabric_md.bridged.upf.skip_upf = false; + fabric_md.is_upf_hit = true; + fabric_md.upf_slice_id = slice_id; + } + action iface_access(slice_id_t slice_id) { + _iface_common(slice_id); + } + action iface_core(slice_id_t slice_id) { + _iface_common(slice_id); + } + action iface_dbuf(slice_id_t slice_id) { + _iface_common(slice_id); + _gtpu_decap(); + } + action iface_miss() { + fabric_md.bridged.upf.skip_upf = true; + } + table interfaces { + key = { + hdr.ipv4.dst_addr : lpm @name("ipv4_dst_addr") ; + hdr.gtpu.isValid(): exact @name("gtpu_is_valid") ; + } + actions = { + iface_access; + iface_core; + iface_dbuf; + @defaultonly iface_miss; + } + const default_action = iface_miss(); + const size = 64; + } + action set_uplink_session_miss() { + _drop_common(); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_UL_SESSION_MISS; + } + action set_uplink_session_drop() { + sess_hit = true; + _drop_common(); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_UL_SESSION_DROP; + } + action set_downlink_session_miss() { + _drop_common(); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_DL_SESSION_MISS; + } + action set_downlink_session_drop() { + sess_hit = true; + _drop_common(); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_DL_SESSION_DROP; + } + action set_downlink_session(tun_peer_id_t tun_peer_id, session_meter_idx_t session_meter_idx) { + sess_hit = true; + ue_session_id = fabric_md.routing_ipv4_dst; + session_meter_idx_internal = session_meter_idx; + fabric_md.bridged.upf.tun_peer_id = tun_peer_id; + } + action set_downlink_session_buf(tun_peer_id_t tun_peer_id, session_meter_idx_t session_meter_idx) { + sess_hit = true; + ue_session_id = fabric_md.routing_ipv4_dst; + session_meter_idx_internal = session_meter_idx; + fabric_md.bridged.upf.tun_peer_id = tun_peer_id; + fabric_md.bridged.upf.skip_egress_upf_ctr = true; + } + action set_downlink_session_buf_drop() { + sess_hit = true; + ue_session_id = fabric_md.routing_ipv4_dst; + _drop_common(); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_DL_SESSION_DROP_BUFF; + } + action set_uplink_session(session_meter_idx_t session_meter_idx) { + sess_hit = true; + ue_session_id = fabric_md.lkp.ipv4_src; + session_meter_idx_internal = session_meter_idx; + _gtpu_decap(); + } + table downlink_sessions { + key = { + fabric_md.routing_ipv4_dst: exact @name("ue_addr") ; + } + actions = { + set_downlink_session; + set_downlink_session_buf; + set_downlink_session_buf_drop; + set_downlink_session_drop; + @defaultonly set_downlink_session_miss; + } + size = 100000; + const default_action = set_downlink_session_miss(); + } + table uplink_sessions { + key = { + hdr.ipv4.dst_addr: exact @name("tunnel_ipv4_dst") ; + hdr.gtpu.teid : exact @name("teid") ; + } + actions = { + set_uplink_session; + set_uplink_session_drop; + @defaultonly set_uplink_session_miss; + } + size = 100000 * 1; + const default_action = set_uplink_session_miss(); + } + action uplink_drop_miss() { + _drop_common(); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_UL_TERMINATION_MISS; + } + action downlink_drop_miss() { + _drop_common(); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_DL_TERMINATION_MISS; + } + action uplink_drop(upf_ctr_idx_t ctr_id) { + _drop_common(); + _term_hit(ctr_id); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_UL_TERMINATION_DROP; + } + action downlink_drop(upf_ctr_idx_t ctr_id) { + _drop_common(); + _term_hit(ctr_id); + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_DL_TERMINATION_DROP; + } + action app_fwd(upf_ctr_idx_t ctr_id, tc_t tc, app_meter_idx_t app_meter_idx) { + _term_hit(ctr_id); + fabric_md.upf_tc = tc; + app_meter_idx_internal = app_meter_idx; + fabric_md.tc_unknown = false; + } + action downlink_fwd_encap(upf_ctr_idx_t ctr_id, tc_t tc, teid_t teid, bit<6> qfi, app_meter_idx_t app_meter_idx) { + app_fwd(ctr_id, tc, app_meter_idx); + _set_field_encap(teid, qfi); + } + table uplink_terminations { + key = { + ue_session_id : exact @name("ue_session_id") ; + internal_app_id: exact @name("app_id") ; + } + actions = { + app_fwd; + uplink_drop; + @defaultonly uplink_drop_miss; + } + const default_action = uplink_drop_miss(); + const size = 100000; + } + table downlink_terminations { + key = { + ue_session_id : exact @name("ue_session_id") ; + internal_app_id: exact @name("app_id") ; + } + actions = { + downlink_fwd_encap; + downlink_drop; + @defaultonly downlink_drop_miss; + } + const default_action = downlink_drop_miss(); + const size = 100000; + } + action set_routing_ipv4_dst(ipv4_addr_t tun_dst_addr) { + fabric_md.routing_ipv4_dst = tun_dst_addr; + } + table ig_tunnel_peers { + key = { + fabric_md.bridged.upf.tun_peer_id: exact @name("tun_peer_id") ; + } + actions = { + set_routing_ipv4_dst; + @defaultonly nop; + } + const default_action = nop(); + const size = 256; + } + action set_app_id(bit<8> app_id) { + internal_app_id = app_id; + } + table applications { + key = { + fabric_md.upf_slice_id: exact @name("slice_id") ; + app_ipv4_addr : lpm @name("app_ipv4_addr") ; + app_l4_port : range @name("app_l4_port") ; + app_ip_proto : ternary @name("app_ip_proto") ; + } + actions = { + set_app_id; + @defaultonly nop; + } + const default_action = nop(); + size = 5 * 1; + } + direct_counter(CounterType.packets) recirc_stats; + action recirc_allow() { + standard_md.egress_spec = FAKE_V1MODEL_RECIRC_PORT; + fabric_md.bridged.base.vlan_id = DEFAULT_VLAN_ID; + do_upf_uplink_recirc = true; + fabric_md.egress_port_set = true; + fabric_md.skip_forwarding = true; + fabric_md.skip_next = true; + recirc_stats.count(); + } + action recirc_deny() { + fabric_md.bridged.int_bmd.drop_reason = IntDropReason_t.DROP_REASON_UPF_UPLINK_RECIRC_DENY; + do_upf_uplink_recirc = false; + fabric_md.skip_forwarding = true; + fabric_md.skip_next = true; + recirc_stats.count(); + } + action recirc_miss() { + recirc_stats.count(); + } + table uplink_recirc_rules { + key = { + fabric_md.lkp.ipv4_src: ternary @name("ipv4_src") ; + fabric_md.lkp.ipv4_dst: ternary @name("ipv4_dst") ; + } + actions = { + recirc_allow; + recirc_deny; + @defaultonly recirc_miss; + } + const default_action = recirc_miss; + size = 64; + counters = recirc_stats; + } + apply { + if (hdr.ipv4.isValid()) { + switch (interfaces.apply().action_run) { + iface_access: { + is_uplink = true; + app_ipv4_addr = fabric_md.lkp.ipv4_dst; + app_l4_port = fabric_md.lkp.l4_dport; + app_ip_proto = fabric_md.lkp.ip_proto; + if (fabric_md.bridged.base.encap_presence != EncapPresence.NONE) { + uplink_sessions.apply(); + } + } + iface_core: { + app_ipv4_addr = fabric_md.lkp.ipv4_src; + app_l4_port = fabric_md.lkp.l4_sport; + app_ip_proto = fabric_md.lkp.ip_proto; + downlink_sessions.apply(); + } + iface_dbuf: { + app_ipv4_addr = fabric_md.lkp.ipv4_src; + app_l4_port = fabric_md.lkp.l4_sport; + app_ip_proto = fabric_md.lkp.ip_proto; + downlink_sessions.apply(); + } + } + applications.apply(); + if (sess_hit) { + if (is_uplink) { + uplink_terminations.apply(); + uplink_recirc_rules.apply(); + } else { + downlink_terminations.apply(); + } + } else { + fabric_md.bridged.upf.skip_egress_upf_ctr = true; + } + app_meter.execute_meter((bit<32>)app_meter_idx_internal, fabric_md.upf_meter_color); + if (fabric_md.upf_meter_color != MeterColor_t.RED) { + session_meter.execute_meter((bit<32>)session_meter_idx_internal, fabric_md.upf_meter_color); + } + ig_tunnel_peers.apply(); + if (term_hit) { + terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id); + } + } + } +} + +control UpfEgress(inout ingress_headers_t hdr, inout fabric_egress_metadata_t fabric_md) { + counter(4096, CounterType.packets_and_bytes) terminations_counter; + action load_tunnel_params(l4_port_t tunnel_src_port, ipv4_addr_t tunnel_src_addr, ipv4_addr_t tunnel_dst_addr) { + hdr.ipv4.src_addr = tunnel_src_addr; + hdr.ipv4.dst_addr = tunnel_dst_addr; + hdr.udp.sport = tunnel_src_port; + } + table eg_tunnel_peers { + key = { + fabric_md.bridged.upf.tun_peer_id: exact @name("tun_peer_id") ; + } + actions = { + load_tunnel_params; + @defaultonly nop; + } + const default_action = nop(); + const size = 256; + } + @hidden action _encap_initialize() { + hdr.ipv4.version = 4w4; + hdr.ipv4.ihl = 4w5; + hdr.ipv4.dscp = 0; + hdr.ipv4.ecn = 0; + hdr.ipv4.identification = 0x1513; + hdr.ipv4.flags = 0; + hdr.ipv4.frag_offset = 0; + hdr.ipv4.ttl = DEFAULT_IPV4_TTL; + hdr.ipv4.protocol = PROTO_UDP; + hdr.udp.dport = GTPU_UDP_PORT; + hdr.gtpu.version = GTP_V1; + hdr.gtpu.pt = GTP_PROTOCOL_TYPE_GTP; + hdr.gtpu.spare = 0; + hdr.gtpu.seq_flag = 0; + hdr.gtpu.npdu_flag = 0; + hdr.gtpu.msgtype = GTPU_GPDU; + hdr.gtpu.teid = fabric_md.bridged.upf.teid; + hdr.gtpu_options.seq_num = 0; + hdr.gtpu_options.n_pdu_num = 0; + hdr.gtpu_options.next_ext = GTPU_NEXT_EXT_PSC; + hdr.gtpu_ext_psc.len = GTPU_EXT_PSC_LEN; + hdr.gtpu_ext_psc.type = GTPU_EXT_PSC_TYPE_DL; + hdr.gtpu_ext_psc.spare0 = 0; + hdr.gtpu_ext_psc.ppp = 0; + hdr.gtpu_ext_psc.rqi = 0; + hdr.gtpu_ext_psc.next_ext = GTPU_NEXT_EXT_NONE; + } + @hidden action _encap_common() { + hdr.inner_ipv4.setValid(); + hdr.inner_ipv4 = hdr.ipv4; + hdr.udp.setValid(); + hdr.gtpu.setValid(); + _encap_initialize(); + } + action gtpu_only() { + _encap_common(); + hdr.ipv4.total_len = 20 + 8 + 8 + hdr.inner_ipv4.total_len; + hdr.udp.len = 8 + 8 + hdr.inner_ipv4.total_len; + hdr.gtpu.msglen = hdr.inner_ipv4.total_len; + fabric_md.int_report_md.encap_presence = EncapPresence.GTPU_ONLY; + } + action gtpu_with_psc() { + hdr.gtpu_options.setValid(); + hdr.gtpu_ext_psc.setValid(); + _encap_common(); + hdr.ipv4.total_len = 20 + 8 + 8 + 4 + 4 + hdr.inner_ipv4.total_len; + hdr.udp.len = 8 + 8 + 4 + 4 + hdr.inner_ipv4.total_len; + hdr.gtpu.msglen = 4 + 4 + hdr.inner_ipv4.total_len; + hdr.gtpu.ex_flag = 1; + hdr.gtpu_ext_psc.qfi = fabric_md.bridged.upf.qfi; + fabric_md.int_report_md.encap_presence = EncapPresence.GTPU_WITH_PSC; + } + table gtpu_encap { + actions = { + gtpu_only; + gtpu_with_psc; + } + default_action = gtpu_only(); + const size = 1; + } + apply { + if (!fabric_md.bridged.upf.skip_upf) { + if (fabric_md.bridged.upf.needs_gtpu_encap) { + if (hdr.udp.isValid()) { + hdr.inner_udp.setValid(); + hdr.inner_udp = hdr.udp; + hdr.udp.setInvalid(); + } + if (hdr.tcp.isValid()) { + hdr.inner_tcp.setValid(); + hdr.inner_tcp = hdr.tcp; + hdr.tcp.setInvalid(); + } + if (hdr.icmp.isValid()) { + hdr.inner_icmp.setValid(); + hdr.inner_icmp = hdr.icmp; + hdr.icmp.setInvalid(); + } + gtpu_encap.apply(); + eg_tunnel_peers.apply(); + } + if (!fabric_md.bridged.upf.skip_egress_upf_ctr) { + terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id); + } + } + } +} + +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; + fabric_md.bridged.upf.skip_upf = true; + 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>(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; + fabric_md.bridged.upf.skip_upf = true; + 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; + UpfIngress() upf; + 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) { + upf.apply(hdr.ingress, fabric_md.ingress, standard_md, fabric_md.do_upf_uplink_recirc, fabric_md.drop_ctl); + } + 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; + UpfEgress() upf; + 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); + upf.apply(hdr.ingress, fabric_md.egress); + 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-sd-fabric-svc-upf/p4src/bmv2.json b/src/tests/p4-sd-fabric-svc-upf/p4src/bmv2.json new file mode 100644 index 0000000000000000000000000000000000000000..fe66f93e4c95c397fca7f6d5251802c7a8858a0e --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/p4src/bmv2.json @@ -0,0 +1,28235 @@ +{ + "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", 8, false], + ["tmp_19", 32, false], + ["tmp_20", 32, false], + ["tmp_21", 32, false], + ["tmp_22", 32, false], + ["tmp_23", 48, false], + ["tmp_24", 48, false], + ["tmp_25", 16, false], + ["tmp_26", 32, false], + ["tmp_27", 32, false], + ["tmp_28", 8, false], + ["tmp_29", 16, false], + ["tmp_30", 16, false], + ["tmp_31", 32, false], + ["qos_packet_color", 2, false], + ["upf_is_uplink", 1, false], + ["upf_term_hit", 1, false], + ["upf_sess_hit", 1, false], + ["upf_app_ipv4_addr", 32, false], + ["upf_app_l4_port", 16, false], + ["upf_app_ip_proto", 8, false], + ["upf_internal_app_id", 8, false], + ["upf_ue_session_id", 32, false], + ["upf_session_meter_idx_internal", 15, false], + ["upf_app_meter_idx_internal", 15, false], + ["tmp_32", 32, false], + ["tmp_33", 32, false], + ["tmp_34", 32, false], + ["tmp_35", 32, false], + ["tmp_36", 32, false], + ["tmp_37", 32, false], + ["tmp_38", 32, false], + ["tmp_39", 32, false], + ["tmp_40", 32, false], + ["tmp_41", 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_inner_ipv4_checksum_err38", 1, false], + ["userMetadata._egress_int_md_hop_latency40", 32, false], + ["userMetadata._egress_int_md_timestamp41", 48, false], + ["userMetadata._egress_int_md_vlan_stripped42", 1, false], + ["userMetadata._egress_int_md_queue_report43", 1, false], + ["userMetadata._egress_int_ipv4_len44", 16, false], + ["userMetadata._egress_is_int_recirc45", 1, false], + ["userMetadata._egress_pkt_length46", 16, false], + ["userMetadata._recirc_preserved_report_type47", 3, false], + ["userMetadata._recirc_preserved_egress_port48", 9, false], + ["userMetadata._recirc_preserved_drop_reason49", 8, false], + ["userMetadata._recirc_preserved_ingress_port50", 9, false], + ["_padding_1", 3, 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], + ["_upf_tun_peer_id13", 8, false], + ["_upf_upf_ctr_id14", 12, false], + ["_upf_qfi15", 6, false], + ["_upf_needs_gtpu_encap16", 1, 0], + ["_upf_skip_upf17", 1, 0], + ["_upf_skip_egress_upf_ctr18", 1, 0], + ["_upf_teid19", 32, false], + ["_upf__pad20", 4, false], + ["_int_bmd_report_type21", 3, false], + ["_int_bmd_mirror_session_id22", 10, false], + ["_int_bmd_drop_reason23", 8, false], + ["_int_bmd_queue_id24", 5, false], + ["_int_bmd_egress_port25", 9, false], + ["_int_bmd_wip_type26", 8, false], + ["__pad027", 1, false], + ["__pad128", 7, false], + ["__pad229", 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_outer_ipv437", + "id" : 63, + "header_type" : "ipv4_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_outer_udp38", + "id" : 64, + "header_type" : "udp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_outer_gtpu39", + "id" : 65, + "header_type" : "gtpu_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_outer_gtpu_options40", + "id" : 66, + "header_type" : "gtpu_options_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_outer_gtpu_ext_psc41", + "id" : 67, + "header_type" : "gtpu_ext_psc_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_ipv442", + "id" : 68, + "header_type" : "ipv4_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_ipv643", + "id" : 69, + "header_type" : "ipv6_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_udp44", + "id" : 70, + "header_type" : "udp_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_ingress_bridged4", + "id" : 71, + "header_type" : "bridged_metadata_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_bridged36", + "id" : 72, + "header_type" : "bridged_metadata_t", + "metadata" : false, + "pi_omit" : true + }, + { + "name" : "_egress_int_report_md39", + "id" : 73, + "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_type47"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._recirc_preserved_egress_port48"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._recirc_preserved_drop_reason49"] + } + ] + }, + { + "id" : 2, + "name" : "field_list231", + "elements" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._recirc_preserved_ingress_port50"] + } + ] + }, + { + "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_length46"] + }, + { + "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_port50"] + }, + { + "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_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "op" : "set" + }, + { + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_wip_type26"] + }, + { + "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_type26"] + }, + { + "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_type26"] + }, + { + "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/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/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" + }, + { + "name" : "FabricIngress.upf.session_meter", + "id" : 1, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 22, + "column" : 34, + "source_fragment" : "session_meter" + }, + "is_direct" : false, + "size" : 20000, + "rate_count" : 2, + "type" : "bytes" + }, + { + "name" : "FabricIngress.upf.app_meter", + "id" : 2, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 23, + "column" : 34, + "source_fragment" : "app_meter" + }, + "is_direct" : false, + "size" : 20000, + "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/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/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/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/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/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/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/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/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4", + "line" : 19, + "column" : 50, + "source_fragment" : "acl_counter" + } + }, + { + "name" : "FabricIngress.next.hashed_counter", + "id" : 11, + "is_direct" : true, + "binding" : "FabricIngress.next.hashed", + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4", + "line" : 115, + "column" : 50, + "source_fragment" : "hashed_counter" + } + }, + { + "name" : "FabricIngress.next.multicast_counter", + "id" : 12, + "is_direct" : true, + "binding" : "FabricIngress.next.multicast", + "source_info" : { + "filename" : "/home/ubuntu/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" : 13, + "is_direct" : true, + "binding" : "FabricIngress.slice_tc_classifier.classifier", + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4", + "line" : 20, + "column" : 40, + "source_fragment" : "classifier_stats" + } + }, + { + "name" : "FabricIngress.qos.queues_stats", + "id" : 14, + "is_direct" : true, + "binding" : "FabricIngress.qos.queues", + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4", + "line" : 106, + "column" : 40, + "source_fragment" : "queues_stats" + } + }, + { + "name" : "FabricIngress.upf.terminations_counter", + "id" : 15, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 20, + "column" : 49, + "source_fragment" : "terminations_counter" + }, + "size" : 4096, + "is_direct" : false + }, + { + "name" : "FabricIngress.upf.recirc_stats", + "id" : 16, + "is_direct" : true, + "binding" : "FabricIngress.upf.uplink_recirc_rules", + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 356, + "column" : 40, + "source_fragment" : "recirc_stats" + } + }, + { + "name" : "FabricIngress.int_watchlist.watchlist_counter", + "id" : 17, + "is_direct" : true, + "binding" : "FabricIngress.int_watchlist.watchlist", + "source_info" : { + "filename" : "/home/ubuntu/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" : 18, + "is_direct" : true, + "binding" : "FabricIngress.int_ingress.drop_report", + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4", + "line" : 64, + "column" : 50, + "source_fragment" : "drop_report_counter" + } + }, + { + "name" : "FabricEgress.stats.flow_counter", + "id" : 19, + "is_direct" : true, + "binding" : "FabricEgress.stats.flows", + "source_info" : { + "filename" : "/home/ubuntu/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" : 20, + "is_direct" : true, + "binding" : "FabricEgress.egress_next.egress_vlan", + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4", + "line" : 241, + "column" : 50, + "source_fragment" : "egress_vlan_counter" + } + }, + { + "name" : "FabricEgress.upf.terminations_counter", + "id" : 21, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 477, + "column" : 49, + "source_fragment" : "terminations_counter" + }, + "size" : 4096, + "is_direct" : false + }, + { + "name" : "FabricEgress.int_egress.report_counter", + "id" : 22, + "is_direct" : true, + "binding" : "FabricEgress.int_egress.report", + "source_info" : { + "filename" : "/home/ubuntu/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" : 23, + "is_direct" : true, + "binding" : "FabricEgress.int_egress.int_metadata", + "source_info" : { + "filename" : "/home/ubuntu/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/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_18"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_19"] + } + ] + }, + { + "name" : "calc_0", + "id" : 1, + "algo" : "crc32", + "input" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_20"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_21"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_22"] + } + ] + }, + { + "name" : "calc_1", + "id" : 2, + "algo" : "crc32", + "input" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_23"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_24"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_25"] + } + ] + }, + { + "name" : "calc_2", + "id" : 3, + "algo" : "crc32", + "input" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_26"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_27"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_28"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_29"] + }, + { + "type" : "field", + "value" : ["scalars", "tmp_30"] + } + ] + }, + { + "name" : "calc_3", + "id" : 4, + "source_info" : { + "filename" : "/home/ubuntu/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_4", + "id" : 5, + "source_info" : { + "filename" : "/home/ubuntu/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_5", + "id" : 6, + "source_info" : { + "filename" : "/home/ubuntu/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_6", + "id" : 7, + "source_info" : { + "filename" : "/home/ubuntu/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_7", + "id" : 8, + "source_info" : { + "filename" : "/home/ubuntu/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" : "nop", + "id" : 6, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "NoAction", + "id" : 7, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.stats.count", + "id" : 8, + "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/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" : 9, + "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/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_port48"] + }, + { + "type" : "field", + "value" : ["_ingress_packet_out0", "egress_port"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4", + "line" : 20, + "column" : 8, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "FabricIngress.filtering.deny", + "id" : 10, + "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/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/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/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_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x37" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 250, + "column" : 41, + "source_fragment" : "55, ..." + } + } + ] + }, + { + "name" : "FabricIngress.filtering.permit", + "id" : 11, + "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/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" : 12, + "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/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/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4", + "line" : 33, + "column" : 31, + "source_fragment" : "= port_type; ..." + } + } + ] + }, + { + "name" : "FabricIngress.filtering.set_forwarding_type", + "id" : 13, + "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/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" : 14, + "runtime_data" : [ + { + "name" : "drop_reason", + "bitwidth" : 8 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason23"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason23"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 17, + "runtime_data" : [ + { + "name" : "drop_reason", + "bitwidth" : 8 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "local", + "value" : 0 + }, + "right" : { + "type" : "hexstr", + "value" : "0xff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 18, + "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/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" : 19, + "runtime_data" : [ + { + "name" : "next_id", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_mpls6" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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" : 20, + "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/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4", + "line" : 23, + "column" : 26, + "source_fragment" : "= next_id; ..." + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.nop_routing_v4", + "id" : 21, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.forwarding.drop_routing_v4", + "id" : 22, + "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/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/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" : 23, + "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/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4", + "line" : 23, + "column" : 26, + "source_fragment" : "= next_id; ..." + } + } + ] + }, + { + "name" : "FabricIngress.forwarding.drop_routing_v6", + "id" : 24, + "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/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/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4", + "line" : 152, + "column" : 17, + "source_fragment" : "= 1; ..." + } + } + ] + }, + { + "name" : "FabricIngress.pre_next.set_mpls_label", + "id" : 25, + "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/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" : 26, + "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/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" : 27, + "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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4", + "line" : 27, + "column" : 17, + "source_fragment" : "= 0; ..." + } + } + ] + }, + { + "name" : "FabricIngress.acl.copy_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/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" : 29, + "runtime_data" : [], + "primitives" : [ + { + "op" : "clone_ingress_pkt_to_egress", + "parameters" : [ + { + "type" : "hexstr", + "value" : "0x000001ff" + }, + { + "type" : "hexstr", + "value" : "0x2" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4", + "line" : 42, + "column" : 17, + "source_fragment" : "= 1; ..." + } + } + ] + }, + { + "name" : "FabricIngress.acl.drop", + "id" : 30, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x50" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 252, + "column" : 27, + "source_fragment" : "80, ..." + } + } + ] + }, + { + "name" : "FabricIngress.acl.set_output_port", + "id" : 31, + "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/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_port48"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4", + "line" : 66, + "column" : 17, + "source_fragment" : "= 0; ..." + } + } + ] + }, + { + "name" : "FabricIngress.acl.nop_acl", + "id" : 32, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.next.output_hashed", + "id" : 33, + "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/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_port48"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/fabric-tna/p4src/v1model/../v1model/include/control/next.p4", + "line" : 18, + "column" : 34, + "source_fragment" : "= true; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.routing_hashed", + "id" : 34, + "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/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/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/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_port48"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/fabric-tna/p4src/v1model/../v1model/include/control/next.p4", + "line" : 18, + "column" : 34, + "source_fragment" : "= true; ..." + } + } + ] + }, + { + "name" : "FabricIngress.next.set_mcast_group_id", + "id" : 35, + "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/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/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" : 36, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "mcast_grp"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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" : 37, + "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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4", + "line" : 25, + "column" : 29, + "source_fragment" : "= false; ..." + } + } + ] + }, + { + "name" : "FabricIngress.slice_tc_classifier.no_classification", + "id" : 38, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_slice_id26"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4", + "line" : 31, + "column" : 29, + "source_fragment" : "= true; ..." + } + } + ] + }, + { + "name" : "FabricIngress.slice_tc_classifier.trust_dscp", + "id" : 39, + "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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4", + "line" : 40, + "column" : 29, + "source_fragment" : "= false; ..." + } + } + ] + }, + { + "name" : "FabricIngress.qos.use_upf", + "id" : 40, + "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/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" : 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_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/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" : 42, + "runtime_data" : [ + { + "name" : "qid", + "bitwidth" : 5 + } + ], + "primitives" : [] + }, + { + "name" : "FabricIngress.qos.meter_drop", + "id" : 43, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason23"] + }, + { + "type" : "hexstr", + "value" : "0xa0" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 269, + "column" : 36, + "source_fragment" : "160, ..." + } + } + ] + }, + { + "name" : "FabricIngress.qos.set_default_tc", + "id" : 44, + "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/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.upf.iface_access", + "id" : 45, + "runtime_data" : [ + { + "name" : "slice_id", + "bitwidth" : 4 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_skip_upf17"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.skip_upf = false" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_is_upf_hit29"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 86, + "column" : 29, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_upf_slice_id30"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 87, + "column" : 31, + "source_fragment" : "= slice_id; ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.iface_core", + "id" : 46, + "runtime_data" : [ + { + "name" : "slice_id", + "bitwidth" : 4 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_skip_upf17"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.skip_upf = false" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_is_upf_hit29"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 86, + "column" : 29, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_upf_slice_id30"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 87, + "column" : 31, + "source_fragment" : "= slice_id; ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.iface_dbuf", + "id" : 47, + "runtime_data" : [ + { + "name" : "slice_id", + "bitwidth" : 4 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_skip_upf17"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 85, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.skip_upf = false" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_is_upf_hit29"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 86, + "column" : 29, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_upf_slice_id30"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 87, + "column" : 31, + "source_fragment" : "= slice_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_ip_eth_type10"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 114, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"] + }, + { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "dst_addr"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 62, + "column" : 35, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_ipv47" + }, + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 64, + "column" : 17, + "source_fragment" : "= hdr.inner_ipv4; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 65, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_udp10" + }, + { + "type" : "header", + "value" : "_ingress_inner_udp20" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 66, + "column" : 16, + "source_fragment" : "= hdr.inner_udp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_udp20" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 67, + "column" : 8, + "source_fragment" : "hdr.inner_udp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_tcp9" + }, + { + "type" : "header", + "value" : "_ingress_inner_tcp19" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 68, + "column" : 16, + "source_fragment" : "= hdr.inner_tcp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_tcp19" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.inner_tcp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_icmp11" + }, + { + "type" : "header", + "value" : "_ingress_inner_icmp21" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 70, + "column" : 17, + "source_fragment" : "= hdr.inner_icmp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_icmp21" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 71, + "column" : 8, + "source_fragment" : "hdr.inner_icmp.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu12" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 72, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu_options13" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu_ext_psc14" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 74, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_encap_presence7"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 80, + "column" : 11, + "source_fragment" : "0x0, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.iface_miss", + "id" : 48, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_skip_upf17"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 104, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.skip_upf = true" + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_uplink_session_miss", + "id" : 49, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x86" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 261, + "column" : 38, + "source_fragment" : "134, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_uplink_session_drop", + "id" : 50, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 136, + "column" : 8, + "source_fragment" : "sess_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x87" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 262, + "column" : 38, + "source_fragment" : "135, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_downlink_session_miss", + "id" : 51, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x84" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 259, + "column" : 38, + "source_fragment" : "132, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_downlink_session_drop", + "id" : 52, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 151, + "column" : 8, + "source_fragment" : "sess_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x85" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 260, + "column" : 38, + "source_fragment" : "133, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_downlink_session", + "id" : 53, + "runtime_data" : [ + { + "name" : "tun_peer_id", + "bitwidth" : 8 + }, + { + "name" : "session_meter_idx", + "bitwidth" : 15 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 159, + "column" : 8, + "source_fragment" : "sess_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_ue_session_id"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 161, + "column" : 8, + "source_fragment" : "ue_session_id = fabric_md.routing_ipv4_dst; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_session_meter_idx_internal"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 162, + "column" : 8, + "source_fragment" : "session_meter_idx_internal = session_meter_idx" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_tun_peer_id13"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 163, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.tun_peer_id = tun_peer_id" + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_downlink_session_buf", + "id" : 54, + "runtime_data" : [ + { + "name" : "tun_peer_id", + "bitwidth" : 8 + }, + { + "name" : "session_meter_idx", + "bitwidth" : 15 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 167, + "column" : 8, + "source_fragment" : "sess_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_ue_session_id"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 169, + "column" : 8, + "source_fragment" : "ue_session_id = fabric_md.routing_ipv4_dst; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_session_meter_idx_internal"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 170, + "column" : 8, + "source_fragment" : "session_meter_idx_internal = session_meter_idx" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_tun_peer_id13"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 171, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.tun_peer_id = tun_peer_id" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_skip_egress_upf_ctr18"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 175, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.skip_egress_upf_ctr = true" + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_downlink_session_buf_drop", + "id" : 55, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 179, + "column" : 8, + "source_fragment" : "sess_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_ue_session_id"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 182, + "column" : 8, + "source_fragment" : "ue_session_id = fabric_md.routing_ipv4_dst; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x88" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 263, + "column" : 43, + "source_fragment" : "136, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_uplink_session", + "id" : 56, + "runtime_data" : [ + { + "name" : "session_meter_idx", + "bitwidth" : 15 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 190, + "column" : 8, + "source_fragment" : "sess_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_ue_session_id"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 192, + "column" : 8, + "source_fragment" : "ue_session_id = fabric_md.lkp.ipv4_src; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_session_meter_idx_internal"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 193, + "column" : 8, + "source_fragment" : "session_meter_idx_internal = session_meter_idx" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_ip_eth_type10"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 114, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"] + }, + { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "dst_addr"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 62, + "column" : 35, + "source_fragment" : "= hdr.inner_ipv4.dst_addr; ..." + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_ipv47" + }, + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 64, + "column" : 17, + "source_fragment" : "= hdr.inner_ipv4; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 65, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_udp10" + }, + { + "type" : "header", + "value" : "_ingress_inner_udp20" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 66, + "column" : 16, + "source_fragment" : "= hdr.inner_udp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_udp20" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 67, + "column" : 8, + "source_fragment" : "hdr.inner_udp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_tcp9" + }, + { + "type" : "header", + "value" : "_ingress_inner_tcp19" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 68, + "column" : 16, + "source_fragment" : "= hdr.inner_tcp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_tcp19" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 69, + "column" : 8, + "source_fragment" : "hdr.inner_tcp.setInvalid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_icmp11" + }, + { + "type" : "header", + "value" : "_ingress_inner_icmp21" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 70, + "column" : 17, + "source_fragment" : "= hdr.inner_icmp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_icmp21" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 71, + "column" : 8, + "source_fragment" : "hdr.inner_icmp.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu12" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 72, + "column" : 8, + "source_fragment" : "hdr.gtpu.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu_options13" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setInvalid()" + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu_ext_psc14" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 74, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setInvalid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_encap_presence7"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 80, + "column" : 11, + "source_fragment" : "0x0, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.uplink_drop_miss", + "id" : 57, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x8b" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 266, + "column" : 42, + "source_fragment" : "139, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.downlink_drop_miss", + "id" : 58, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x89" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 264, + "column" : 42, + "source_fragment" : "137, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.uplink_drop", + "id" : 59, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 12 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_upf_ctr_id14"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.upf_ctr_id = ctr_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_term_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "term_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x8c" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 267, + "column" : 42, + "source_fragment" : "140, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.downlink_drop", + "id" : 60, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 12 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 39, + "column" : 17, + "source_fragment" : "= 1; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 40, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 41, + "column" : 28, + "source_fragment" : "= true; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_upf_ctr_id14"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.upf_ctr_id = ctr_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_term_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "term_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x8a" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 265, + "column" : 42, + "source_fragment" : "138, ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.app_fwd", + "id" : 61, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 12 + }, + { + "name" : "tc", + "bitwidth" : 2 + }, + { + "name" : "app_meter_idx", + "bitwidth" : 15 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_upf_ctr_id14"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.upf_ctr_id = ctr_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_term_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "term_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_upf_tc31"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 265, + "column" : 25, + "source_fragment" : "= tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_meter_idx_internal"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 266, + "column" : 8, + "source_fragment" : "app_meter_idx_internal = app_meter_idx" + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 267, + "column" : 29, + "source_fragment" : "= false; ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.downlink_fwd_encap", + "id" : 62, + "runtime_data" : [ + { + "name" : "ctr_id", + "bitwidth" : 12 + }, + { + "name" : "tc", + "bitwidth" : 2 + }, + { + "name" : "teid", + "bitwidth" : 32 + }, + { + "name" : "qfi", + "bitwidth" : 6 + }, + { + "name" : "app_meter_idx", + "bitwidth" : 15 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_upf_ctr_id14"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 46, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.upf_ctr_id = ctr_id; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_term_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 47, + "column" : 8, + "source_fragment" : "term_hit = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_upf_tc31"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 265, + "column" : 25, + "source_fragment" : "= tc; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_meter_idx_internal"] + }, + { + "type" : "runtime_data", + "value" : 4 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 266, + "column" : 8, + "source_fragment" : "app_meter_idx_internal = app_meter_idx; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 267, + "column" : 29, + "source_fragment" : "= false; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_needs_gtpu_encap16"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 54, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.needs_gtpu_encap = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_teid19"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 55, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.teid = teid; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_qfi15"] + }, + { + "type" : "runtime_data", + "value" : 3 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 56, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.qfi = qfi; ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_routing_ipv4_dst", + "id" : 63, + "runtime_data" : [ + { + "name" : "tun_dst_addr", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 314, + "column" : 35, + "source_fragment" : "= tun_dst_addr; ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.set_app_id", + "id" : 64, + "runtime_data" : [ + { + "name" : "app_id", + "bitwidth" : 8 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_internal_app_id"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 334, + "column" : 8, + "source_fragment" : "internal_app_id = app_id" + } + } + ] + }, + { + "name" : "FabricIngress.upf.recirc_allow", + "id" : 65, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + }, + { + "type" : "hexstr", + "value" : "0x01fe" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4", + "line" : 36, + "column" : 42, + "source_fragment" : "510; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_vlan_id6"] + }, + { + "type" : "hexstr", + "value" : "0x0ffe" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 147, + "column" : 34, + "source_fragment" : "12w4094; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._do_upf_uplink_recirc1"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 364, + "column" : 29, + "source_fragment" : "= true; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 365, + "column" : 34, + "source_fragment" : "= true; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 366, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 367, + "column" : 28, + "source_fragment" : "= true; ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.recirc_deny", + "id" : 66, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_drop_reason23"] + }, + { + "type" : "hexstr", + "value" : "0x96" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 268, + "column" : 41, + "source_fragment" : "150, ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._do_upf_uplink_recirc1"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 375, + "column" : 29, + "source_fragment" : "= false; ..." + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 376, + "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/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 377, + "column" : 28, + "source_fragment" : "= true; ..." + } + } + ] + }, + { + "name" : "FabricIngress.upf.recirc_miss", + "id" : 67, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricIngress.int_watchlist.mark_to_report", + "id" : 68, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_report_type21"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_type47"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 223, + "column" : 45, + "source_fragment" : "1; ..." + } + } + ] + }, + { + "name" : "FabricIngress.int_watchlist.no_report", + "id" : 69, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_report_type21"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_type47"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 219, + "column" : 50, + "source_fragment" : "0; ..." + } + } + ] + }, + { + "name" : "FabricIngress.int_watchlist.no_report_collector", + "id" : 70, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_report_type21"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 219, + "column" : 50, + "source_fragment" : "0; ..." + } + } + ] + }, + { + "name" : "FabricIngress.int_ingress.report_drop", + "id" : 71, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_bmd_type0"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_type21"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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" : ["_ingress_bridged4", "_upf_skip_upf17"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4", + "line" : 73, + "column" : 8, + "source_fragment" : "fabric_md.bridged.upf.skip_upf = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4", + "line" : 36, + "column" : 42, + "source_fragment" : "510; ..." + } + } + ] + }, + { + "name" : "fabric_v1model64", + "id" : 72, + "runtime_data" : [], + "primitives" : [ + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 64, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "fabric_v1model61", + "id" : 73, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 61, + "column" : 8, + "source_fragment" : "mark_to_drop(standard_md)" + } + } + ] + }, + { + "name" : "fabric_v1model70", + "id" : 74, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_ig_port3"] + }, + { + "type" : "hexstr", + "value" : "0x01fe" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4", + "line" : 36, + "column" : 42, + "source_fragment" : "510; ..." + } + } + ] + }, + { + "name" : "lookup_md_init21", + "id" : 75, + "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/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" : 76, + "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/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4", + "line" : 19, + "column" : 23, + "source_fragment" : "= 0; ..." + } + } + ] + }, + { + "name" : "lookup_md_init38", + "id" : 77, + "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/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/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" : 78, + "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/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/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" : 79, + "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/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/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" : 80, + "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/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/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/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/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" : 81, + "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/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/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" : 82, + "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/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/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" : 83, + "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/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/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" : 84, + "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/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/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/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/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" : 85, + "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/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/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/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/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/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4", + "line" : 31, + "column" : 25, + "source_fragment" : "= 0; ..." + } + } + ] + }, + { + "name" : "upf409", + "id" : 86, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_is_uplink"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 409, + "column" : 20, + "source_fragment" : "is_uplink = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ipv4_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_dst12"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 410, + "column" : 20, + "source_fragment" : "app_ipv4_addr = fabric_md.lkp.ipv4_dst; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_l4_port"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_l4_dport15"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 411, + "column" : 20, + "source_fragment" : "app_l4_port = fabric_md.lkp.l4_dport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ip_proto"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 412, + "column" : 20, + "source_fragment" : "app_ip_proto = fabric_md.lkp.ip_proto; ..." + } + } + ] + }, + { + "name" : "upf418", + "id" : 87, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ipv4_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 418, + "column" : 20, + "source_fragment" : "app_ipv4_addr = fabric_md.lkp.ipv4_src; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_l4_port"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 419, + "column" : 20, + "source_fragment" : "app_l4_port = fabric_md.lkp.l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ip_proto"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 420, + "column" : 20, + "source_fragment" : "app_ip_proto = fabric_md.lkp.ip_proto; ..." + } + } + ] + }, + { + "name" : "upf424", + "id" : 88, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ipv4_addr"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 424, + "column" : 20, + "source_fragment" : "app_ipv4_addr = fabric_md.lkp.ipv4_src; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_l4_port"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 425, + "column" : 20, + "source_fragment" : "app_l4_port = fabric_md.lkp.l4_sport; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ip_proto"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 426, + "column" : 20, + "source_fragment" : "app_ip_proto = fabric_md.lkp.ip_proto; ..." + } + } + ] + }, + { + "name" : "upf443", + "id" : 89, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_skip_egress_upf_ctr18"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 443, + "column" : 16, + "source_fragment" : "fabric_md.bridged.upf.skip_egress_upf_ctr = true" + } + } + ] + }, + { + "name" : "upf448", + "id" : 90, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_14"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["scalars", "upf_session_meter_idx_internal"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 448, + "column" : 44, + "source_fragment" : "(bit<32>) session_meter_idx_internal" + } + }, + { + "op" : "execute_meter", + "parameters" : [ + { + "type" : "meter_array", + "value" : "FabricIngress.upf.session_meter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_14"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_upf_meter_color32"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 448, + "column" : 16, + "source_fragment" : "session_meter.execute_meter((bit<32>) session_meter_idx_internal, fabric_md.upf_meter_color)" + } + } + ] + }, + { + "name" : "upf445", + "id" : 91, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_15"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["scalars", "upf_app_meter_idx_internal"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 445, + "column" : 36, + "source_fragment" : "(bit<32>) app_meter_idx_internal" + } + }, + { + "op" : "execute_meter", + "parameters" : [ + { + "type" : "meter_array", + "value" : "FabricIngress.upf.app_meter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_15"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_upf_meter_color32"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 445, + "column" : 12, + "source_fragment" : "app_meter.execute_meter((bit<32>) app_meter_idx_internal, fabric_md.upf_meter_color)" + } + } + ] + }, + { + "name" : "upf461", + "id" : 92, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_16"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_upf_ctr_id14"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 461, + "column" : 43, + "source_fragment" : "(bit<32>)fabric_md.bridged.upf.upf_ctr_id" + } + }, + { + "op" : "count", + "parameters" : [ + { + "type" : "counter_array", + "value" : "FabricIngress.upf.terminations_counter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_16"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 461, + "column" : 16, + "source_fragment" : "terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id)" + } + } + ] + }, + { + "name" : "upf25", + "id" : 93, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_is_uplink"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 25, + "column" : 4, + "source_fragment" : "bool is_uplink = false;" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_term_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 26, + "column" : 4, + "source_fragment" : "bool term_hit = false;" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : false + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 27, + "column" : 4, + "source_fragment" : "bool sess_hit = false;" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ipv4_addr"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 28, + "column" : 4, + "source_fragment" : "bit<32> app_ipv4_addr = 0;" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_l4_port"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 29, + "column" : 4, + "source_fragment" : "l4_port_t app_l4_port = 0;" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_ip_proto"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 30, + "column" : 4, + "source_fragment" : "bit<8> app_ip_proto = 0;" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_internal_app_id"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 55, + "column" : 30, + "source_fragment" : "0; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_ue_session_id"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 32, + "column" : 4, + "source_fragment" : "ue_session_id_t ue_session_id = 0;" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_session_meter_idx_internal"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 72, + "column" : 54, + "source_fragment" : "0; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "upf_app_meter_idx_internal"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 73, + "column" : 46, + "source_fragment" : "0; ..." + } + } + ] + }, + { + "name" : "filtering100", + "id" : 94, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_17"] + }, + { + "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/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_17"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : "hasher28", + "id" : 95, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_18"] + }, + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_tun_peer_id13"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 32, + "column" : 17, + "source_fragment" : "fabric_md.bridged" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_19"] + }, + { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_teid19"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 32, + "column" : 52, + "source_fragment" : "fabric_md.bridged" + } + }, + { + "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/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 28, + "column" : 12, + "source_fragment" : "hash( ..." + } + } + ] + }, + { + "name" : "hasher39", + "id" : 96, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_20"] + }, + { + "type" : "field", + "value" : ["_ingress_ipv47", "src_addr"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_21"] + }, + { + "type" : "field", + "value" : ["_ingress_ipv47", "dst_addr"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_22"] + }, + { + "type" : "field", + "value" : ["_ingress_gtpu12", "teid"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_0" + }, + { + "type" : "hexstr", + "value" : "0xffffffff" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 39, + "column" : 12, + "source_fragment" : "hash( ..." + } + } + ] + }, + { + "name" : "hasher50", + "id" : 97, + "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/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 50, + "column" : 32, + "source_fragment" : "= fabric_md.bridged.base.inner_hash; ..." + } + } + ] + }, + { + "name" : "hasher66", + "id" : 98, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_inner_hash1"] + }, + { + "type" : "hexstr", + "value" : "0x00000000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_23"] + }, + { + "type" : "field", + "value" : ["_ingress_ethernet3", "dst_addr"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_24"] + }, + { + "type" : "field", + "value" : ["_ingress_ethernet3", "src_addr"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_25"] + }, + { + "type" : "field", + "value" : ["_ingress_eth_type5", "value"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_1" + }, + { + "type" : "hexstr", + "value" : "0xffffffff" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 67, + "column" : 12, + "source_fragment" : "hash( ..." + } + } + ] + }, + { + "name" : "hasher17", + "id" : 99, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_26"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_src11"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 91, + "column" : 34, + "source_fragment" : "fabric_md" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_27"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ipv4_dst12"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 91, + "column" : 34, + "source_fragment" : "fabric_md" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_28"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_ip_proto13"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 91, + "column" : 34, + "source_fragment" : "fabric_md" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_29"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_l4_sport14"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 91, + "column" : 34, + "source_fragment" : "fabric_md" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_30"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._ingress_lkp_l4_dport15"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_2" + }, + { + "type" : "hexstr", + "value" : "0xffffffff" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 17, + "column" : 8, + "source_fragment" : "hash( ..." + } + } + ] + }, + { + "name" : "slicing174", + "id" : 100, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_31"] + }, + { + "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/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_31"] + }, + { + "type" : "field", + "value" : ["scalars", "qos_packet_color"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 101, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "qos_packet_color"] + }, + { + "type" : "hexstr", + "value" : "0x02" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4", + "line" : 25, + "column" : 10, + "source_fragment" : "2 ..." + } + } + ] + }, + { + "name" : "int112", + "id" : 102, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_bridged4", "_int_bmd_egress_port25"] + }, + { + "type" : "field", + "value" : ["standard_metadata", "egress_spec"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_id24"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 103, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 110, + "column" : 12, + "source_fragment" : "mark_to_drop(standard_md)" + } + } + ] + }, + { + "name" : "fabric_v1model106", + "id" : 104, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_egress_bridged36" + }, + { + "type" : "header", + "value" : "_ingress_bridged4" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 106, + "column" : 8, + "source_fragment" : "fabric_md.egress.bridged = fabric_md" + } + } + ] + }, + { + "name" : "nop", + "id" : 105, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 106, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 107, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 108, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 109, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 110, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "nop", + "id" : 111, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.stats.count", + "id" : 112, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.pkt_io_egress.set_switch_info", + "id" : 113, + "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/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" : 114, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_mpls6" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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" : 115, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_mpls6" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 112, + "column" : 31, + "source_fragment" : "0x8847; ..." + } + } + ] + }, + { + "name" : "FabricEgress.egress_next.push_vlan", + "id" : 116, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_vlan_tag4" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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" : 117, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_vlan_tag4" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 118, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason49"] + }, + { + "type" : "hexstr", + "value" : "0x82" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 257, + "column" : 35, + "source_fragment" : "130, ..." + } + } + ] + }, + { + "name" : "FabricEgress.dscp_rewriter.rewrite", + "id" : 119, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.dscp_rewriter.clear", + "id" : 120, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "dscp_rewriter_tmp_dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4", + "line" : 198, + "column" : 8, + "source_fragment" : "tmp_dscp = 0" + } + } + ] + }, + { + "name" : "FabricEgress.upf.load_tunnel_params", + "id" : 121, + "runtime_data" : [ + { + "name" : "tunnel_src_port", + "bitwidth" : 16 + }, + { + "name" : "tunnel_src_addr", + "bitwidth" : 32 + }, + { + "name" : "tunnel_dst_addr", + "bitwidth" : 32 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "src_addr"] + }, + { + "type" : "runtime_data", + "value" : 1 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 486, + "column" : 8, + "source_fragment" : "hdr.ipv4.src_addr = tunnel_src_addr" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "dst_addr"] + }, + { + "type" : "runtime_data", + "value" : 2 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 487, + "column" : 8, + "source_fragment" : "hdr.ipv4.dst_addr = tunnel_dst_addr" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_udp10", "sport"] + }, + { + "type" : "runtime_data", + "value" : 0 + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 488, + "column" : 8, + "source_fragment" : "hdr.udp.sport = tunnel_src_port" + } + } + ] + }, + { + "name" : "FabricEgress.upf.gtpu_only", + "id" : 122, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 551, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setValid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + }, + { + "type" : "header", + "value" : "_ingress_ipv47" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 552, + "column" : 23, + "source_fragment" : "= hdr.ipv4; ..." + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_udp10" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 553, + "column" : 8, + "source_fragment" : "hdr.udp.setValid()" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu12" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 554, + "column" : 8, + "source_fragment" : "hdr.gtpu.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "version"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 506, + "column" : 8, + "source_fragment" : "hdr.ipv4.version = 4w4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "ihl"] + }, + { + "type" : "hexstr", + "value" : "0x05" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 507, + "column" : 8, + "source_fragment" : "hdr.ipv4.ihl = 4w5" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 508, + "column" : 8, + "source_fragment" : "hdr.ipv4.dscp = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "ecn"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 509, + "column" : 8, + "source_fragment" : "hdr.ipv4.ecn = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "identification"] + }, + { + "type" : "hexstr", + "value" : "0x1513" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 511, + "column" : 8, + "source_fragment" : "hdr.ipv4.identification = 0x1513" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "flags"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 512, + "column" : 8, + "source_fragment" : "hdr.ipv4.flags = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "frag_offset"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 513, + "column" : 8, + "source_fragment" : "hdr.ipv4.frag_offset = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 150, + "column" : 32, + "source_fragment" : "64; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "protocol"] + }, + { + "type" : "hexstr", + "value" : "0x11" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 134, + "column" : 25, + "source_fragment" : "17; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_udp10", "dport"] + }, + { + "type" : "hexstr", + "value" : "0x0868" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 86, + "column" : 30, + "source_fragment" : "2152; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "version"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 87, + "column" : 22, + "source_fragment" : "3w1; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "pt"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 89, + "column" : 37, + "source_fragment" : "1w1; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "spare"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 527, + "column" : 8, + "source_fragment" : "hdr.gtpu.spare = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "seq_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 529, + "column" : 8, + "source_fragment" : "hdr.gtpu.seq_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "npdu_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 530, + "column" : 8, + "source_fragment" : "hdr.gtpu.npdu_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "msgtype"] + }, + { + "type" : "hexstr", + "value" : "0xff" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 88, + "column" : 25, + "source_fragment" : "0xff; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "teid"] + }, + { + "type" : "field", + "value" : ["_egress_bridged36", "_upf_teid19"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 533, + "column" : 8, + "source_fragment" : "hdr.gtpu.teid = fabric_md.bridged" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_options13", "seq_num"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 535, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.seq_num = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_options13", "n_pdu_num"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 536, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.n_pdu_num = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_options13", "next_ext"] + }, + { + "type" : "hexstr", + "value" : "0x85" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 91, + "column" : 33, + "source_fragment" : "0x85; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "len"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 94, + "column" : 32, + "source_fragment" : "8w1; // 1*4-octets ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "type"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 92, + "column" : 36, + "source_fragment" : "4w0; // Downlink ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "spare0"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 541, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.spare0 = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "ppp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 542, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.ppp = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "rqi"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 543, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.rqi = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "next_ext"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 90, + "column" : 34, + "source_fragment" : "0x0; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "hexstr", + "value" : "0x0024" + }, + "right" : { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "total_len"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 563, + "column" : 8, + "source_fragment" : "hdr.ipv4.total_len = 20 + 8 + 8 ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_udp10", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "hexstr", + "value" : "0x0010" + }, + "right" : { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "total_len"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 565, + "column" : 8, + "source_fragment" : "hdr.udp.len = 8 + 8 ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "msglen"] + }, + { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "total_len"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 567, + "column" : 8, + "source_fragment" : "hdr.gtpu.msglen = hdr.inner_ipv4.total_len" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "encap_presence"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 81, + "column" : 16, + "source_fragment" : "0x1, ..." + } + } + ] + }, + { + "name" : "FabricEgress.upf.gtpu_with_psc", + "id" : 123, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu_options13" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 577, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.setValid()" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu_ext_psc14" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 578, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.setValid()" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 551, + "column" : 8, + "source_fragment" : "hdr.inner_ipv4.setValid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_ipv418" + }, + { + "type" : "header", + "value" : "_ingress_ipv47" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 552, + "column" : 23, + "source_fragment" : "= hdr.ipv4; ..." + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_udp10" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 553, + "column" : 8, + "source_fragment" : "hdr.udp.setValid()" + } + }, + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_gtpu12" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 554, + "column" : 8, + "source_fragment" : "hdr.gtpu.setValid()" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "version"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 506, + "column" : 8, + "source_fragment" : "hdr.ipv4.version = 4w4" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "ihl"] + }, + { + "type" : "hexstr", + "value" : "0x05" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 507, + "column" : 8, + "source_fragment" : "hdr.ipv4.ihl = 4w5" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "dscp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 508, + "column" : 8, + "source_fragment" : "hdr.ipv4.dscp = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "ecn"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 509, + "column" : 8, + "source_fragment" : "hdr.ipv4.ecn = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "identification"] + }, + { + "type" : "hexstr", + "value" : "0x1513" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 511, + "column" : 8, + "source_fragment" : "hdr.ipv4.identification = 0x1513" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "flags"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 512, + "column" : 8, + "source_fragment" : "hdr.ipv4.flags = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "frag_offset"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 513, + "column" : 8, + "source_fragment" : "hdr.ipv4.frag_offset = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "ttl"] + }, + { + "type" : "hexstr", + "value" : "0x40" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 150, + "column" : 32, + "source_fragment" : "64; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "protocol"] + }, + { + "type" : "hexstr", + "value" : "0x11" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 134, + "column" : 25, + "source_fragment" : "17; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_udp10", "dport"] + }, + { + "type" : "hexstr", + "value" : "0x0868" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 86, + "column" : 30, + "source_fragment" : "2152; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "version"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 87, + "column" : 22, + "source_fragment" : "3w1; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "pt"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 89, + "column" : 37, + "source_fragment" : "1w1; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "spare"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 527, + "column" : 8, + "source_fragment" : "hdr.gtpu.spare = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "seq_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 529, + "column" : 8, + "source_fragment" : "hdr.gtpu.seq_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "npdu_flag"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 530, + "column" : 8, + "source_fragment" : "hdr.gtpu.npdu_flag = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "msgtype"] + }, + { + "type" : "hexstr", + "value" : "0xff" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 88, + "column" : 25, + "source_fragment" : "0xff; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "teid"] + }, + { + "type" : "field", + "value" : ["_egress_bridged36", "_upf_teid19"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 533, + "column" : 8, + "source_fragment" : "hdr.gtpu.teid = fabric_md.bridged" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_options13", "seq_num"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 535, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.seq_num = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_options13", "n_pdu_num"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 536, + "column" : 8, + "source_fragment" : "hdr.gtpu_options.n_pdu_num = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_options13", "next_ext"] + }, + { + "type" : "hexstr", + "value" : "0x85" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 91, + "column" : 33, + "source_fragment" : "0x85; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "len"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 94, + "column" : 32, + "source_fragment" : "8w1; // 1*4-octets ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "type"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 92, + "column" : 36, + "source_fragment" : "4w0; // Downlink ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "spare0"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 541, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.spare0 = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "ppp"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 542, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.ppp = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "rqi"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 543, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.rqi = 0" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "next_ext"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 90, + "column" : 34, + "source_fragment" : "0x0; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_ipv47", "total_len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "hexstr", + "value" : "0x002c" + }, + "right" : { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "total_len"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 580, + "column" : 8, + "source_fragment" : "hdr.ipv4.total_len = 20 + 8 + 8 ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_udp10", "len"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "hexstr", + "value" : "0x0018" + }, + "right" : { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "total_len"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 583, + "column" : 8, + "source_fragment" : "hdr.udp.len = 8 + 8 ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "msglen"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "expression", + "value" : { + "op" : "+", + "left" : { + "type" : "hexstr", + "value" : "0x0008" + }, + "right" : { + "type" : "field", + "value" : ["_ingress_inner_ipv418", "total_len"] + } + } + }, + "right" : { + "type" : "hexstr", + "value" : "0xffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 586, + "column" : 8, + "source_fragment" : "hdr.gtpu.msglen = 4 + 4 ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu12", "ex_flag"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 588, + "column" : 8, + "source_fragment" : "hdr.gtpu.ex_flag = 1" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_ingress_gtpu_ext_psc14", "qfi"] + }, + { + "type" : "field", + "value" : ["_egress_bridged36", "_upf_qfi15"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 589, + "column" : 8, + "source_fragment" : "hdr.gtpu_ext_psc.qfi = fabric_md.bridged" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "encap_presence"] + }, + { + "type" : "hexstr", + "value" : "0x02" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 82, + "column" : 20, + "source_fragment" : "0x2, ..." + } + } + ] + }, + { + "name" : "FabricEgress.parser_emulator.parse_int_ingress_drop", + "id" : 124, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "parser_emulator_hdr_report_ethernet" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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_md39" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "ip_eth_type"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 114, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "report_type"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 221, + "column" : 45, + "source_fragment" : "4; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "mirror_type"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_md39", "bmd_type"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 169, + "column" : 23, + "source_fragment" : "4, ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "encap_presence"] + }, + { + "type" : "field", + "value" : ["_egress_bridged36", "_base_encap_presence7"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "flow_hash"] + }, + { + "type" : "field", + "value" : ["_egress_bridged36", "_base_inner_hash1"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason23"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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" : 125, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "parser_emulator_hdr_report_ethernet" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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_md39" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "ip_eth_type"] + }, + { + "type" : "hexstr", + "value" : "0x0800" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 114, + "column" : 31, + "source_fragment" : "0x0800; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "report_type"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 221, + "column" : 45, + "source_fragment" : "4; ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "mirror_type"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_md39", "bmd_type"] + }, + { + "type" : "hexstr", + "value" : "0x04" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 169, + "column" : 23, + "source_fragment" : "4, ..." + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_int_report_md39", "encap_presence"] + }, + { + "type" : "field", + "value" : ["_egress_bridged36", "_base_encap_presence7"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "flow_hash"] + }, + { + "type" : "field", + "value" : ["_egress_bridged36", "_base_inner_hash1"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason23"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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" : 126, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "parser_emulator_hdr_report_ethernet" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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_md39", "bmd_type"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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" : ["_egress_bridged36", "_upf_skip_upf17"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4", + "line" : 114, + "column" : 12, + "source_fragment" : "fabric_md.bridged.upf.skip_upf = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["parser_emulator_hdr_report_fixed_header", "ig_tstamp"] + }, + { + "type" : "field", + "value" : ["_egress_int_report_md39", "ig_tstamp"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "ig_port"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "eg_port"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "queue_id"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_md39", "queue_occupancy"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "eg_tstamp"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 127, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "parser_emulator_hdr_report_ethernet" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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_md39", "bmd_type"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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" : ["_egress_bridged36", "_upf_skip_upf17"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4", + "line" : 114, + "column" : 12, + "source_fragment" : "fabric_md.bridged.upf.skip_upf = true" + } + }, + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["parser_emulator_hdr_report_fixed_header", "ig_tstamp"] + }, + { + "type" : "field", + "value" : ["_egress_int_report_md39", "ig_tstamp"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "ig_port"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "eg_port"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "queue_id"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_md39", "queue_occupancy"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_md39", "eg_tstamp"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 128, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.int_egress.reset_quota", + "id" : 129, + "runtime_data" : [], + "primitives" : [] + }, + { + "name" : "FabricEgress.int_egress.set_config", + "id" : 130, + "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/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/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" : 131, + "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/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/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/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/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_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/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_32"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_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/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_33"] + }, + { + "type" : "field", + "value" : ["scalars", "int_egress_reg"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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" : 132, + "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/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/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/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/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_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/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_34"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_35"] + }, + { + "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/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_35"] + }, + { + "type" : "field", + "value" : ["scalars", "int_egress_reg"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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/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" : 133, + "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/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/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/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/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_36"] + }, + { + "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/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_36"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_37"] + }, + { + "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/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_37"] + }, + { + "type" : "field", + "value" : ["scalars", "int_egress_reg"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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_reason23"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 134, + "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/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/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/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/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_38"] + }, + { + "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/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_38"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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_39"] + }, + { + "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/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_39"] + }, + { + "type" : "field", + "value" : ["scalars", "int_egress_reg"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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_reason23"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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" : 135, + "runtime_data" : [ + { + "name" : "report_type", + "bitwidth" : 3 + } + ], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["int_egress_fabric_md_bridged", "_int_bmd_mirror_session_id22"] + }, + { + "type" : "hexstr", + "value" : "0x01fa" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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/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/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" : 136, + "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/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/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" : 137, + "runtime_data" : [], + "primitives" : [ + { + "op" : "exit", + "parameters" : [], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 136, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "fabric_v1model133", + "id" : 138, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._egress_cpu_port37"] + }, + { + "type" : "hexstr", + "value" : "0x0000" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 139, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_ipv47" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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" : 140, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_bridged36", "_int_bmd_drop_reason23"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._recirc_preserved_drop_reason49"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_type21"] + }, + { + "type" : "field", + "value" : ["scalars", "userMetadata._recirc_preserved_report_type47"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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_recirc45"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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" : 141, + "runtime_data" : [], + "primitives" : [ + { + "op" : "recirculate", + "parameters" : [ + { + "type" : "hexstr", + "value" : "0x3" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 142, + "runtime_data" : [], + "primitives" : [ + { + "op" : "recirculate", + "parameters" : [ + { + "type" : "hexstr", + "value" : "0x1" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 143, + "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/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/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/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/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/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/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/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/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" : 144, + "runtime_data" : [], + "primitives" : [ + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_ipv47" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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" : 145, + "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/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/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/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/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/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/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/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/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_recirc45"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "b2d", + "left" : null, + "right" : { + "type" : "bool", + "value" : true + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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" : 146, + "runtime_data" : [], + "primitives" : [ + { + "op" : "recirculate", + "parameters" : [ + { + "type" : "hexstr", + "value" : "0x4" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 147, + "runtime_data" : [], + "primitives" : [ + { + "op" : "recirculate", + "parameters" : [ + { + "type" : "hexstr", + "value" : "0x1" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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" : 148, + "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/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/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/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/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/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/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/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/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4", + "line" : 173, + "column" : 27, + "source_fragment" : "= hdr; ..." + } + } + ] + }, + { + "name" : "packetio51", + "id" : 149, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_packet_in1" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_port50"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4", + "line" : 54, + "column" : 12, + "source_fragment" : "exit" + } + } + ] + }, + { + "name" : "packetio60", + "id" : 150, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._egress_pkt_length46"] + }, + { + "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/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" : 151, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["_egress_bridged36", "_int_bmd_report_type21"] + }, + { + "type" : "hexstr", + "value" : "0x00" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/fabric-tna/p4src/v1model/../v1model/include/control/next.p4", + "line" : 285, + "column" : 21, + "source_fragment" : "= 1; ..." + } + } + ] + }, + { + "name" : "next325", + "id" : 152, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason49"] + }, + { + "type" : "hexstr", + "value" : "0x83" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 258, + "column" : 32, + "source_fragment" : "131, ..." + } + } + ] + }, + { + "name" : "next323", + "id" : 153, + "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/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" : 154, + "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/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" : 155, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason49"] + }, + { + "type" : "hexstr", + "value" : "0x1a" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 247, + "column" : 30, + "source_fragment" : "26, ..." + } + } + ] + }, + { + "name" : "next343", + "id" : 156, + "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/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" : 157, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "userMetadata._drop_ctl2"] + }, + { + "type" : "hexstr", + "value" : "0x01" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_reason49"] + }, + { + "type" : "hexstr", + "value" : "0x1a" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4", + "line" : 247, + "column" : 30, + "source_fragment" : "26, ..." + } + } + ] + }, + { + "name" : "upf610", + "id" : 158, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_udp20" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 610, + "column" : 20, + "source_fragment" : "hdr.inner_udp.setValid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_udp20" + }, + { + "type" : "header", + "value" : "_ingress_udp10" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 611, + "column" : 34, + "source_fragment" : "= hdr.udp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_udp10" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 612, + "column" : 20, + "source_fragment" : "hdr.udp.setInvalid()" + } + } + ] + }, + { + "name" : "upf615", + "id" : 159, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_tcp19" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 615, + "column" : 20, + "source_fragment" : "hdr.inner_tcp.setValid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_tcp19" + }, + { + "type" : "header", + "value" : "_ingress_tcp9" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 616, + "column" : 34, + "source_fragment" : "= hdr.tcp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_tcp9" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 617, + "column" : 20, + "source_fragment" : "hdr.tcp.setInvalid()" + } + } + ] + }, + { + "name" : "upf620", + "id" : 160, + "runtime_data" : [], + "primitives" : [ + { + "op" : "add_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_icmp21" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 620, + "column" : 20, + "source_fragment" : "hdr.inner_icmp.setValid()" + } + }, + { + "op" : "assign_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_inner_icmp21" + }, + { + "type" : "header", + "value" : "_ingress_icmp11" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 621, + "column" : 35, + "source_fragment" : "= hdr.icmp; ..." + } + }, + { + "op" : "remove_header", + "parameters" : [ + { + "type" : "header", + "value" : "_ingress_icmp11" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 622, + "column" : 20, + "source_fragment" : "hdr.icmp.setInvalid()" + } + } + ] + }, + { + "name" : "upf628", + "id" : 161, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_40"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["_egress_bridged36", "_upf_upf_ctr_id14"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 628, + "column" : 43, + "source_fragment" : "(bit<32>)fabric_md.bridged.upf.upf_ctr_id" + } + }, + { + "op" : "count", + "parameters" : [ + { + "type" : "counter_array", + "value" : "FabricEgress.upf.terminations_counter" + }, + { + "type" : "field", + "value" : ["scalars", "tmp_40"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 628, + "column" : 16, + "source_fragment" : "terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id)" + } + } + ] + }, + { + "name" : "int128", + "id" : 162, + "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/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/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/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/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/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/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/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/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/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/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_md39" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_latency40"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_timestamp41"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_stripped42"] + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_report43"] + } + } + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_length46"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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" : 163, + "runtime_data" : [], + "primitives" : [ + { + "op" : "assign", + "parameters" : [ + { + "type" : "field", + "value" : ["scalars", "tmp_41"] + }, + { + "type" : "expression", + "value" : { + "type" : "expression", + "value" : { + "op" : "&", + "left" : { + "type" : "field", + "value" : ["int_egress_fabric_md_bridged", "_int_bmd_mirror_session_id22"] + }, + "right" : { + "type" : "hexstr", + "value" : "0xffffffff" + } + } + } + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_41"] + }, + { + "type" : "hexstr", + "value" : "0x1" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4", + "line" : 383, + "column" : 16, + "source_fragment" : "clone_preserving_field_list(CloneType.E2E, ..." + } + } + ] + }, + { + "name" : "int373", + "id" : 164, + "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/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" : 165, + "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/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4", + "line" : 217, + "column" : 16, + "source_fragment" : "hdr.ipv4.dscp = tmp_dscp" + } + } + ] + }, + { + "name" : "slicing189", + "id" : 166, + "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/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_md39" + }, + { + "type" : "header", + "value" : "int_egress_fabric_md_int_report_md" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_latency40"] + }, + { + "type" : "field", + "value" : ["int_egress_fabric_md_int_md", "hop_latency"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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_timestamp41"] + }, + { + "type" : "field", + "value" : ["int_egress_fabric_md_int_md", "timestamp"] + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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" : 167, + "runtime_data" : [], + "primitives" : [ + { + "op" : "recirculate", + "parameters" : [ + { + "type" : "hexstr", + "value" : "0x5" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 170, + "column" : 12, + "source_fragment" : "recirculate_preserving_field_list(NO_PRESERVATION)" + } + } + ] + }, + { + "name" : "fabric_v1model174", + "id" : 168, + "runtime_data" : [], + "primitives" : [ + { + "op" : "mark_to_drop", + "parameters" : [ + { + "type" : "header", + "value" : "standard_metadata" + } + ], + "source_info" : { + "filename" : "/home/ubuntu/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/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/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" : [73], + "actions" : ["fabric_v1model61"], + "base_default_next" : "node_3", + "next_tables" : { + "fabric_v1model61" : "node_3" + }, + "default_entry" : { + "action_id" : 73, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_fabric_v1model64", + "id" : 1, + "source_info" : { + "filename" : "/home/ubuntu/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" : [72], + "actions" : ["fabric_v1model64"], + "base_default_next" : "node_5", + "next_tables" : { + "fabric_v1model64" : "node_5" + }, + "default_entry" : { + "action_id" : 72, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_fabric_v1model70", + "id" : 2, + "source_info" : { + "filename" : "/home/ubuntu/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" : [74], + "actions" : ["fabric_v1model70"], + "base_default_next" : "tbl_lookup_md_init15", + "next_tables" : { + "fabric_v1model70" : "tbl_lookup_md_init15" + }, + "default_entry" : { + "action_id" : 74, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init15", + "id" : 3, + "source_info" : { + "filename" : "/home/ubuntu/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" : [76], + "actions" : ["lookup_md_init15"], + "base_default_next" : "node_8", + "next_tables" : { + "lookup_md_init15" : "node_8" + }, + "default_entry" : { + "action_id" : 76, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init21", + "id" : 4, + "source_info" : { + "filename" : "/home/ubuntu/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" : [75], + "actions" : ["lookup_md_init21"], + "base_default_next" : "tbl_lookup_md_init24", + "next_tables" : { + "lookup_md_init21" : "tbl_lookup_md_init24" + }, + "default_entry" : { + "action_id" : 75, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init24", + "id" : 5, + "source_info" : { + "filename" : "/home/ubuntu/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" : [85], + "actions" : ["lookup_md_init24"], + "base_default_next" : "node_11", + "next_tables" : { + "lookup_md_init24" : "node_11" + }, + "default_entry" : { + "action_id" : 85, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init33", + "id" : 6, + "source_info" : { + "filename" : "/home/ubuntu/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" : [80], + "actions" : ["lookup_md_init33"], + "base_default_next" : "node_13", + "next_tables" : { + "lookup_md_init33" : "node_13" + }, + "default_entry" : { + "action_id" : 80, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init38", + "id" : 7, + "source_info" : { + "filename" : "/home/ubuntu/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" : [77], + "actions" : ["lookup_md_init38"], + "base_default_next" : "node_27", + "next_tables" : { + "lookup_md_init38" : "node_27" + }, + "default_entry" : { + "action_id" : 77, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init41", + "id" : 8, + "source_info" : { + "filename" : "/home/ubuntu/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" : [78], + "actions" : ["lookup_md_init41"], + "base_default_next" : "node_27", + "next_tables" : { + "lookup_md_init41" : "node_27" + }, + "default_entry" : { + "action_id" : 78, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init44", + "id" : 9, + "source_info" : { + "filename" : "/home/ubuntu/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" : [79], + "actions" : ["lookup_md_init44"], + "base_default_next" : "node_27", + "next_tables" : { + "lookup_md_init44" : "node_27" + }, + "default_entry" : { + "action_id" : 79, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init48", + "id" : 10, + "source_info" : { + "filename" : "/home/ubuntu/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" : [84], + "actions" : ["lookup_md_init48"], + "base_default_next" : "node_21", + "next_tables" : { + "lookup_md_init48" : "node_21" + }, + "default_entry" : { + "action_id" : 84, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init53", + "id" : 11, + "source_info" : { + "filename" : "/home/ubuntu/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" : [81], + "actions" : ["lookup_md_init53"], + "base_default_next" : "node_27", + "next_tables" : { + "lookup_md_init53" : "node_27" + }, + "default_entry" : { + "action_id" : 81, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init56", + "id" : 12, + "source_info" : { + "filename" : "/home/ubuntu/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" : [82], + "actions" : ["lookup_md_init56"], + "base_default_next" : "node_27", + "next_tables" : { + "lookup_md_init56" : "node_27" + }, + "default_entry" : { + "action_id" : 82, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_lookup_md_init59", + "id" : 13, + "source_info" : { + "filename" : "/home/ubuntu/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" : [83], + "actions" : ["lookup_md_init59"], + "base_default_next" : "node_27", + "next_tables" : { + "lookup_md_init59" : "node_27" + }, + "default_entry" : { + "action_id" : 83, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_pkt_io_do_packet_out", + "id" : 14, + "source_info" : { + "filename" : "/home/ubuntu/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" : [9], + "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" : 9, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.int_watchlist.watchlist", + "id" : 15, + "source_info" : { + "filename" : "/home/ubuntu/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" : [68, 70, 69], + "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" : 69, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.stats.flows", + "id" : 16, + "source_info" : { + "filename" : "/home/ubuntu/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" : [8], + "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" : 8, + "action_const" : true, + "action_data" : ["0x0"], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.slice_tc_classifier.classifier", + "id" : 17, + "source_info" : { + "filename" : "/home/ubuntu/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" : [37, 39, 38], + "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" : 38, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.filtering.ingress_port_vlan", + "id" : 18, + "source_info" : { + "filename" : "/home/ubuntu/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" : [10, 11, 12], + "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" : 10, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.filtering.fwd_classifier", + "id" : 19, + "source_info" : { + "filename" : "/home/ubuntu/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" : [13], + "actions" : ["FabricIngress.filtering.set_forwarding_type"], + "base_default_next" : "tbl_filtering100", + "next_tables" : { + "FabricIngress.filtering.set_forwarding_type" : "tbl_filtering100" + }, + "default_entry" : { + "action_id" : 13, + "action_const" : true, + "action_data" : ["0x0"], + "action_entry_const" : true + } + }, + { + "name" : "tbl_filtering100", + "id" : 20, + "source_info" : { + "filename" : "/home/ubuntu/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" : [94], + "actions" : ["filtering100"], + "base_default_next" : "node_35", + "next_tables" : { + "filtering100" : "node_35" + }, + "default_entry" : { + "action_id" : 94, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf25", + "id" : 21, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 25, + "column" : 4, + "source_fragment" : "bool is_uplink = false; ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [93], + "actions" : ["upf25"], + "base_default_next" : "node_37", + "next_tables" : { + "upf25" : "node_37" + }, + "default_entry" : { + "action_id" : 93, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.interfaces", + "id" : 22, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 107, + "column" : 10, + "source_fragment" : "interfaces" + }, + "key" : [ + { + "match_type" : "lpm", + "name" : "ipv4_dst_addr", + "target" : ["_ingress_ipv47", "dst_addr"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "gtpu_is_valid", + "target" : ["_ingress_gtpu12", "$valid$"], + "mask" : null + } + ], + "match_type" : "lpm", + "type" : "simple", + "max_size" : 64, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [45, 46, 47, 48], + "actions" : ["FabricIngress.upf.iface_access", "FabricIngress.upf.iface_core", "FabricIngress.upf.iface_dbuf", "FabricIngress.upf.iface_miss"], + "base_default_next" : "FabricIngress.upf.applications", + "next_tables" : { + "FabricIngress.upf.iface_access" : "tbl_upf409", + "FabricIngress.upf.iface_core" : "tbl_upf418", + "FabricIngress.upf.iface_dbuf" : "tbl_upf424", + "FabricIngress.upf.iface_miss" : "FabricIngress.upf.applications" + }, + "default_entry" : { + "action_id" : 48, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf409", + "id" : 23, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 409, + "column" : 30, + "source_fragment" : "= true; ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [86], + "actions" : ["upf409"], + "base_default_next" : "node_40", + "next_tables" : { + "upf409" : "node_40" + }, + "default_entry" : { + "action_id" : 86, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.uplink_sessions", + "id" : 24, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 213, + "column" : 10, + "source_fragment" : "uplink_sessions" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "tunnel_ipv4_dst", + "target" : ["_ingress_ipv47", "dst_addr"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "teid", + "target" : ["_ingress_gtpu12", "teid"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 100000, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [56, 50, 49], + "actions" : ["FabricIngress.upf.set_uplink_session", "FabricIngress.upf.set_uplink_session_drop", "FabricIngress.upf.set_uplink_session_miss"], + "base_default_next" : "FabricIngress.upf.applications", + "next_tables" : { + "FabricIngress.upf.set_uplink_session" : "FabricIngress.upf.applications", + "FabricIngress.upf.set_uplink_session_drop" : "FabricIngress.upf.applications", + "FabricIngress.upf.set_uplink_session_miss" : "FabricIngress.upf.applications" + }, + "default_entry" : { + "action_id" : 49, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf418", + "id" : 25, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 418, + "column" : 34, + "source_fragment" : "= fabric_md.lkp.ipv4_src; ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [87], + "actions" : ["upf418"], + "base_default_next" : "FabricIngress.upf.downlink_sessions", + "next_tables" : { + "upf418" : "FabricIngress.upf.downlink_sessions" + }, + "default_entry" : { + "action_id" : 87, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.downlink_sessions", + "id" : 26, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 198, + "column" : 10, + "source_fragment" : "downlink_sessions" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "ue_addr", + "target" : ["scalars", "userMetadata._ingress_routing_ipv4_dst18"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 100000, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [53, 54, 55, 52, 51], + "actions" : ["FabricIngress.upf.set_downlink_session", "FabricIngress.upf.set_downlink_session_buf", "FabricIngress.upf.set_downlink_session_buf_drop", "FabricIngress.upf.set_downlink_session_drop", "FabricIngress.upf.set_downlink_session_miss"], + "base_default_next" : "FabricIngress.upf.applications", + "next_tables" : { + "FabricIngress.upf.set_downlink_session" : "FabricIngress.upf.applications", + "FabricIngress.upf.set_downlink_session_buf" : "FabricIngress.upf.applications", + "FabricIngress.upf.set_downlink_session_buf_drop" : "FabricIngress.upf.applications", + "FabricIngress.upf.set_downlink_session_drop" : "FabricIngress.upf.applications", + "FabricIngress.upf.set_downlink_session_miss" : "FabricIngress.upf.applications" + }, + "default_entry" : { + "action_id" : 51, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf424", + "id" : 27, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 424, + "column" : 34, + "source_fragment" : "= fabric_md.lkp.ipv4_src; ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [88], + "actions" : ["upf424"], + "base_default_next" : "FabricIngress.upf.downlink_sessions", + "next_tables" : { + "upf424" : "FabricIngress.upf.downlink_sessions" + }, + "default_entry" : { + "action_id" : 88, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.applications", + "id" : 28, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 337, + "column" : 10, + "source_fragment" : "applications" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "slice_id", + "target" : ["scalars", "userMetadata._ingress_upf_slice_id30"], + "mask" : null + }, + { + "match_type" : "lpm", + "name" : "app_ipv4_addr", + "target" : ["scalars", "upf_app_ipv4_addr"], + "mask" : null + }, + { + "match_type" : "range", + "name" : "app_l4_port", + "target" : ["scalars", "upf_app_l4_port"], + "mask" : null + }, + { + "match_type" : "ternary", + "name" : "app_ip_proto", + "target" : ["scalars", "upf_app_ip_proto"], + "mask" : null + } + ], + "match_type" : "range", + "type" : "simple", + "max_size" : 5, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [64, 5], + "actions" : ["FabricIngress.upf.set_app_id", "nop"], + "base_default_next" : "node_47", + "next_tables" : { + "FabricIngress.upf.set_app_id" : "node_47", + "nop" : "node_47" + }, + "default_entry" : { + "action_id" : 5, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.uplink_terminations", + "id" : 29, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 280, + "column" : 10, + "source_fragment" : "uplink_terminations" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "ue_session_id", + "target" : ["scalars", "upf_ue_session_id"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "app_id", + "target" : ["scalars", "upf_internal_app_id"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 100000, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [61, 59, 57], + "actions" : ["FabricIngress.upf.app_fwd", "FabricIngress.upf.uplink_drop", "FabricIngress.upf.uplink_drop_miss"], + "base_default_next" : "FabricIngress.upf.uplink_recirc_rules", + "next_tables" : { + "FabricIngress.upf.app_fwd" : "FabricIngress.upf.uplink_recirc_rules", + "FabricIngress.upf.uplink_drop" : "FabricIngress.upf.uplink_recirc_rules", + "FabricIngress.upf.uplink_drop_miss" : "FabricIngress.upf.uplink_recirc_rules" + }, + "default_entry" : { + "action_id" : 57, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.uplink_recirc_rules", + "id" : 30, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 387, + "column" : 10, + "source_fragment" : "uplink_recirc_rules" + }, + "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", + "type" : "simple", + "max_size" : 64, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [65, 66, 67], + "actions" : ["FabricIngress.upf.recirc_allow", "FabricIngress.upf.recirc_deny", "FabricIngress.upf.recirc_miss"], + "base_default_next" : "tbl_upf445", + "next_tables" : { + "FabricIngress.upf.recirc_allow" : "tbl_upf445", + "FabricIngress.upf.recirc_deny" : "tbl_upf445", + "FabricIngress.upf.recirc_miss" : "tbl_upf445" + }, + "default_entry" : { + "action_id" : 67, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.downlink_terminations", + "id" : 31, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 295, + "column" : 10, + "source_fragment" : "downlink_terminations" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "ue_session_id", + "target" : ["scalars", "upf_ue_session_id"], + "mask" : null + }, + { + "match_type" : "exact", + "name" : "app_id", + "target" : ["scalars", "upf_internal_app_id"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 100000, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [62, 60, 58], + "actions" : ["FabricIngress.upf.downlink_fwd_encap", "FabricIngress.upf.downlink_drop", "FabricIngress.upf.downlink_drop_miss"], + "base_default_next" : "tbl_upf445", + "next_tables" : { + "FabricIngress.upf.downlink_fwd_encap" : "tbl_upf445", + "FabricIngress.upf.downlink_drop" : "tbl_upf445", + "FabricIngress.upf.downlink_drop_miss" : "tbl_upf445" + }, + "default_entry" : { + "action_id" : 58, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf443", + "id" : 32, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 443, + "column" : 58, + "source_fragment" : "=" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [89], + "actions" : ["upf443"], + "base_default_next" : "tbl_upf445", + "next_tables" : { + "upf443" : "tbl_upf445" + }, + "default_entry" : { + "action_id" : 89, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf445", + "id" : 33, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 445, + "column" : 12, + "source_fragment" : "app_meter.execute_meter((bit<32>) app_meter_idx_internal, fabric_md.upf_meter_color)" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [91], + "actions" : ["upf445"], + "base_default_next" : "node_54", + "next_tables" : { + "upf445" : "node_54" + }, + "default_entry" : { + "action_id" : 91, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf448", + "id" : 34, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 448, + "column" : 16, + "source_fragment" : "session_meter.execute_meter((bit<32>) session_meter_idx_internal, fabric_md.upf_meter_color)" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [90], + "actions" : ["upf448"], + "base_default_next" : "FabricIngress.upf.ig_tunnel_peers", + "next_tables" : { + "upf448" : "FabricIngress.upf.ig_tunnel_peers" + }, + "default_entry" : { + "action_id" : 90, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.upf.ig_tunnel_peers", + "id" : 35, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 317, + "column" : 10, + "source_fragment" : "ig_tunnel_peers" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "tun_peer_id", + "target" : ["_ingress_bridged4", "_upf_tun_peer_id13"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 256, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [63, 4], + "actions" : ["FabricIngress.upf.set_routing_ipv4_dst", "nop"], + "base_default_next" : "node_57", + "next_tables" : { + "FabricIngress.upf.set_routing_ipv4_dst" : "node_57", + "nop" : "node_57" + }, + "default_entry" : { + "action_id" : 4, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf461", + "id" : 36, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 461, + "column" : 16, + "source_fragment" : "terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id)" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [92], + "actions" : ["upf461"], + "base_default_next" : "node_59", + "next_tables" : { + "upf461" : "node_59" + }, + "default_entry" : { + "action_id" : 92, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.forwarding.bridging", + "id" : 37, + "source_info" : { + "filename" : "/home/ubuntu/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" : [18, 14], + "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" : 14, + "action_const" : true, + "action_data" : ["0x59"], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.forwarding.mpls", + "id" : 38, + "source_info" : { + "filename" : "/home/ubuntu/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" : [19, 15], + "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" : 15, + "action_const" : true, + "action_data" : ["0x81"], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.forwarding.routing_v4", + "id" : 39, + "source_info" : { + "filename" : "/home/ubuntu/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" : [20, 21, 22, 16], + "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" : 16, + "action_const" : false, + "action_data" : ["0x1d"], + "action_entry_const" : false + } + }, + { + "name" : "FabricIngress.forwarding.routing_v6", + "id" : 40, + "source_info" : { + "filename" : "/home/ubuntu/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" : [23, 24, 17], + "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" : 17, + "action_const" : false, + "action_data" : ["0x1d"], + "action_entry_const" : false + } + }, + { + "name" : "tbl_hasher17", + "id" : 41, + "source_info" : { + "filename" : "/home/ubuntu/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" : [99], + "actions" : ["hasher17"], + "base_default_next" : "node_69", + "next_tables" : { + "hasher17" : "node_69" + }, + "default_entry" : { + "action_id" : 99, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_hasher28", + "id" : 42, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 28, + "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" : [95], + "actions" : ["hasher28"], + "base_default_next" : "node_76", + "next_tables" : { + "hasher28" : "node_76" + }, + "default_entry" : { + "action_id" : 95, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_hasher39", + "id" : 43, + "source_info" : { + "filename" : "/home/ubuntu/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" : [96], + "actions" : ["hasher39"], + "base_default_next" : "node_76", + "next_tables" : { + "hasher39" : "node_76" + }, + "default_entry" : { + "action_id" : 96, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_hasher50", + "id" : 44, + "source_info" : { + "filename" : "/home/ubuntu/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" : [97], + "actions" : ["hasher50"], + "base_default_next" : "node_76", + "next_tables" : { + "hasher50" : "node_76" + }, + "default_entry" : { + "action_id" : 97, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_hasher66", + "id" : 45, + "source_info" : { + "filename" : "/home/ubuntu/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" : [98], + "actions" : ["hasher66"], + "base_default_next" : "node_76", + "next_tables" : { + "hasher66" : "node_76" + }, + "default_entry" : { + "action_id" : 98, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.pre_next.next_mpls", + "id" : 46, + "source_info" : { + "filename" : "/home/ubuntu/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" : [25, 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" : 47, + "source_info" : { + "filename" : "/home/ubuntu/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" : [26, 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" : 48, + "source_info" : { + "filename" : "/home/ubuntu/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" : [27, 29, 28, 30, 31, 32], + "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_80", + "next_tables" : { + "FabricIngress.acl.set_next_id_acl" : "node_80", + "FabricIngress.acl.punt_to_cpu" : "node_80", + "FabricIngress.acl.copy_to_cpu" : "node_80", + "FabricIngress.acl.drop" : "node_80", + "FabricIngress.acl.set_output_port" : "node_80", + "FabricIngress.acl.nop_acl" : "node_80" + }, + "default_entry" : { + "action_id" : 32, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.next.hashed", + "id" : 49, + "source_info" : { + "filename" : "/home/ubuntu/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" : [33, 34, 2], + "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" : 50, + "source_info" : { + "filename" : "/home/ubuntu/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" : [35, 36], + "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" : 36, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.qos.set_slice_tc", + "id" : 51, + "source_info" : { + "filename" : "/home/ubuntu/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" : [40, 41, 7], + "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" : 7, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + }, + "entries" : [ + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 40, + "action_data" : [] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 41, + "action_data" : [] + }, + "priority" : 2 + } + ] + }, + { + "name" : "FabricIngress.qos.default_tc", + "id" : 52, + "source_info" : { + "filename" : "/home/ubuntu/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" : [44, 3], + "actions" : ["FabricIngress.qos.set_default_tc", "nop"], + "base_default_next" : "node_85", + "next_tables" : { + "FabricIngress.qos.set_default_tc" : "node_85", + "nop" : "node_85" + }, + "default_entry" : { + "action_id" : 3, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing174", + "id" : 53, + "source_info" : { + "filename" : "/home/ubuntu/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" : [100], + "actions" : ["slicing174"], + "base_default_next" : "FabricIngress.qos.queues", + "next_tables" : { + "slicing174" : "FabricIngress.qos.queues" + }, + "default_entry" : { + "action_id" : 100, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing177", + "id" : 54, + "source_info" : { + "filename" : "/home/ubuntu/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" : [101], + "actions" : ["slicing177"], + "base_default_next" : "FabricIngress.qos.queues", + "next_tables" : { + "slicing177" : "FabricIngress.qos.queues" + }, + "default_entry" : { + "action_id" : 101, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.qos.queues", + "id" : 55, + "source_info" : { + "filename" : "/home/ubuntu/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" : [42, 43], + "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" : 42, + "action_const" : true, + "action_data" : ["0x0"], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int112", + "id" : 56, + "source_info" : { + "filename" : "/home/ubuntu/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" : [102], + "actions" : ["int112"], + "base_default_next" : "FabricIngress.int_ingress.drop_report", + "next_tables" : { + "int112" : "FabricIngress.int_ingress.drop_report" + }, + "default_entry" : { + "action_id" : 102, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricIngress.int_ingress.drop_report", + "id" : 57, + "source_info" : { + "filename" : "/home/ubuntu/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_type21"], + "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" : [71, 6], + "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" : 6, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + }, + "entries" : [ + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 71, + "action_data" : [] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 71, + "action_data" : [] + }, + "priority" : 2 + }, + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 71, + "action_data" : [] + }, + "priority" : 3 + } + ] + }, + { + "name" : "tbl_fabric_v1model106", + "id" : 58, + "source_info" : { + "filename" : "/home/ubuntu/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" : [104], + "actions" : ["fabric_v1model106"], + "base_default_next" : "node_92", + "next_tables" : { + "fabric_v1model106" : "node_92" + }, + "default_entry" : { + "action_id" : 104, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_fabric_v1model110", + "id" : 59, + "source_info" : { + "filename" : "/home/ubuntu/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" : [103], + "actions" : ["fabric_v1model110"], + "base_default_next" : null, + "next_tables" : { + "fabric_v1model110" : null + }, + "default_entry" : { + "action_id" : 103, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + } + ], + "action_profiles" : [ + { + "name" : "FabricIngress.next.hashed_profile", + "id" : 0, + "source_info" : { + "filename" : "/home/ubuntu/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/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/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/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/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/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/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/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/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/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/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/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/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/fabric-tna/p4src/v1model/fabric_v1model.p4", + "line" : 84, + "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" : "tbl_upf25", + "true_next" : "node_59" + }, + { + "name" : "node_37", + "id" : 13, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 406, + "column" : 12, + "source_fragment" : "hdr.ipv4.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_ingress_ipv47", "$valid$"] + } + } + }, + "true_next" : "FabricIngress.upf.interfaces", + "false_next" : "node_59" + }, + { + "name" : "node_40", + "id" : 14, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 413, + "column" : 24, + "source_fragment" : "fabric_md.bridged.base.encap_presence != EncapPresence.NONE" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "!=", + "left" : { + "type" : "field", + "value" : ["_ingress_bridged4", "_base_encap_presence7"] + }, + "right" : { + "type" : "hexstr", + "value" : "0x00" + } + } + }, + "true_next" : "FabricIngress.upf.uplink_sessions", + "false_next" : "FabricIngress.upf.applications" + }, + { + "name" : "node_47", + "id" : 15, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 433, + "column" : 16, + "source_fragment" : "sess_hit" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "upf_sess_hit"] + } + } + }, + "true_next" : "node_48", + "false_next" : "tbl_upf443" + }, + { + "name" : "node_48", + "id" : 16, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 434, + "column" : 20, + "source_fragment" : "is_uplink" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "upf_is_uplink"] + } + } + }, + "true_next" : "FabricIngress.upf.uplink_terminations", + "false_next" : "FabricIngress.upf.downlink_terminations" + }, + { + "name" : "node_54", + "id" : 17, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 446, + "column" : 16, + "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_upf448", + "false_next" : "FabricIngress.upf.ig_tunnel_peers" + }, + { + "name" : "node_57", + "id" : 18, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 451, + "column" : 16, + "source_fragment" : "term_hit" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["scalars", "upf_term_hit"] + } + } + }, + "true_next" : "tbl_upf461", + "false_next" : "node_59" + }, + { + "name" : "node_59", + "id" : 19, + "source_info" : { + "filename" : "/home/ubuntu/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_60", + "true_next" : "tbl_hasher17" + }, + { + "name" : "node_60", + "id" : 20, + "source_info" : { + "filename" : "/home/ubuntu/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_62" + }, + { + "name" : "node_62", + "id" : 21, + "source_info" : { + "filename" : "/home/ubuntu/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_64" + }, + { + "name" : "node_64", + "id" : 22, + "source_info" : { + "filename" : "/home/ubuntu/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_66" + }, + { + "name" : "node_66", + "id" : 23, + "source_info" : { + "filename" : "/home/ubuntu/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_69", + "id" : 24, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4", + "line" : 27, + "column" : 12, + "source_fragment" : "fabric_md.bridged" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_ingress_bridged4", "_upf_needs_gtpu_encap16"] + } + } + }, + "true_next" : "tbl_hasher28", + "false_next" : "node_71" + }, + { + "name" : "node_71", + "id" : 25, + "source_info" : { + "filename" : "/home/ubuntu/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_73" + }, + { + "name" : "node_73", + "id" : 26, + "source_info" : { + "filename" : "/home/ubuntu/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_76", + "id" : 27, + "source_info" : { + "filename" : "/home/ubuntu/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_80", + "id" : 28, + "source_info" : { + "filename" : "/home/ubuntu/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.hashed", + "true_next" : "FabricIngress.qos.set_slice_tc" + }, + { + "name" : "node_85", + "id" : 29, + "source_info" : { + "filename" : "/home/ubuntu/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_92", + "id" : 30, + "source_info" : { + "filename" : "/home/ubuntu/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/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" : 60, + "source_info" : { + "filename" : "/home/ubuntu/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" : [138], + "actions" : ["fabric_v1model133"], + "base_default_next" : "node_97", + "next_tables" : { + "fabric_v1model133" : "node_97" + }, + "default_entry" : { + "action_id" : 138, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_fabric_v1model136", + "id" : 61, + "source_info" : { + "filename" : "/home/ubuntu/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" : [137], + "actions" : ["fabric_v1model136"], + "base_default_next" : "node_99", + "next_tables" : { + "fabric_v1model136" : "node_99" + }, + "default_entry" : { + "action_id" : 137, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator14", + "id" : 62, + "source_info" : { + "filename" : "/home/ubuntu/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" : [140], + "actions" : ["int_tna_parser_emulator14"], + "base_default_next" : "node_101", + "next_tables" : { + "int_tna_parser_emulator14" : "node_101" + }, + "default_entry" : { + "action_id" : 140, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator148", + "id" : 63, + "source_info" : { + "filename" : "/home/ubuntu/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" : [139], + "actions" : ["int_tna_parser_emulator148"], + "base_default_next" : "node_103", + "next_tables" : { + "int_tna_parser_emulator148" : "node_103" + }, + "default_entry" : { + "action_id" : 139, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_parser_emulator_parse_int_ingress_drop", + "id" : 64, + "source_info" : { + "filename" : "/home/ubuntu/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" : [124], + "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" : 124, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator166", + "id" : 65, + "source_info" : { + "filename" : "/home/ubuntu/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" : [141], + "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" : 141, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_parser_emulator_parse_int_report_mirror", + "id" : 66, + "source_info" : { + "filename" : "/home/ubuntu/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" : [126], + "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" : 126, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator169", + "id" : 67, + "source_info" : { + "filename" : "/home/ubuntu/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" : [142], + "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" : 142, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator173", + "id" : 68, + "source_info" : { + "filename" : "/home/ubuntu/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" : [143], + "actions" : ["int_tna_parser_emulator173"], + "base_default_next" : "node_109", + "next_tables" : { + "int_tna_parser_emulator173" : "node_109" + }, + "default_entry" : { + "action_id" : 143, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator14_0", + "id" : 69, + "source_info" : { + "filename" : "/home/ubuntu/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" : [145], + "actions" : ["int_tna_parser_emulator14_0"], + "base_default_next" : "node_111", + "next_tables" : { + "int_tna_parser_emulator14_0" : "node_111" + }, + "default_entry" : { + "action_id" : 145, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator148_0", + "id" : 70, + "source_info" : { + "filename" : "/home/ubuntu/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" : [144], + "actions" : ["int_tna_parser_emulator148_0"], + "base_default_next" : "node_113", + "next_tables" : { + "int_tna_parser_emulator148_0" : "node_113" + }, + "default_entry" : { + "action_id" : 144, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_parser_emulator_parse_int_ingress_drop_0", + "id" : 71, + "source_info" : { + "filename" : "/home/ubuntu/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" : [125], + "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" : 125, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator166_0", + "id" : 72, + "source_info" : { + "filename" : "/home/ubuntu/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" : [146], + "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" : 146, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_parser_emulator_parse_int_report_mirror_0", + "id" : 73, + "source_info" : { + "filename" : "/home/ubuntu/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" : [127], + "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" : 127, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator169_0", + "id" : 74, + "source_info" : { + "filename" : "/home/ubuntu/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" : [147], + "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" : 147, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int_tna_parser_emulator173_0", + "id" : 75, + "source_info" : { + "filename" : "/home/ubuntu/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" : [148], + "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" : 148, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.pkt_io_egress.switch_info", + "id" : 76, + "source_info" : { + "filename" : "/home/ubuntu/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" : [113, 105], + "actions" : ["FabricEgress.pkt_io_egress.set_switch_info", "nop"], + "base_default_next" : "node_120", + "next_tables" : { + "FabricEgress.pkt_io_egress.set_switch_info" : "node_120", + "nop" : "node_120" + }, + "default_entry" : { + "action_id" : 105, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "tbl_packetio51", + "id" : 77, + "source_info" : { + "filename" : "/home/ubuntu/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" : [149], + "actions" : ["packetio51"], + "base_default_next" : "node_122", + "next_tables" : { + "packetio51" : "node_122" + }, + "default_entry" : { + "action_id" : 149, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_packetio60", + "id" : 78, + "source_info" : { + "filename" : "/home/ubuntu/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" : [150], + "actions" : ["packetio60"], + "base_default_next" : "node_124", + "next_tables" : { + "packetio60" : "node_124" + }, + "default_entry" : { + "action_id" : 150, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.stats.flows", + "id" : 79, + "source_info" : { + "filename" : "/home/ubuntu/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" : [112], + "actions" : ["FabricEgress.stats.count"], + "base_default_next" : "node_126", + "next_tables" : { + "FabricEgress.stats.count" : "node_126" + }, + "default_entry" : { + "action_id" : 112, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_next283", + "id" : 80, + "source_info" : { + "filename" : "/home/ubuntu/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" : [151], + "actions" : ["next283"], + "base_default_next" : "node_128", + "next_tables" : { + "next283" : "node_128" + }, + "default_entry" : { + "action_id" : 151, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_egress_next_pop_mpls_if_present", + "id" : 81, + "source_info" : { + "filename" : "/home/ubuntu/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" : [114], + "actions" : ["FabricEgress.egress_next.pop_mpls_if_present"], + "base_default_next" : "node_132", + "next_tables" : { + "FabricEgress.egress_next.pop_mpls_if_present" : "node_132" + }, + "default_entry" : { + "action_id" : 114, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_egress_next_set_mpls", + "id" : 82, + "source_info" : { + "filename" : "/home/ubuntu/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" : [115], + "actions" : ["FabricEgress.egress_next.set_mpls"], + "base_default_next" : "node_132", + "next_tables" : { + "FabricEgress.egress_next.set_mpls" : "node_132" + }, + "default_entry" : { + "action_id" : 115, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.egress_next.egress_vlan", + "id" : 83, + "source_info" : { + "filename" : "/home/ubuntu/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" : [116, 117, 118], + "actions" : ["FabricEgress.egress_next.push_vlan", "FabricEgress.egress_next.pop_vlan", "FabricEgress.egress_next.drop"], + "base_default_next" : "node_134", + "next_tables" : { + "FabricEgress.egress_next.push_vlan" : "node_134", + "FabricEgress.egress_next.pop_vlan" : "node_134", + "FabricEgress.egress_next.drop" : "node_134" + }, + "default_entry" : { + "action_id" : 118, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_next323", + "id" : 84, + "source_info" : { + "filename" : "/home/ubuntu/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" : [153], + "actions" : ["next323"], + "base_default_next" : "node_136", + "next_tables" : { + "next323" : "node_136" + }, + "default_entry" : { + "action_id" : 153, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_next325", + "id" : 85, + "source_info" : { + "filename" : "/home/ubuntu/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" : [152], + "actions" : ["next325"], + "base_default_next" : "node_148", + "next_tables" : { + "next325" : "node_148" + }, + "default_entry" : { + "action_id" : 152, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_next333", + "id" : 86, + "source_info" : { + "filename" : "/home/ubuntu/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" : [154], + "actions" : ["next333"], + "base_default_next" : "node_141", + "next_tables" : { + "next333" : "node_141" + }, + "default_entry" : { + "action_id" : 154, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_next336", + "id" : 87, + "source_info" : { + "filename" : "/home/ubuntu/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" : [155], + "actions" : ["next336"], + "base_default_next" : "node_148", + "next_tables" : { + "next336" : "node_148" + }, + "default_entry" : { + "action_id" : 155, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_next343", + "id" : 88, + "source_info" : { + "filename" : "/home/ubuntu/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" : [156], + "actions" : ["next343"], + "base_default_next" : "node_146", + "next_tables" : { + "next343" : "node_146" + }, + "default_entry" : { + "action_id" : 156, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_next346", + "id" : 89, + "source_info" : { + "filename" : "/home/ubuntu/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" : [157], + "actions" : ["next346"], + "base_default_next" : "node_148", + "next_tables" : { + "next346" : "node_148" + }, + "default_entry" : { + "action_id" : 157, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf610", + "id" : 90, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 610, + "column" : 20, + "source_fragment" : "hdr.inner_udp.setValid(); ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [158], + "actions" : ["upf610"], + "base_default_next" : "node_152", + "next_tables" : { + "upf610" : "node_152" + }, + "default_entry" : { + "action_id" : 158, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf615", + "id" : 91, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 615, + "column" : 20, + "source_fragment" : "hdr.inner_tcp.setValid(); ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [159], + "actions" : ["upf615"], + "base_default_next" : "node_154", + "next_tables" : { + "upf615" : "node_154" + }, + "default_entry" : { + "action_id" : 159, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf620", + "id" : 92, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 620, + "column" : 20, + "source_fragment" : "hdr.inner_icmp.setValid(); ..." + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [160], + "actions" : ["upf620"], + "base_default_next" : "FabricEgress.upf.gtpu_encap", + "next_tables" : { + "upf620" : "FabricEgress.upf.gtpu_encap" + }, + "default_entry" : { + "action_id" : 160, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.upf.gtpu_encap", + "id" : 93, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 597, + "column" : 10, + "source_fragment" : "gtpu_encap" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [122, 123], + "actions" : ["FabricEgress.upf.gtpu_only", "FabricEgress.upf.gtpu_with_psc"], + "base_default_next" : "FabricEgress.upf.eg_tunnel_peers", + "next_tables" : { + "FabricEgress.upf.gtpu_only" : "FabricEgress.upf.eg_tunnel_peers", + "FabricEgress.upf.gtpu_with_psc" : "FabricEgress.upf.eg_tunnel_peers" + }, + "default_entry" : { + "action_id" : 122, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "FabricEgress.upf.eg_tunnel_peers", + "id" : 94, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 491, + "column" : 10, + "source_fragment" : "eg_tunnel_peers" + }, + "key" : [ + { + "match_type" : "exact", + "name" : "tun_peer_id", + "target" : ["_egress_bridged36", "_upf_tun_peer_id13"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 256, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [121, 107], + "actions" : ["FabricEgress.upf.load_tunnel_params", "nop"], + "base_default_next" : "node_158", + "next_tables" : { + "FabricEgress.upf.load_tunnel_params" : "node_158", + "nop" : "node_158" + }, + "default_entry" : { + "action_id" : 107, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_upf628", + "id" : 95, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 628, + "column" : 16, + "source_fragment" : "terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id)" + }, + "key" : [], + "match_type" : "exact", + "type" : "simple", + "max_size" : 1024, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [161], + "actions" : ["upf628"], + "base_default_next" : "tbl_int128", + "next_tables" : { + "upf628" : "tbl_int128" + }, + "default_entry" : { + "action_id" : 161, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_int128", + "id" : 96, + "source_info" : { + "filename" : "/home/ubuntu/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" : [162], + "actions" : ["int128"], + "base_default_next" : "FabricEgress.int_egress.queue_latency_thresholds", + "next_tables" : { + "int128" : "FabricEgress.int_egress.queue_latency_thresholds" + }, + "default_entry" : { + "action_id" : 162, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.int_egress.queue_latency_thresholds", + "id" : 97, + "source_info" : { + "filename" : "/home/ubuntu/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" : [128, 129, 108], + "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" : 108, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "FabricEgress.int_egress.config", + "id" : 98, + "source_info" : { + "filename" : "/home/ubuntu/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" : [130], + "actions" : ["FabricEgress.int_egress.set_config"], + "base_default_next" : "tbl_int373", + "next_tables" : { + "FabricEgress.int_egress.set_config" : "tbl_int373" + }, + "default_entry" : { + "action_id" : 130, + "action_const" : false, + "action_data" : ["0xffffff00", "0xffffc0000000"], + "action_entry_const" : false + } + }, + { + "name" : "tbl_int373", + "id" : 99, + "source_info" : { + "filename" : "/home/ubuntu/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" : [164], + "actions" : ["int373"], + "base_default_next" : "node_164", + "next_tables" : { + "int373" : "node_164" + }, + "default_entry" : { + "action_id" : 164, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.int_egress.report", + "id" : 100, + "source_info" : { + "filename" : "/home/ubuntu/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" : [131, 132, 133, 134, 109], + "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" : 109, + "action_const" : false, + "action_data" : [], + "action_entry_const" : false + } + }, + { + "name" : "FabricEgress.int_egress.int_metadata", + "id" : 101, + "source_info" : { + "filename" : "/home/ubuntu/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_type21"], + "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_report43"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 2, + "with_counters" : true, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [135, 110], + "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" : 110, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + }, + "entries" : [ + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 135, + "action_data" : ["0x1"] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 135, + "action_data" : ["0x4"] + }, + "priority" : 2 + } + ] + }, + { + "name" : "tbl_int383", + "id" : 102, + "source_info" : { + "filename" : "/home/ubuntu/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" : [163], + "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" : 163, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.int_egress.adjust_int_report_hdr_length", + "id" : 103, + "source_info" : { + "filename" : "/home/ubuntu/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_type26"], + "mask" : null + } + ], + "match_type" : "exact", + "type" : "simple", + "max_size" : 2, + "with_counters" : false, + "support_timeout" : false, + "direct_meters" : null, + "action_ids" : [111, 136], + "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" : 111, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + }, + "entries" : [ + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 136, + "action_data" : ["0xfff2", "0xffde"] + }, + "priority" : 1 + }, + { + "source_info" : { + "filename" : "/home/ubuntu/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" : 136, + "action_data" : ["0xffee", "0xffda"] + }, + "priority" : 2 + } + ] + }, + { + "name" : "tbl_slicing189", + "id" : 104, + "source_info" : { + "filename" : "/home/ubuntu/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" : [166], + "actions" : ["slicing189"], + "base_default_next" : "FabricEgress.dscp_rewriter.rewriter", + "next_tables" : { + "slicing189" : "FabricEgress.dscp_rewriter.rewriter" + }, + "default_entry" : { + "action_id" : 166, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "FabricEgress.dscp_rewriter.rewriter", + "id" : 105, + "source_info" : { + "filename" : "/home/ubuntu/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" : [119, 120, 106], + "actions" : ["FabricEgress.dscp_rewriter.rewrite", "FabricEgress.dscp_rewriter.clear", "nop"], + "base_default_next" : null, + "next_tables" : { + "__HIT__" : "node_171", + "__MISS__" : "node_173" + }, + "default_entry" : { + "action_id" : 106, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_slicing217", + "id" : 106, + "source_info" : { + "filename" : "/home/ubuntu/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" : [165], + "actions" : ["slicing217"], + "base_default_next" : "node_173", + "next_tables" : { + "slicing217" : "node_173" + }, + "default_entry" : { + "action_id" : 165, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_fabric_v1model170", + "id" : 107, + "source_info" : { + "filename" : "/home/ubuntu/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" : [167], + "actions" : ["fabric_v1model170"], + "base_default_next" : "node_175", + "next_tables" : { + "fabric_v1model170" : "node_175" + }, + "default_entry" : { + "action_id" : 167, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + }, + { + "name" : "tbl_fabric_v1model174", + "id" : 108, + "source_info" : { + "filename" : "/home/ubuntu/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" : [168], + "actions" : ["fabric_v1model174"], + "base_default_next" : null, + "next_tables" : { + "fabric_v1model174" : null + }, + "default_entry" : { + "action_id" : 168, + "action_const" : true, + "action_data" : [], + "action_entry_const" : true + } + } + ], + "action_profiles" : [], + "conditionals" : [ + { + "name" : "node_97", + "id" : 31, + "source_info" : { + "filename" : "/home/ubuntu/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_99" + }, + { + "name" : "node_99", + "id" : 32, + "source_info" : { + "filename" : "/home/ubuntu/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_109" + }, + { + "name" : "node_101", + "id" : 33, + "source_info" : { + "filename" : "/home/ubuntu/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_103" + }, + { + "name" : "node_103", + "id" : 34, + "source_info" : { + "filename" : "/home/ubuntu/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_type47"] + }, + "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_109", + "id" : 35, + "source_info" : { + "filename" : "/home/ubuntu/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_type21"] + }, + "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_111", + "id" : 36, + "source_info" : { + "filename" : "/home/ubuntu/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_113" + }, + { + "name" : "node_113", + "id" : 37, + "source_info" : { + "filename" : "/home/ubuntu/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_type21"] + }, + "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_120", + "id" : 38, + "source_info" : { + "filename" : "/home/ubuntu/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_122" + }, + { + "name" : "node_122", + "id" : 39, + "source_info" : { + "filename" : "/home/ubuntu/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_124" + }, + { + "name" : "node_124", + "id" : 40, + "source_info" : { + "filename" : "/home/ubuntu/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_126" + }, + { + "name" : "node_126", + "id" : 41, + "source_info" : { + "filename" : "/home/ubuntu/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_128" + }, + { + "name" : "node_128", + "id" : 42, + "source_info" : { + "filename" : "/home/ubuntu/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_129", + "false_next" : "tbl_egress_next_set_mpls" + }, + { + "name" : "node_129", + "id" : 43, + "source_info" : { + "filename" : "/home/ubuntu/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_132" + }, + { + "name" : "node_132", + "id" : 44, + "source_info" : { + "filename" : "/home/ubuntu/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_recirc45"] + } + } + }, + "false_next" : "FabricEgress.egress_next.egress_vlan", + "true_next" : "node_134" + }, + { + "name" : "node_134", + "id" : 45, + "source_info" : { + "filename" : "/home/ubuntu/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_138" + }, + { + "name" : "node_136", + "id" : 46, + "source_info" : { + "filename" : "/home/ubuntu/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" : "node_148" + }, + { + "name" : "node_138", + "id" : 47, + "source_info" : { + "filename" : "/home/ubuntu/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_139", + "false_next" : "node_143" + }, + { + "name" : "node_139", + "id" : 48, + "source_info" : { + "filename" : "/home/ubuntu/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_141" + }, + { + "name" : "node_141", + "id" : 49, + "source_info" : { + "filename" : "/home/ubuntu/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" : "node_148" + }, + { + "name" : "node_143", + "id" : 50, + "source_info" : { + "filename" : "/home/ubuntu/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_144", + "false_next" : "node_148" + }, + { + "name" : "node_144", + "id" : 51, + "source_info" : { + "filename" : "/home/ubuntu/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_146" + }, + { + "name" : "node_146", + "id" : 52, + "source_info" : { + "filename" : "/home/ubuntu/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" : "node_148" + }, + { + "name" : "node_148", + "id" : 53, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 607, + "column" : 13, + "source_fragment" : "fabric_md.bridged" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_egress_bridged36", "_upf_skip_upf17"] + } + } + }, + "false_next" : "node_149", + "true_next" : "tbl_int128" + }, + { + "name" : "node_149", + "id" : 54, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 608, + "column" : 16, + "source_fragment" : "fabric_md.bridged" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_egress_bridged36", "_upf_needs_gtpu_encap16"] + } + } + }, + "true_next" : "node_150", + "false_next" : "node_158" + }, + { + "name" : "node_150", + "id" : 55, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 609, + "column" : 20, + "source_fragment" : "hdr.udp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_ingress_udp10", "$valid$"] + } + } + }, + "true_next" : "tbl_upf610", + "false_next" : "node_152" + }, + { + "name" : "node_152", + "id" : 56, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 614, + "column" : 20, + "source_fragment" : "hdr.tcp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_ingress_tcp9", "$valid$"] + } + } + }, + "true_next" : "tbl_upf615", + "false_next" : "node_154" + }, + { + "name" : "node_154", + "id" : 57, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 619, + "column" : 20, + "source_fragment" : "hdr.icmp.isValid()" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_ingress_icmp11", "$valid$"] + } + } + }, + "true_next" : "tbl_upf620", + "false_next" : "FabricEgress.upf.gtpu_encap" + }, + { + "name" : "node_158", + "id" : 58, + "source_info" : { + "filename" : "/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4", + "line" : 627, + "column" : 17, + "source_fragment" : "fabric_md.bridged" + }, + "expression" : { + "type" : "expression", + "value" : { + "op" : "d2b", + "left" : null, + "right" : { + "type" : "field", + "value" : ["_egress_bridged36", "_upf_skip_egress_upf_ctr18"] + } + } + }, + "false_next" : "tbl_upf628", + "true_next" : "tbl_int128" + }, + { + "name" : "node_164", + "id" : 59, + "source_info" : { + "filename" : "/home/ubuntu/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_171", + "id" : 60, + "source_info" : { + "filename" : "/home/ubuntu/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_173" + }, + { + "name" : "node_173", + "id" : 61, + "source_info" : { + "filename" : "/home/ubuntu/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_175" + }, + { + "name" : "node_175", + "id" : 62, + "source_info" : { + "filename" : "/home/ubuntu/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/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_3", + "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/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_4", + "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/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_5", + "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/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_6", + "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/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_7", + "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/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-sd-fabric-svc-upf/p4src/p4info.txt b/src/tests/p4-sd-fabric-svc-upf/p4src/p4info.txt new file mode 100644 index 0000000000000000000000000000000000000000..d502367c0c2acb101b7ea4c4df11837b0d8c3271 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/p4src/p4info.txt @@ -0,0 +1,2482 @@ +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: 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: 41155994 + name: "FabricIngress.upf.interfaces" + alias: "interfaces" + } + match_fields { + id: 1 + name: "ipv4_dst_addr" + bitwidth: 32 + match_type: LPM + } + match_fields { + id: 2 + name: "gtpu_is_valid" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 30131500 + } + action_refs { + id: 19786139 + } + action_refs { + id: 19466514 + } + action_refs { + id: 30204657 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 30204657 + size: 64 +} +tables { + preamble { + id: 37952203 + name: "FabricIngress.upf.downlink_sessions" + alias: "downlink_sessions" + } + match_fields { + id: 1 + name: "ue_addr" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16984383 + } + action_refs { + id: 31195396 + } + action_refs { + id: 21581660 + } + action_refs { + id: 24509779 + } + action_refs { + id: 32013192 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 32013192 + size: 100000 +} +tables { + preamble { + id: 45463032 + name: "FabricIngress.upf.uplink_sessions" + alias: "uplink_sessions" + } + match_fields { + id: 1 + name: "tunnel_ipv4_dst" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "teid" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 31219743 + } + action_refs { + id: 24328070 + } + action_refs { + id: 20368148 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 20368148 + size: 100000 +} +tables { + preamble { + id: 50169666 + name: "FabricIngress.upf.uplink_terminations" + alias: "uplink_terminations" + } + match_fields { + id: 1 + name: "ue_session_id" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "app_id" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 25805419 + } + action_refs { + id: 28764209 + } + action_refs { + id: 20624836 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 20624836 + size: 100000 +} +tables { + preamble { + id: 35221941 + name: "FabricIngress.upf.downlink_terminations" + alias: "downlink_terminations" + } + match_fields { + id: 1 + name: "ue_session_id" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "app_id" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 23536134 + } + action_refs { + id: 30742995 + } + action_refs { + id: 26608757 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 26608757 + size: 100000 +} +tables { + preamble { + id: 48831175 + name: "FabricIngress.upf.ig_tunnel_peers" + alias: "ig_tunnel_peers" + } + match_fields { + id: 1 + name: "tun_peer_id" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 26011763 + } + action_refs { + id: 28485346 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 28485346 + size: 256 +} +tables { + preamble { + id: 46184415 + name: "FabricIngress.upf.applications" + alias: "applications" + } + match_fields { + id: 1 + name: "slice_id" + bitwidth: 4 + match_type: EXACT + } + match_fields { + id: 2 + name: "app_ipv4_addr" + bitwidth: 32 + match_type: LPM + } + match_fields { + id: 3 + name: "app_l4_port" + bitwidth: 16 + match_type: RANGE + } + match_fields { + id: 4 + name: "app_ip_proto" + bitwidth: 8 + match_type: TERNARY + } + action_refs { + id: 26631629 + } + action_refs { + id: 28485346 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 28485346 + size: 5 +} +tables { + preamble { + id: 34400315 + name: "FabricIngress.upf.uplink_recirc_rules" + alias: "uplink_recirc_rules" + } + match_fields { + id: 1 + name: "ipv4_src" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 2 + name: "ipv4_dst" + bitwidth: 32 + match_type: TERNARY + } + action_refs { + id: 28119063 + } + action_refs { + id: 19222227 + } + action_refs { + id: 29186084 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 29186084 + direct_resource_ids: 335275671 + size: 64 +} +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: 37756041 + name: "FabricEgress.upf.eg_tunnel_peers" + alias: "eg_tunnel_peers" + } + match_fields { + id: 1 + name: "tun_peer_id" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 28490145 + } + action_refs { + id: 28485346 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 28485346 + size: 256 +} +tables { + preamble { + id: 35202849 + name: "FabricEgress.upf.gtpu_encap" + alias: "gtpu_encap" + } + action_refs { + id: 18154440 + } + action_refs { + id: 25872588 + } + size: 1 +} +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: 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: 30131500 + name: "FabricIngress.upf.iface_access" + alias: "iface_access" + } + params { + id: 1 + name: "slice_id" + bitwidth: 4 + } +} +actions { + preamble { + id: 19786139 + name: "FabricIngress.upf.iface_core" + alias: "iface_core" + } + params { + id: 1 + name: "slice_id" + bitwidth: 4 + } +} +actions { + preamble { + id: 19466514 + name: "FabricIngress.upf.iface_dbuf" + alias: "iface_dbuf" + } + params { + id: 1 + name: "slice_id" + bitwidth: 4 + } +} +actions { + preamble { + id: 30204657 + name: "FabricIngress.upf.iface_miss" + alias: "iface_miss" + } +} +actions { + preamble { + id: 20368148 + name: "FabricIngress.upf.set_uplink_session_miss" + alias: "set_uplink_session_miss" + } +} +actions { + preamble { + id: 24328070 + name: "FabricIngress.upf.set_uplink_session_drop" + alias: "set_uplink_session_drop" + } +} +actions { + preamble { + id: 32013192 + name: "FabricIngress.upf.set_downlink_session_miss" + alias: "set_downlink_session_miss" + } +} +actions { + preamble { + id: 24509779 + name: "FabricIngress.upf.set_downlink_session_drop" + alias: "set_downlink_session_drop" + } +} +actions { + preamble { + id: 16984383 + name: "FabricIngress.upf.set_downlink_session" + alias: "set_downlink_session" + } + params { + id: 1 + name: "tun_peer_id" + bitwidth: 8 + } + params { + id: 2 + name: "session_meter_idx" + bitwidth: 15 + } +} +actions { + preamble { + id: 31195396 + name: "FabricIngress.upf.set_downlink_session_buf" + alias: "set_downlink_session_buf" + } + params { + id: 1 + name: "tun_peer_id" + bitwidth: 8 + } + params { + id: 2 + name: "session_meter_idx" + bitwidth: 15 + } +} +actions { + preamble { + id: 21581660 + name: "FabricIngress.upf.set_downlink_session_buf_drop" + alias: "set_downlink_session_buf_drop" + } +} +actions { + preamble { + id: 31219743 + name: "FabricIngress.upf.set_uplink_session" + alias: "set_uplink_session" + } + params { + id: 1 + name: "session_meter_idx" + bitwidth: 15 + } +} +actions { + preamble { + id: 20624836 + name: "FabricIngress.upf.uplink_drop_miss" + alias: "uplink_drop_miss" + } +} +actions { + preamble { + id: 26608757 + name: "FabricIngress.upf.downlink_drop_miss" + alias: "downlink_drop_miss" + } +} +actions { + preamble { + id: 28764209 + name: "FabricIngress.upf.uplink_drop" + alias: "uplink_drop" + } + params { + id: 1 + name: "ctr_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 30742995 + name: "FabricIngress.upf.downlink_drop" + alias: "downlink_drop" + } + params { + id: 1 + name: "ctr_id" + bitwidth: 12 + } +} +actions { + preamble { + id: 25805419 + name: "FabricIngress.upf.app_fwd" + alias: "app_fwd" + } + params { + id: 1 + name: "ctr_id" + bitwidth: 12 + } + params { + id: 2 + name: "tc" + bitwidth: 2 + } + params { + id: 3 + name: "app_meter_idx" + bitwidth: 15 + } +} +actions { + preamble { + id: 23536134 + name: "FabricIngress.upf.downlink_fwd_encap" + alias: "downlink_fwd_encap" + } + params { + id: 1 + name: "ctr_id" + bitwidth: 12 + } + params { + id: 2 + name: "tc" + bitwidth: 2 + } + params { + id: 3 + name: "teid" + bitwidth: 32 + } + params { + id: 4 + name: "qfi" + bitwidth: 6 + } + params { + id: 5 + name: "app_meter_idx" + bitwidth: 15 + } +} +actions { + preamble { + id: 26011763 + name: "FabricIngress.upf.set_routing_ipv4_dst" + alias: "set_routing_ipv4_dst" + } + params { + id: 1 + name: "tun_dst_addr" + bitwidth: 32 + } +} +actions { + preamble { + id: 26631629 + name: "FabricIngress.upf.set_app_id" + alias: "set_app_id" + } + params { + id: 1 + name: "app_id" + bitwidth: 8 + } +} +actions { + preamble { + id: 28119063 + name: "FabricIngress.upf.recirc_allow" + alias: "recirc_allow" + } +} +actions { + preamble { + id: 19222227 + name: "FabricIngress.upf.recirc_deny" + alias: "recirc_deny" + } +} +actions { + preamble { + id: 29186084 + name: "FabricIngress.upf.recirc_miss" + alias: "recirc_miss" + } +} +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: 28490145 + name: "FabricEgress.upf.load_tunnel_params" + alias: "load_tunnel_params" + } + params { + id: 1 + name: "tunnel_src_port" + bitwidth: 16 + } + params { + id: 2 + name: "tunnel_src_addr" + bitwidth: 32 + } + params { + id: 3 + name: "tunnel_dst_addr" + bitwidth: 32 + } +} +actions { + preamble { + id: 18154440 + name: "FabricEgress.upf.gtpu_only" + alias: "gtpu_only" + } +} +actions { + preamble { + id: 25872588 + name: "FabricEgress.upf.gtpu_with_psc" + alias: "gtpu_with_psc" + } +} +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 +} +counters { + preamble { + id: 316677328 + name: "FabricIngress.upf.terminations_counter" + alias: "FabricIngress.upf.terminations_counter" + } + spec { + unit: BOTH + } + size: 4096 +} +counters { + preamble { + id: 314209362 + name: "FabricEgress.upf.terminations_counter" + alias: "FabricEgress.upf.terminations_counter" + } + spec { + unit: BOTH + } + size: 4096 +} +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: 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: 335275671 + name: "FabricIngress.upf.recirc_stats" + alias: "recirc_stats" + } + spec { + unit: PACKETS + } + direct_table_id: 34400315 +} +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 +} +meters { + preamble { + id: 345152250 + name: "FabricIngress.upf.session_meter" + alias: "session_meter" + } + spec { + unit: BYTES + } + size: 20000 +} +meters { + preamble { + id: 343216442 + name: "FabricIngress.upf.app_meter" + alias: "app_meter" + } + spec { + unit: BYTES + } + size: 20000 +} +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-sd-fabric-svc-upf/run_test_01_bootstrap.sh b/src/tests/p4-sd-fabric-svc-upf/run_test_01_bootstrap.sh new file mode 100755 index 0000000000000000000000000000000000000000..0ce67d5183b53b33174fa650e68ef4dbd0ce32a6 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/run_test_01_bootstrap.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-upf/tests-setup/test_functional_bootstrap.py diff --git a/src/tests/p4-sd-fabric-svc-upf/run_test_02_service_provision_upf.sh b/src/tests/p4-sd-fabric-svc-upf/run_test_02_service_provision_upf.sh new file mode 100755 index 0000000000000000000000000000000000000000..c9df8f5542c2c5d392a5e6789e0503a389dc5102 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/run_test_02_service_provision_upf.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-upf/tests-service/test_functional_service_provision_upf.py diff --git a/src/tests/p4-sd-fabric-svc-upf/run_test_03_service_deprovision_upf.sh b/src/tests/p4-sd-fabric-svc-upf/run_test_03_service_deprovision_upf.sh new file mode 100755 index 0000000000000000000000000000000000000000..25cdb3f83a1c40aab93ccb3fb4f60a0008530cac --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/run_test_03_service_deprovision_upf.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-upf/tests-service/test_functional_service_deprovision_upf.py diff --git a/src/tests/p4-fabric-tna/run_test_02b_sbi_deprovision_int_l2_l3_acl.sh b/src/tests/p4-sd-fabric-svc-upf/run_test_04_cleanup.sh similarity index 78% rename from src/tests/p4-fabric-tna/run_test_02b_sbi_deprovision_int_l2_l3_acl.sh rename to src/tests/p4-sd-fabric-svc-upf/run_test_04_cleanup.sh index af54c2cae85ab15a7548c45a0b4ce4839a5a2560..22dbb71907d4bccf3906fe48e83c80087c8ceec7 100755 --- a/src/tests/p4-fabric-tna/run_test_02b_sbi_deprovision_int_l2_l3_acl.sh +++ b/src/tests/p4-sd-fabric-svc-upf/run_test_04_cleanup.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,4 +14,4 @@ # limitations under the License. source tfs_runtime_env_vars.sh -python3 -m pytest --verbose src/tests/p4-fabric-tna/tests-sbi/test_functional_sbi_rules_deprovision.py +python3 -m pytest --verbose src/tests/p4-sd-fabric-svc-upf/tests-setup/test_functional_cleanup.py diff --git a/src/tests/p4-sd-fabric-svc-upf/run_test_05_purge.sh b/src/tests/p4-sd-fabric-svc-upf/run_test_05_purge.sh new file mode 100755 index 0000000000000000000000000000000000000000..9f93d18dba680a877209c4462d21d2cae127f2a7 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/run_test_05_purge.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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-sd-fabric-svc-upf/tests-setup/test_functional_purge.py diff --git a/src/tests/p4-fabric-tna/setup.sh b/src/tests/p4-sd-fabric-svc-upf/setup.sh similarity index 73% rename from src/tests/p4-fabric-tna/setup.sh rename to src/tests/p4-sd-fabric-svc-upf/setup.sh index d5f080e6d871e364f4f32a9bb44b7d49758f1a2c..f934422bc239864e1ed8fc1b676b155a4d5da255 100755 --- a/src/tests/p4-fabric-tna/setup.sh +++ b/src/tests/p4-sd-fabric-svc-upf/setup.sh @@ -1,5 +1,5 @@ #! /bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -18,5 +18,5 @@ 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-fabric-tna/p4src/p4info.txt tfs/${POD_NAME}:/root/p4 -c=server -kubectl cp src/tests/p4-fabric-tna/p4src/bmv2.json tfs/${POD_NAME}:/root/p4 -c=server +kubectl cp src/tests/p4-sd-fabric-svc-upf/p4src/p4info.txt tfs/${POD_NAME}:/root/p4 -c=server +kubectl cp src/tests/p4-sd-fabric-svc-upf/p4src/bmv2.json tfs/${POD_NAME}:/root/p4 -c=server diff --git a/src/tests/p4-sd-fabric-svc-upf/tests-service/Fixtures.py b/src/tests/p4-sd-fabric-svc-upf/tests-service/Fixtures.py new file mode 100644 index 0000000000000000000000000000000000000000..cf77538f9d3860c1a45c56038288b87b08b8fd01 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/tests-service/Fixtures.py @@ -0,0 +1,39 @@ +# Copyright 2022-2026 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 pytest +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from service.client.ServiceClient import ServiceClient + + +@pytest.fixture(scope='session') +def context_client(): + _client = ContextClient() + yield _client + _client.close() + + +@pytest.fixture(scope='session') +def device_client(): + _client = DeviceClient() + yield _client + _client.close() + + +@pytest.fixture(scope='session') +def service_client(): + _client = ServiceClient() + yield _client + _client.close() diff --git a/src/tests/p4-sd-fabric-svc-upf/tests-service/__init__.py b/src/tests/p4-sd-fabric-svc-upf/tests-service/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/tests-service/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2022-2026 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-sd-fabric-svc-upf/tests-service/test_functional_service_deprovision_upf.py b/src/tests/p4-sd-fabric-svc-upf/tests-service/test_functional_service_deprovision_upf.py new file mode 100644 index 0000000000000000000000000000000000000000..7b1496b9b802c43627a57b26fca2c3f4ff75acb1 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/tests-service/test_functional_service_deprovision_upf.py @@ -0,0 +1,94 @@ +# Copyright 2022-2026 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.proto.context_pb2 import ( + ServiceId, ServiceStatusEnum, ServiceTypeEnum, +) +from common.tools.grpc.Tools import grpc_message_to_json_string +from common.tools.object_factory.Service import json_service_id +from context.client.ContextClient import ContextClient +from service.client.ServiceClient import ServiceClient +from tests.tools.test_tools_p4 import * + +from .Fixtures import ( # pylint: disable=unused-import + context_client, service_client, +) + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +DEV_NB = 5 +P4_DEV_NB = 1 +UE_NB = 1 + +BASIC_UPF_RULES = 22 +PER_UE_RULES = 4 + +def test_service_deletion_upf( + context_client : ContextClient, # pylint: disable=redefined-outer-name + service_client : ServiceClient # pylint: disable=redefined-outer-name +) -> None: + # Get the current number of devices + response = context_client.ListDevices(ADMIN_CONTEXT_ID) + LOGGER.warning('Devices[{:d}] = {:s}'.format(len(response.devices), grpc_message_to_json_string(response))) + + # Total devices + dev_nb = len(response.devices) + assert dev_nb == DEV_NB + + # P4 devices + p4_dev_nb = identify_number_of_p4_devices(response.devices) + assert p4_dev_nb == P4_DEV_NB + + # Get the current number of rules in the P4 devices + p4_rules_before_deletion = get_number_of_rules(response.devices) + + # Get the current number of services + response = context_client.ListServices(ADMIN_CONTEXT_ID) + services_nb_before_deletion = len(response.services) + assert verify_active_service_type(response.services, ServiceTypeEnum.SERVICETYPE_UPF) + + for service in response.services: + # Ignore services of other types + if service.service_type != ServiceTypeEnum.SERVICETYPE_UPF: + continue + + service_id = service.service_id + assert service_id + + service_uuid = service_id.service_uuid.uuid + context_uuid = service_id.context_id.context_uuid.uuid + assert service.service_status.service_status == ServiceStatusEnum.SERVICESTATUS_ACTIVE + + # Delete L2 service + service_client.DeleteService(ServiceId(**json_service_id(service_uuid, json_context_id(context_uuid)))) + + # Get an updated view of the services + response = context_client.ListServices(ADMIN_CONTEXT_ID) + services_nb_after_deletion = len(response.services) + assert services_nb_after_deletion == services_nb_before_deletion - 1, "Exactly one service must be deleted" + + # Get an updated view of the devices + response = context_client.ListDevices(ADMIN_CONTEXT_ID) + p4_rules_after_deletion = get_number_of_rules(response.devices) + + rules_diff = p4_rules_before_deletion - p4_rules_after_deletion + + desired_rules = (P4_DEV_NB * BASIC_UPF_RULES) + (UE_NB * PER_UE_RULES) + + assert p4_rules_after_deletion < p4_rules_before_deletion, "UPF service must contain some rules" + assert rules_diff == desired_rules, \ + "UPF service must contain {} rules per device".format(desired_rules) diff --git a/src/tests/p4-sd-fabric-svc-upf/tests-service/test_functional_service_provision_upf.py b/src/tests/p4-sd-fabric-svc-upf/tests-service/test_functional_service_provision_upf.py new file mode 100644 index 0000000000000000000000000000000000000000..fcc50d523851a97e51659860f18326ce01b38a4a --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/tests-service/test_functional_service_provision_upf.py @@ -0,0 +1,100 @@ +# Copyright 2022-2026 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 os + +from common.proto.context_pb2 import ServiceTypeEnum +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 service.client.ServiceClient import ServiceClient +from tests.tools.test_tools_p4 import * + +from .Fixtures import ( # pylint: disable=unused-import + context_client, device_client, service_client, +) + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +DEV_NB = 5 +P4_DEV_NB = 1 +UE_NB = 1 + +BASIC_UPF_RULES = 22 +PER_UE_RULES = 4 + +TEST_PATH = os.path.join( + os.path.dirname(os.path.dirname( + os.path.abspath(__file__) + )) + '/descriptors') +assert os.path.exists(TEST_PATH), "Invalid path to tests" + +DESC_FILE_SERVICE_P4_UPF = os.path.join(TEST_PATH, 'service-upf-ui.json') +assert os.path.exists(DESC_FILE_SERVICE_P4_UPF),\ + "Invalid path to the UPF service descriptor" + +def test_service_creation_upf( + context_client : ContextClient, # pylint: disable=redefined-outer-name + device_client : DeviceClient, # pylint: disable=redefined-outer-name + service_client : ServiceClient # pylint: disable=redefined-outer-name +) -> None: + # Get the current number of services + response = context_client.ListServices(ADMIN_CONTEXT_ID) + services_nb_before = len(response.services) + + # Get the current number of devices + response = context_client.ListDevices(ADMIN_CONTEXT_ID) + LOGGER.warning('Devices[{:d}] = {:s}'.format(len(response.devices), grpc_message_to_json_string(response))) + + # Total devices + dev_nb = len(response.devices) + assert dev_nb == DEV_NB + + # P4 devices + p4_dev_nb = identify_number_of_p4_devices(response.devices) + assert p4_dev_nb == P4_DEV_NB + + # Get the current number of rules in the P4 devices + p4_rules_before = get_number_of_rules(response.devices) + + # Load service + descriptor_loader = DescriptorLoader( + descriptors_file=DESC_FILE_SERVICE_P4_UPF, + context_client=context_client, device_client=device_client, service_client=service_client + ) + results = descriptor_loader.process() + check_descriptor_load_results(results, descriptor_loader) + + # Get an updated view of the services + response = context_client.ListServices(ADMIN_CONTEXT_ID) + services_nb_after = len(response.services) + assert services_nb_after == services_nb_before + 1, "Exactly one service must be in place" + assert verify_active_service_type(response.services, ServiceTypeEnum.SERVICETYPE_UPF) + + # Get an updated view of the devices + response = context_client.ListDevices(ADMIN_CONTEXT_ID) + p4_rules_after = get_number_of_rules(response.devices) + + rules_diff = p4_rules_after - p4_rules_before + + desired_rules = (P4_DEV_NB * BASIC_UPF_RULES) + (UE_NB * PER_UE_RULES) + + assert p4_rules_after > p4_rules_before, "UPF service must install some rules" + assert rules_diff == desired_rules, \ + "UPF service must install {} rules per device".format(desired_rules) diff --git a/src/tests/p4-sd-fabric-svc-upf/tests-setup/Fixtures.py b/src/tests/p4-sd-fabric-svc-upf/tests-setup/Fixtures.py new file mode 100644 index 0000000000000000000000000000000000000000..cf77538f9d3860c1a45c56038288b87b08b8fd01 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/tests-setup/Fixtures.py @@ -0,0 +1,39 @@ +# Copyright 2022-2026 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 pytest +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from service.client.ServiceClient import ServiceClient + + +@pytest.fixture(scope='session') +def context_client(): + _client = ContextClient() + yield _client + _client.close() + + +@pytest.fixture(scope='session') +def device_client(): + _client = DeviceClient() + yield _client + _client.close() + + +@pytest.fixture(scope='session') +def service_client(): + _client = ServiceClient() + yield _client + _client.close() diff --git a/src/tests/p4-sd-fabric-svc-upf/tests-setup/__init__.py b/src/tests/p4-sd-fabric-svc-upf/tests-setup/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/tests-setup/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2022-2026 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-sd-fabric-svc-upf/tests-setup/test_functional_bootstrap.py b/src/tests/p4-sd-fabric-svc-upf/tests-setup/test_functional_bootstrap.py new file mode 100644 index 0000000000000000000000000000000000000000..e902eb3d62b1c5bd3cd7652d5730c2afc4401a1a --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/tests-setup/test_functional_bootstrap.py @@ -0,0 +1,85 @@ +# Copyright 2022-2026 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, 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.tools.test_tools_p4 import ADMIN_CONTEXT_ID + +from .Fixtures import ( # pylint: disable=unused-import + context_client, device_client, +) + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +TEST_PATH = os.path.join( + os.path.dirname(os.path.dirname( + os.path.abspath(__file__) + )) + '/descriptors') +assert os.path.exists(TEST_PATH), "Invalid path to tests" + +# Topology descriptor +DESC_TOPOLOGY = os.path.join(TEST_PATH, 'all.json') +assert os.path.exists(DESC_TOPOLOGY), "Invalid path to the topology descriptor" + +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_TOPOLOGY, 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-sd-fabric-svc-upf/tests-setup/test_functional_cleanup.py b/src/tests/p4-sd-fabric-svc-upf/tests-setup/test_functional_cleanup.py new file mode 100644 index 0000000000000000000000000000000000000000..c35a3115853864bed3542b4651b531418f5a34b3 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/tests-setup/test_functional_cleanup.py @@ -0,0 +1,54 @@ +# Copyright 2022-2026 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 os + +from common.tools.descriptor.Loader import ( + DescriptorLoader, validate_empty_scenario, +) +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from tests.tools.test_tools_p4 import ADMIN_CONTEXT_ID + +from .Fixtures import ( # pylint: disable=unused-import + context_client, device_client, +) + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +TEST_PATH = os.path.join( + os.path.dirname(os.path.dirname( + os.path.abspath(__file__) + )) + '/descriptors') +assert os.path.exists(TEST_PATH), "Invalid path to tests" + +# Topology descriptor +DESC_TOPOLOGY = os.path.join(TEST_PATH, 'all.json') +assert os.path.exists(DESC_TOPOLOGY), "Invalid path to the topology descriptor" + +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) + + # Unload topology and validate empty scenario + descriptor_loader = DescriptorLoader( + descriptors_file=DESC_TOPOLOGY, 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-sd-fabric-svc-upf/tests-setup/test_functional_purge.py b/src/tests/p4-sd-fabric-svc-upf/tests-setup/test_functional_purge.py new file mode 100644 index 0000000000000000000000000000000000000000..7462537642fdb4c51c57c5d50406db4fcb47d690 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/tests-setup/test_functional_purge.py @@ -0,0 +1,89 @@ +# Copyright 2022-2026 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.proto.context_pb2 import ( + DeviceId, LinkId, ServiceId, ServiceStatusEnum, +) +from common.tools.grpc.Tools import grpc_message_to_json_string +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 context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from service.client.ServiceClient import ServiceClient +from tests.tools.test_tools_p4 import ADMIN_CONTEXT_ID + +from .Fixtures import ( # pylint: disable=unused-import + context_client, device_client, service_client, +) + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +def test_clean_services( + context_client : ContextClient, # pylint: disable=redefined-outer-name + service_client : ServiceClient # pylint: disable=redefined-outer-name +) -> None: + response = context_client.ListServices(ADMIN_CONTEXT_ID) + LOGGER.warning('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response))) + + for service in response.services: + service_id = service.service_id + assert service_id + + service_uuid = service_id.service_uuid.uuid + context_uuid = service_id.context_id.context_uuid.uuid + assert service.service_status.service_status == ServiceStatusEnum.SERVICESTATUS_ACTIVE + + # Delete service + service_client.DeleteService(ServiceId(**json_service_id(service_uuid, json_context_id(context_uuid)))) + +def test_clean_links( + context_client : ContextClient, # pylint: disable=redefined-outer-name +) -> None: + response = context_client.ListLinks(ADMIN_CONTEXT_ID) + + for link in response.links: + link_id = link.link_id + + # Delete link + context_client.RemoveLink(LinkId(**link_id)) + +def test_clean_devices( + context_client : ContextClient, # pylint: disable=redefined-outer-name + device_client : DeviceClient # 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))) + + for device in response.devices: + device_uuid = device.device_id.device_uuid.uuid + device_json = json_device_id(device_uuid) + + # Delete device + device_client.DeleteDevice(DeviceId(**device_json)) + +def test_clean_context( + context_client : ContextClient # pylint: disable=redefined-outer-name +) -> None: + # Verify the scenario has no services/slices + response = context_client.ListTopologies(ADMIN_CONTEXT_ID) + + for topology in response.topologies: + topology_id = topology.topology_id + response = context_client.RemoveTopology(topology_id) + + response = context_client.RemoveContext(ADMIN_CONTEXT_ID) diff --git a/src/tests/p4-sd-fabric-svc-upf/topology/README.md b/src/tests/p4-sd-fabric-svc-upf/topology/README.md new file mode 100644 index 0000000000000000000000000000000000000000..1ce9cb1dc508020f699a06be47709692b2481575 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/topology/README.md @@ -0,0 +1,135 @@ +# P4 5G UPF + +For a P4 switch to act as a 5G UPF, you need a machine with at least 3 network interfaces as follows: + +- a management interface `mgmt` for the switch to communicate with the control plane (i.e., TFS controller) +- a left-hand side data plane interface `dp-1` towards the 5G gNB +- a right-hand side data plane interface `dp-2` towards the Data Network + +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 5G UPF P4 switch + +Follow the steps below to prepare the P4 switch to act as a UPF. + +```bash +nano p4-switch-conf-common.sh + +HOST_IFACE_EXT="mgmt" # Interface towards TFS (management, not part of the switch) +SW_IFACE_DATA_LEFT="dp-1" # Switch interface towards the 5G gNB +SW_IFACE_DATA_RIGHT="dp-2" # Switch interface towards the Data Network +``` + +### 1: Setup environment + +Edit the `p4-switch-setup.sh` script to modify the subnets' information according to your network setup: + +```bash +nano p4-switch-setup.sh + +# Subnets managed by the switch +DOMAIN_IP_LEFT="10.10.1.1/24" # Left-hand side subnet (5G gNB) +DOMAIN_IP_RIGHT="10.10.2.1/24" # Right-hand side subnet (DNN) +``` + +Once your network setup is applied, run the `p4-switch-setup.sh` script as follows: + +```bash +sudo bash p4-switch-setup.sh +``` + +### 2: Deploy Stratum + +First you need to configure the chassis configuration file with the correct network interfaces names. +Ensure that the interface names listed in the chassis configuration file agree with the ones you added in `p4-switch-conf-common.sh`. + +```bash +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-1" +} +nodes { + id: 1 + slot: 1 + index: 1 +} +singleton_ports { + id: 1 + name: "dp-1" + slot: 1 + port: 1 + channel: 1 + speed_bps: 100000000000 + config_params { + admin_state: ADMIN_STATE_ENABLED + } + node: 1 +} +singleton_ports { + id: 2 + name: "dp-2" + slot: 1 + port: 2 + channel: 1 + speed_bps: 100000000000 + config_params { + admin_state: ADMIN_STATE_ENABLED + } + node: 1 +} +singleton_ports { + id: 3 + name: "mgmt" + slot: 1 + port: 3 + channel: 1 + speed_bps: 100000000000 + config_params { + admin_state: ADMIN_STATE_ENABLED + } + node: 1 +} +``` + +To deploy Stratum, do: + +```bash +sudo bash run-stratum.sh +``` + +To run Stratum will verbose logging, open the `run-stratum.sh` and change: + +```bash +LOG_LEVEL="debug" +``` + +Then, re-deploy Stratum as shown above. + +To verify that Stratum has been correctly deployed, you should see the following output: + +``` + config_monitoring_service.cc:94] Pushing the saved chassis config read from p4-switch-three-port-chassis-config-phy.pb.txt... + bmv2_chassis_manager.cc:519] Registered port status callbacks successfully for node 1. + bmv2_chassis_manager.cc:453] State of port 1 in node 1: UP. + bmv2_chassis_manager.cc:453] State of port 2 in node 1: UP. + bmv2_chassis_manager.cc:453] State of port 3 in node 1: UP. + bmv2_switch.cc:74] P4-based forwarding pipeline config pushed successfully to node with ID 1. + 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... +``` + +### 3: Restore to the original setup + +When your tests with Stratum and TFS are over, you may want to tear the switch down and kill Stratum. + +```bash +sudo bash p4-switch-tear-down.sh +``` diff --git a/src/tests/p4-sd-fabric-svc-upf/topology/p4-switch-conf-common.sh b/src/tests/p4-sd-fabric-svc-upf/topology/p4-switch-conf-common.sh new file mode 100644 index 0000000000000000000000000000000000000000..188bd5898622d3567c1e6cd7fc17e29e41cfc6f5 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/topology/p4-switch-conf-common.sh @@ -0,0 +1,33 @@ +#!/bin/bash +# Copyright 2022-2026 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. + + +# Physical interfaces +HOST_IFACE_EXT="mgmt" # Interface towards TFS (management) +SW_IFACE_DATA_LEFT="dp-1" # Interface towards the 5G gNB (data plane) +SW_IFACE_DATA_RIGHT="dp-2" # Interface towards the Data Network (data plane) + +# Subnets managed by the switch +DOMAIN_IP_LEFT="10.10.1.1/24" # Left-hand side subnet (5G gNB) +DOMAIN_IP_RIGHT="10.10.2.1/24" # Right-hand side subnet (DNN) + +# 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-sd-fabric-svc-upf/topology/p4-switch-setup.sh b/src/tests/p4-sd-fabric-svc-upf/topology/p4-switch-setup.sh new file mode 100644 index 0000000000000000000000000000000000000000..75bddf39f3718971404d472af2dcccc62d210e57 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/topology/p4-switch-setup.sh @@ -0,0 +1,37 @@ +#!bin/bash +# Copyright 2022-2026 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 +} + +disable_csum_offloading() { + ethtool -K ${SW_IFACE_DATA_LEFT} rx off tx off + ethtool -K ${SW_IFACE_DATA_RIGHT} rx off tx off +} + +kill_stratum +disable_csum_offloading + +exit 0 diff --git a/src/nbi/service/ietf_l2vpn/schemas/Common.py b/src/tests/p4-sd-fabric-svc-upf/topology/p4-switch-tear-down.sh similarity index 60% rename from src/nbi/service/ietf_l2vpn/schemas/Common.py rename to src/tests/p4-sd-fabric-svc-upf/topology/p4-switch-tear-down.sh index b18c54a0c58f247e60f8985985fabc2a411fdd36..87c95b15380db2c3537f379243189a94b0861aaa 100644 --- a/src/nbi/service/ietf_l2vpn/schemas/Common.py +++ b/src/tests/p4-sd-fabric-svc-upf/topology/p4-switch-tear-down.sh @@ -1,10 +1,11 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +#!bin/bash +# Copyright 2022-2026 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 +# 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, @@ -12,5 +13,19 @@ # See the License for the specific language governing permissions and # limitations under the License. -# String pattern for UUIDs such as '3fd942ee-2dc3-41d1-aeec-65aa85d117b2' -REGEX_UUID = r'[a-fA-F0-9]{8}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{4}\-[a-fA-F0-9]{12}' + +# 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 +} + +kill_stratum + +exit 0 diff --git a/src/tests/p4-sd-fabric-svc-upf/topology/p4-switch-three-port-chassis-config-phy.pb.txt b/src/tests/p4-sd-fabric-svc-upf/topology/p4-switch-three-port-chassis-config-phy.pb.txt new file mode 100644 index 0000000000000000000000000000000000000000..474196ef903cedfbd5137bfa380dc88a77f50e16 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/topology/p4-switch-three-port-chassis-config-phy.pb.txt @@ -0,0 +1,46 @@ +description: "Chassis configuration for a single Stratum bmv2 switch with 3 ports" +chassis { + platform: PLT_P4_SOFT_SWITCH + name: "bmv2-1" +} +nodes { + id: 1 + slot: 1 + index: 1 +} +singleton_ports { + id: 1 + name: "dp-1" + slot: 1 + port: 1 + channel: 1 + speed_bps: 100000000000 + config_params { + admin_state: ADMIN_STATE_ENABLED + } + node: 1 +} +singleton_ports { + id: 2 + name: "dp-2" + slot: 1 + port: 2 + channel: 1 + speed_bps: 100000000000 + config_params { + admin_state: ADMIN_STATE_ENABLED + } + node: 1 +} +singleton_ports { + id: 3 + name: "mgmt" + slot: 1 + port: 3 + channel: 1 + speed_bps: 100000000000 + config_params { + admin_state: ADMIN_STATE_ENABLED + } + node: 1 +} diff --git a/src/tests/p4-sd-fabric-svc-upf/topology/pipeline_config.pb.txt b/src/tests/p4-sd-fabric-svc-upf/topology/pipeline_config.pb.txt new file mode 100644 index 0000000000000000000000000000000000000000..e127e83445ad11f302dec705e8e4383d0f6f2ed6 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/topology/pipeline_config.pb.txt @@ -0,0 +1,2490 @@ +node_id_to_config { + key: 1 + value { + p4info { + 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: 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: 41155994 + name: "FabricIngress.upf.interfaces" + alias: "interfaces" + } + match_fields { + id: 1 + name: "ipv4_dst_addr" + bitwidth: 32 + match_type: LPM + } + match_fields { + id: 2 + name: "gtpu_is_valid" + bitwidth: 1 + match_type: EXACT + } + action_refs { + id: 30131500 + } + action_refs { + id: 19786139 + } + action_refs { + id: 19466514 + } + action_refs { + id: 30204657 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 30204657 + size: 64 + } + tables { + preamble { + id: 37952203 + name: "FabricIngress.upf.downlink_sessions" + alias: "downlink_sessions" + } + match_fields { + id: 1 + name: "ue_addr" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 16984383 + } + action_refs { + id: 31195396 + } + action_refs { + id: 21581660 + } + action_refs { + id: 24509779 + } + action_refs { + id: 32013192 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 32013192 + size: 100000 + } + tables { + preamble { + id: 45463032 + name: "FabricIngress.upf.uplink_sessions" + alias: "uplink_sessions" + } + match_fields { + id: 1 + name: "tunnel_ipv4_dst" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "teid" + bitwidth: 32 + match_type: EXACT + } + action_refs { + id: 31219743 + } + action_refs { + id: 24328070 + } + action_refs { + id: 20368148 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 20368148 + size: 100000 + } + tables { + preamble { + id: 50169666 + name: "FabricIngress.upf.uplink_terminations" + alias: "uplink_terminations" + } + match_fields { + id: 1 + name: "ue_session_id" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "app_id" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 25805419 + } + action_refs { + id: 28764209 + } + action_refs { + id: 20624836 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 20624836 + size: 100000 + } + tables { + preamble { + id: 35221941 + name: "FabricIngress.upf.downlink_terminations" + alias: "downlink_terminations" + } + match_fields { + id: 1 + name: "ue_session_id" + bitwidth: 32 + match_type: EXACT + } + match_fields { + id: 2 + name: "app_id" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 23536134 + } + action_refs { + id: 30742995 + } + action_refs { + id: 26608757 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 26608757 + size: 100000 + } + tables { + preamble { + id: 48831175 + name: "FabricIngress.upf.ig_tunnel_peers" + alias: "ig_tunnel_peers" + } + match_fields { + id: 1 + name: "tun_peer_id" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 26011763 + } + action_refs { + id: 28485346 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 28485346 + size: 256 + } + tables { + preamble { + id: 46184415 + name: "FabricIngress.upf.applications" + alias: "applications" + } + match_fields { + id: 1 + name: "slice_id" + bitwidth: 4 + match_type: EXACT + } + match_fields { + id: 2 + name: "app_ipv4_addr" + bitwidth: 32 + match_type: LPM + } + match_fields { + id: 3 + name: "app_l4_port" + bitwidth: 16 + match_type: RANGE + } + match_fields { + id: 4 + name: "app_ip_proto" + bitwidth: 8 + match_type: TERNARY + } + action_refs { + id: 26631629 + } + action_refs { + id: 28485346 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 28485346 + size: 5 + } + tables { + preamble { + id: 34400315 + name: "FabricIngress.upf.uplink_recirc_rules" + alias: "uplink_recirc_rules" + } + match_fields { + id: 1 + name: "ipv4_src" + bitwidth: 32 + match_type: TERNARY + } + match_fields { + id: 2 + name: "ipv4_dst" + bitwidth: 32 + match_type: TERNARY + } + action_refs { + id: 28119063 + } + action_refs { + id: 19222227 + } + action_refs { + id: 29186084 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 29186084 + direct_resource_ids: 335275671 + size: 64 + } + 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: 37756041 + name: "FabricEgress.upf.eg_tunnel_peers" + alias: "eg_tunnel_peers" + } + match_fields { + id: 1 + name: "tun_peer_id" + bitwidth: 8 + match_type: EXACT + } + action_refs { + id: 28490145 + } + action_refs { + id: 28485346 + annotations: "@defaultonly" + scope: DEFAULT_ONLY + } + const_default_action_id: 28485346 + size: 256 + } + tables { + preamble { + id: 35202849 + name: "FabricEgress.upf.gtpu_encap" + alias: "gtpu_encap" + } + action_refs { + id: 18154440 + } + action_refs { + id: 25872588 + } + size: 1 + } + 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: 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: 30131500 + name: "FabricIngress.upf.iface_access" + alias: "iface_access" + } + params { + id: 1 + name: "slice_id" + bitwidth: 4 + } + } + actions { + preamble { + id: 19786139 + name: "FabricIngress.upf.iface_core" + alias: "iface_core" + } + params { + id: 1 + name: "slice_id" + bitwidth: 4 + } + } + actions { + preamble { + id: 19466514 + name: "FabricIngress.upf.iface_dbuf" + alias: "iface_dbuf" + } + params { + id: 1 + name: "slice_id" + bitwidth: 4 + } + } + actions { + preamble { + id: 30204657 + name: "FabricIngress.upf.iface_miss" + alias: "iface_miss" + } + } + actions { + preamble { + id: 20368148 + name: "FabricIngress.upf.set_uplink_session_miss" + alias: "set_uplink_session_miss" + } + } + actions { + preamble { + id: 24328070 + name: "FabricIngress.upf.set_uplink_session_drop" + alias: "set_uplink_session_drop" + } + } + actions { + preamble { + id: 32013192 + name: "FabricIngress.upf.set_downlink_session_miss" + alias: "set_downlink_session_miss" + } + } + actions { + preamble { + id: 24509779 + name: "FabricIngress.upf.set_downlink_session_drop" + alias: "set_downlink_session_drop" + } + } + actions { + preamble { + id: 16984383 + name: "FabricIngress.upf.set_downlink_session" + alias: "set_downlink_session" + } + params { + id: 1 + name: "tun_peer_id" + bitwidth: 8 + } + params { + id: 2 + name: "session_meter_idx" + bitwidth: 15 + } + } + actions { + preamble { + id: 31195396 + name: "FabricIngress.upf.set_downlink_session_buf" + alias: "set_downlink_session_buf" + } + params { + id: 1 + name: "tun_peer_id" + bitwidth: 8 + } + params { + id: 2 + name: "session_meter_idx" + bitwidth: 15 + } + } + actions { + preamble { + id: 21581660 + name: "FabricIngress.upf.set_downlink_session_buf_drop" + alias: "set_downlink_session_buf_drop" + } + } + actions { + preamble { + id: 31219743 + name: "FabricIngress.upf.set_uplink_session" + alias: "set_uplink_session" + } + params { + id: 1 + name: "session_meter_idx" + bitwidth: 15 + } + } + actions { + preamble { + id: 20624836 + name: "FabricIngress.upf.uplink_drop_miss" + alias: "uplink_drop_miss" + } + } + actions { + preamble { + id: 26608757 + name: "FabricIngress.upf.downlink_drop_miss" + alias: "downlink_drop_miss" + } + } + actions { + preamble { + id: 28764209 + name: "FabricIngress.upf.uplink_drop" + alias: "uplink_drop" + } + params { + id: 1 + name: "ctr_id" + bitwidth: 12 + } + } + actions { + preamble { + id: 30742995 + name: "FabricIngress.upf.downlink_drop" + alias: "downlink_drop" + } + params { + id: 1 + name: "ctr_id" + bitwidth: 12 + } + } + actions { + preamble { + id: 25805419 + name: "FabricIngress.upf.app_fwd" + alias: "app_fwd" + } + params { + id: 1 + name: "ctr_id" + bitwidth: 12 + } + params { + id: 2 + name: "tc" + bitwidth: 2 + } + params { + id: 3 + name: "app_meter_idx" + bitwidth: 15 + } + } + actions { + preamble { + id: 23536134 + name: "FabricIngress.upf.downlink_fwd_encap" + alias: "downlink_fwd_encap" + } + params { + id: 1 + name: "ctr_id" + bitwidth: 12 + } + params { + id: 2 + name: "tc" + bitwidth: 2 + } + params { + id: 3 + name: "teid" + bitwidth: 32 + } + params { + id: 4 + name: "qfi" + bitwidth: 6 + } + params { + id: 5 + name: "app_meter_idx" + bitwidth: 15 + } + } + actions { + preamble { + id: 26011763 + name: "FabricIngress.upf.set_routing_ipv4_dst" + alias: "set_routing_ipv4_dst" + } + params { + id: 1 + name: "tun_dst_addr" + bitwidth: 32 + } + } + actions { + preamble { + id: 26631629 + name: "FabricIngress.upf.set_app_id" + alias: "set_app_id" + } + params { + id: 1 + name: "app_id" + bitwidth: 8 + } + } + actions { + preamble { + id: 28119063 + name: "FabricIngress.upf.recirc_allow" + alias: "recirc_allow" + } + } + actions { + preamble { + id: 19222227 + name: "FabricIngress.upf.recirc_deny" + alias: "recirc_deny" + } + } + actions { + preamble { + id: 29186084 + name: "FabricIngress.upf.recirc_miss" + alias: "recirc_miss" + } + } + 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: 28490145 + name: "FabricEgress.upf.load_tunnel_params" + alias: "load_tunnel_params" + } + params { + id: 1 + name: "tunnel_src_port" + bitwidth: 16 + } + params { + id: 2 + name: "tunnel_src_addr" + bitwidth: 32 + } + params { + id: 3 + name: "tunnel_dst_addr" + bitwidth: 32 + } + } + actions { + preamble { + id: 18154440 + name: "FabricEgress.upf.gtpu_only" + alias: "gtpu_only" + } + } + actions { + preamble { + id: 25872588 + name: "FabricEgress.upf.gtpu_with_psc" + alias: "gtpu_with_psc" + } + } + 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 + } + counters { + preamble { + id: 316677328 + name: "FabricIngress.upf.terminations_counter" + alias: "FabricIngress.upf.terminations_counter" + } + spec { + unit: BOTH + } + size: 4096 + } + counters { + preamble { + id: 314209362 + name: "FabricEgress.upf.terminations_counter" + alias: "FabricEgress.upf.terminations_counter" + } + spec { + unit: BOTH + } + size: 4096 + } + 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: 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: 335275671 + name: "FabricIngress.upf.recirc_stats" + alias: "recirc_stats" + } + spec { + unit: PACKETS + } + direct_table_id: 34400315 + } + 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 + } + meters { + preamble { + id: 345152250 + name: "FabricIngress.upf.session_meter" + alias: "session_meter" + } + spec { + unit: BYTES + } + size: 20000 + } + meters { + preamble { + id: 343216442 + name: "FabricIngress.upf.app_meter" + alias: "app_meter" + } + spec { + unit: BYTES + } + size: 20000 + } + 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 + } + } + } + } + } + } + } + p4_device_config: "{\n \"header_types\" : [\n {\n \"name\" : \"scalars_0\",\n \"id\" : 0,\n \"fields\" : [\n [\"tmp_2\", 16, false],\n [\"tmp_4\", 1, false],\n [\"tmp_6\", 16, false],\n [\"tmp_12\", 3, false],\n [\"tmp_13\", 8, false],\n [\"gtpu_ext_len_0\", 8, false],\n [\"tmp_3\", 16, false],\n [\"tmp_5\", 16, false],\n [\"tmp_7\", 4, false],\n [\"tmp_8\", 112, false],\n [\"tmp_9\", 112, false],\n [\"tmp_10\", 112, false],\n [\"tmp_11\", 64, false],\n [\"tmp_14\", 32, false],\n [\"tmp_15\", 32, false],\n [\"tmp_16\", 32, false],\n [\"tmp_17\", 32, false],\n [\"tmp_18\", 8, false],\n [\"tmp_19\", 32, false],\n [\"tmp_20\", 32, false],\n [\"tmp_21\", 32, false],\n [\"tmp_22\", 32, false],\n [\"tmp_23\", 48, false],\n [\"tmp_24\", 48, false],\n [\"tmp_25\", 16, false],\n [\"tmp_26\", 32, false],\n [\"tmp_27\", 32, false],\n [\"tmp_28\", 8, false],\n [\"tmp_29\", 16, false],\n [\"tmp_30\", 16, false],\n [\"tmp_31\", 32, false],\n [\"qos_packet_color\", 2, false],\n [\"upf_is_uplink\", 1, false],\n [\"upf_term_hit\", 1, false],\n [\"upf_sess_hit\", 1, false],\n [\"upf_app_ipv4_addr\", 32, false],\n [\"upf_app_l4_port\", 16, false],\n [\"upf_app_ip_proto\", 8, false],\n [\"upf_internal_app_id\", 8, false],\n [\"upf_ue_session_id\", 32, false],\n [\"upf_session_meter_idx_internal\", 15, false],\n [\"upf_app_meter_idx_internal\", 15, false],\n [\"tmp_32\", 32, false],\n [\"tmp_33\", 32, false],\n [\"tmp_34\", 32, false],\n [\"tmp_35\", 32, false],\n [\"tmp_36\", 32, false],\n [\"tmp_37\", 32, false],\n [\"tmp_38\", 32, false],\n [\"tmp_39\", 32, false],\n [\"tmp_40\", 32, false],\n [\"tmp_41\", 32, false],\n [\"dscp_rewriter_tmp_dscp\", 6, false],\n [\"int_egress_fabric_md_pkt_length\", 16, false],\n [\"int_egress_egress_qid\", 5, false],\n [\"int_egress_reg\", 32, false],\n [\"key_0\", 16, false],\n [\"key_1\", 16, false],\n [\"userMetadata._skip_egress0\", 1, false],\n [\"userMetadata._do_upf_uplink_recirc1\", 1, false],\n [\"userMetadata._drop_ctl2\", 1, false],\n [\"userMetadata._int_mirror_type3\", 3, false],\n [\"userMetadata._ingress_ecmp_hash5\", 32, false],\n [\"userMetadata._ingress_lkp_eth_dst6\", 48, false],\n [\"userMetadata._ingress_lkp_eth_src7\", 48, false],\n [\"userMetadata._ingress_lkp_eth_type8\", 16, false],\n [\"userMetadata._ingress_lkp_vlan_id9\", 12, false],\n [\"userMetadata._ingress_lkp_is_ipv410\", 1, false],\n [\"userMetadata._ingress_lkp_ipv4_src11\", 32, false],\n [\"userMetadata._ingress_lkp_ipv4_dst12\", 32, false],\n [\"userMetadata._ingress_lkp_ip_proto13\", 8, false],\n [\"userMetadata._ingress_lkp_l4_sport14\", 16, false],\n [\"userMetadata._ingress_lkp_l4_dport15\", 16, false],\n [\"userMetadata._ingress_lkp_icmp_type16\", 8, false],\n [\"userMetadata._ingress_lkp_icmp_code17\", 8, false],\n [\"userMetadata._ingress_routing_ipv4_dst18\", 32, false],\n [\"userMetadata._ingress_skip_forwarding19\", 1, false],\n [\"userMetadata._ingress_skip_next20\", 1, false],\n [\"userMetadata._ingress_next_id21\", 32, false],\n [\"userMetadata._ingress_egress_port_set22\", 1, false],\n [\"userMetadata._ingress_punt_to_cpu23\", 1, false],\n [\"userMetadata._ingress_ipv4_checksum_err24\", 1, false],\n [\"userMetadata._ingress_inner_ipv4_checksum_err25\", 1, false],\n [\"userMetadata._ingress_slice_id26\", 4, false],\n [\"userMetadata._ingress_tc27\", 2, false],\n [\"userMetadata._ingress_tc_unknown28\", 1, false],\n [\"userMetadata._ingress_is_upf_hit29\", 1, false],\n [\"userMetadata._ingress_upf_slice_id30\", 4, false],\n [\"userMetadata._ingress_upf_tc31\", 2, false],\n [\"userMetadata._ingress_upf_meter_color32\", 2, false],\n [\"userMetadata._ingress_ig_port_type33\", 2, false],\n [\"userMetadata._ingress_mirror_mirror_session_id34\", 10, false],\n [\"userMetadata._ingress_mirror_bmd_type35\", 8, false],\n [\"userMetadata._egress_cpu_port37\", 9, false],\n [\"userMetadata._egress_inner_ipv4_checksum_err38\", 1, false],\n [\"userMetadata._egress_int_md_hop_latency40\", 32, false],\n [\"userMetadata._egress_int_md_timestamp41\", 48, false],\n [\"userMetadata._egress_int_md_vlan_stripped42\", 1, false],\n [\"userMetadata._egress_int_md_queue_report43\", 1, false],\n [\"userMetadata._egress_int_ipv4_len44\", 16, false],\n [\"userMetadata._egress_is_int_recirc45\", 1, false],\n [\"userMetadata._egress_pkt_length46\", 16, false],\n [\"userMetadata._recirc_preserved_report_type47\", 3, false],\n [\"userMetadata._recirc_preserved_egress_port48\", 9, false],\n [\"userMetadata._recirc_preserved_drop_reason49\", 8, false],\n [\"userMetadata._recirc_preserved_ingress_port50\", 9, false],\n [\"_padding_1\", 3, false]\n ]\n },\n {\n \"name\" : \"fake_ethernet_t\",\n \"id\" : 1,\n \"fields\" : [\n [\"_pad0\", 48, false],\n [\"_pad1\", 48, false],\n [\"ether_type\", 16, false]\n ]\n },\n {\n \"name\" : \"packet_out_header_t\",\n \"id\" : 2,\n \"fields\" : [\n [\"pad0\", 7, false],\n [\"egress_port\", 9, false],\n [\"pad1\", 3, false],\n [\"queue_id\", 5, false],\n [\"pad2\", 5, false],\n [\"cpu_loopback_mode\", 2, false],\n [\"do_forwarding\", 1, false],\n [\"pad3\", 16, false],\n [\"pad4\", 48, false],\n [\"ether_type\", 16, false]\n ]\n },\n {\n \"name\" : \"gtpu_t\",\n \"id\" : 3,\n \"fields\" : [\n [\"version\", 3, false],\n [\"pt\", 1, false],\n [\"spare\", 1, false],\n [\"ex_flag\", 1, false],\n [\"seq_flag\", 1, false],\n [\"npdu_flag\", 1, false],\n [\"msgtype\", 8, false],\n [\"msglen\", 16, false],\n [\"teid\", 32, false]\n ]\n },\n {\n \"name\" : \"ethernet_t\",\n \"id\" : 4,\n \"fields\" : [\n [\"dst_addr\", 48, false],\n [\"src_addr\", 48, false]\n ]\n },\n {\n \"name\" : \"eth_type_t\",\n \"id\" : 5,\n \"fields\" : [\n [\"value\", 16, false]\n ]\n },\n {\n \"name\" : \"ipv4_t\",\n \"id\" : 6,\n \"fields\" : [\n [\"version\", 4, false],\n [\"ihl\", 4, false],\n [\"dscp\", 6, false],\n [\"ecn\", 2, false],\n [\"total_len\", 16, false],\n [\"identification\", 16, false],\n [\"flags\", 3, false],\n [\"frag_offset\", 13, false],\n [\"ttl\", 8, false],\n [\"protocol\", 8, false],\n [\"hdr_checksum\", 16, false],\n [\"src_addr\", 32, false],\n [\"dst_addr\", 32, false]\n ]\n },\n {\n \"name\" : \"udp_t\",\n \"id\" : 7,\n \"fields\" : [\n [\"sport\", 16, false],\n [\"dport\", 16, false],\n [\"len\", 16, false],\n [\"checksum\", 16, false]\n ]\n },\n {\n \"name\" : \"report_fixed_header_t\",\n \"id\" : 8,\n \"fields\" : [\n [\"ver\", 4, false],\n [\"nproto\", 4, false],\n [\"dqf\", 3, false],\n [\"rsvd\", 15, false],\n [\"hw_id\", 6, false],\n [\"seq_no\", 32, false],\n [\"ig_tstamp\", 32, false]\n ]\n },\n {\n \"name\" : \"common_report_header_t\",\n \"id\" : 9,\n \"fields\" : [\n [\"switch_id\", 32, false],\n [\"pad1\", 7, false],\n [\"ig_port\", 9, false],\n [\"pad2\", 7, false],\n [\"eg_port\", 9, false],\n [\"pad3\", 3, false],\n [\"queue_id\", 5, false]\n ]\n },\n {\n \"name\" : \"local_report_header_t\",\n \"id\" : 10,\n \"fields\" : [\n [\"pad1\", 5, false],\n [\"queue_occupancy\", 19, false],\n [\"eg_tstamp\", 32, false]\n ]\n },\n {\n \"name\" : \"drop_report_header_t\",\n \"id\" : 11,\n \"fields\" : [\n [\"drop_reason\", 8, false],\n [\"pad\", 16, false]\n ]\n },\n {\n \"name\" : \"mpls_t\",\n \"id\" : 12,\n \"fields\" : [\n [\"label\", 20, false],\n [\"tc\", 3, false],\n [\"bos\", 1, false],\n [\"ttl\", 8, false]\n ]\n },\n {\n \"name\" : \"bridged_metadata_t\",\n \"id\" : 13,\n \"fields\" : [\n [\"_bmd_type0\", 8, false],\n [\"_base_inner_hash1\", 32, false],\n [\"_base_mpls_label2\", 20, false],\n [\"_base_ig_port3\", 9, false],\n [\"_base_is_multicast4\", 1, 0],\n [\"_base_fwd_type5\", 3, false],\n [\"_base_vlan_id6\", 12, false],\n [\"_base_encap_presence7\", 2, false],\n [\"_base_mpls_ttl8\", 8, false],\n [\"_base_ig_tstamp9\", 48, false],\n [\"_base_ip_eth_type10\", 16, false],\n [\"_base_stats_flow_id11\", 10, false],\n [\"_base_slice_tc12\", 6, false],\n [\"_upf_tun_peer_id13\", 8, false],\n [\"_upf_upf_ctr_id14\", 12, false],\n [\"_upf_qfi15\", 6, false],\n [\"_upf_needs_gtpu_encap16\", 1, 0],\n [\"_upf_skip_upf17\", 1, 0],\n [\"_upf_skip_egress_upf_ctr18\", 1, 0],\n [\"_upf_teid19\", 32, false],\n [\"_upf__pad20\", 4, false],\n [\"_int_bmd_report_type21\", 3, false],\n [\"_int_bmd_mirror_session_id22\", 10, false],\n [\"_int_bmd_drop_reason23\", 8, false],\n [\"_int_bmd_queue_id24\", 5, false],\n [\"_int_bmd_egress_port25\", 9, false],\n [\"_int_bmd_wip_type26\", 8, false],\n [\"__pad027\", 1, false],\n [\"__pad128\", 7, false],\n [\"__pad229\", 5, false]\n ]\n },\n {\n \"name\" : \"int_report_metadata_t\",\n \"id\" : 14,\n \"fields\" : [\n [\"bmd_type\", 8, false],\n [\"_pad0\", 5, false],\n [\"mirror_type\", 3, false],\n [\"_pad1\", 7, false],\n [\"ig_port\", 9, false],\n [\"_pad2\", 7, false],\n [\"eg_port\", 9, false],\n [\"_pad3\", 3, false],\n [\"queue_id\", 5, false],\n [\"_pad4\", 5, false],\n [\"queue_occupancy\", 19, false],\n [\"ig_tstamp\", 32, false],\n [\"eg_tstamp\", 32, false],\n [\"drop_reason\", 8, false],\n [\"ip_eth_type\", 16, false],\n [\"_pad5\", 6, false],\n [\"encap_presence\", 2, false],\n [\"report_type\", 3, false],\n [\"_pad6\", 5, false],\n [\"flow_hash\", 32, false]\n ]\n },\n {\n \"name\" : \"int_metadata_t\",\n \"id\" : 15,\n \"fields\" : [\n [\"hop_latency\", 32, false],\n [\"timestamp\", 48, false],\n [\"vlan_stripped\", 1, 0],\n [\"queue_report\", 1, 0],\n [\"_padding\", 6, false]\n ]\n },\n {\n \"name\" : \"standard_metadata\",\n \"id\" : 16,\n \"fields\" : [\n [\"ingress_port\", 9, false],\n [\"egress_spec\", 9, false],\n [\"egress_port\", 9, false],\n [\"instance_type\", 32, false],\n [\"packet_length\", 32, false],\n [\"enq_timestamp\", 32, false],\n [\"enq_qdepth\", 19, false],\n [\"deq_timedelta\", 32, false],\n [\"deq_qdepth\", 19, false],\n [\"ingress_global_timestamp\", 48, false],\n [\"egress_global_timestamp\", 48, false],\n [\"mcast_grp\", 16, false],\n [\"egress_rid\", 16, false],\n [\"checksum_error\", 1, false],\n [\"parser_error\", 32, false],\n [\"priority\", 3, false],\n [\"_padding_0\", 3, false]\n ]\n },\n {\n \"name\" : \"packet_in_header_t\",\n \"id\" : 17,\n \"fields\" : [\n [\"ingress_port\", 9, false],\n [\"_pad0\", 7, false]\n ]\n },\n {\n \"name\" : \"vlan_tag_t\",\n \"id\" : 18,\n \"fields\" : [\n [\"eth_type\", 16, false],\n [\"pri\", 3, false],\n [\"cfi\", 1, false],\n [\"vlan_id\", 12, false]\n ]\n },\n {\n \"name\" : \"ipv6_t\",\n \"id\" : 19,\n \"fields\" : [\n [\"version\", 4, false],\n [\"traffic_class\", 8, false],\n [\"flow_label\", 20, false],\n [\"payload_len\", 16, false],\n [\"next_hdr\", 8, false],\n [\"hop_limit\", 8, false],\n [\"src_addr\", 128, false],\n [\"dst_addr\", 128, false]\n ]\n },\n {\n \"name\" : \"tcp_t\",\n \"id\" : 20,\n \"fields\" : [\n [\"sport\", 16, false],\n [\"dport\", 16, false]\n ]\n },\n {\n \"name\" : \"icmp_t\",\n \"id\" : 21,\n \"fields\" : [\n [\"icmp_type\", 8, false],\n [\"icmp_code\", 8, false]\n ]\n },\n {\n \"name\" : \"gtpu_options_t\",\n \"id\" : 22,\n \"fields\" : [\n [\"seq_num\", 16, false],\n [\"n_pdu_num\", 8, false],\n [\"next_ext\", 8, false]\n ]\n },\n {\n \"name\" : \"gtpu_ext_psc_t\",\n \"id\" : 23,\n \"fields\" : [\n [\"len\", 8, false],\n [\"type\", 4, false],\n [\"spare0\", 4, false],\n [\"ppp\", 1, false],\n [\"rqi\", 1, false],\n [\"qfi\", 6, false],\n [\"next_ext\", 8, false]\n ]\n },\n {\n \"name\" : \"vxlan_t\",\n \"id\" : 24,\n \"fields\" : [\n [\"flags\", 8, false],\n [\"reserved\", 24, false],\n [\"vni\", 24, false],\n [\"reserved_2\", 8, false]\n ]\n }\n ],\n \"headers\" : [\n {\n \"name\" : \"tmp\",\n \"id\" : 0,\n \"header_type\" : \"fake_ethernet_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"tmp_0\",\n \"id\" : 1,\n \"header_type\" : \"packet_out_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"tmp_1\",\n \"id\" : 2,\n \"header_type\" : \"fake_ethernet_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"gtpu_0\",\n \"id\" : 3,\n \"header_type\" : \"gtpu_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"parser_emulator_hdr_report_ethernet\",\n \"id\" : 4,\n \"header_type\" : \"ethernet_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"parser_emulator_hdr_report_eth_type\",\n \"id\" : 5,\n \"header_type\" : \"eth_type_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"parser_emulator_hdr_report_ipv4\",\n \"id\" : 6,\n \"header_type\" : \"ipv4_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"parser_emulator_hdr_report_udp\",\n \"id\" : 7,\n \"header_type\" : \"udp_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"parser_emulator_hdr_report_fixed_header\",\n \"id\" : 8,\n \"header_type\" : \"report_fixed_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"parser_emulator_hdr_common_report_header\",\n \"id\" : 9,\n \"header_type\" : \"common_report_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"parser_emulator_hdr_local_report_header\",\n \"id\" : 10,\n \"header_type\" : \"local_report_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"parser_emulator_hdr_drop_report_header\",\n \"id\" : 11,\n \"header_type\" : \"drop_report_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"int_egress_hdr_report_eth_type\",\n \"id\" : 12,\n \"header_type\" : \"eth_type_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"int_egress_hdr_report_mpls\",\n \"id\" : 13,\n \"header_type\" : \"mpls_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"int_egress_hdr_report_ipv4\",\n \"id\" : 14,\n \"header_type\" : \"ipv4_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"int_egress_hdr_report_udp\",\n \"id\" : 15,\n \"header_type\" : \"udp_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"int_egress_hdr_report_fixed_header\",\n \"id\" : 16,\n \"header_type\" : \"report_fixed_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"int_egress_hdr_common_report_header\",\n \"id\" : 17,\n \"header_type\" : \"common_report_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"int_egress_hdr_local_report_header\",\n \"id\" : 18,\n \"header_type\" : \"local_report_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"int_egress_hdr_drop_report_header\",\n \"id\" : 19,\n \"header_type\" : \"drop_report_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"int_egress_hdr_eth_type\",\n \"id\" : 20,\n \"header_type\" : \"eth_type_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"int_egress_fabric_md_bridged\",\n \"id\" : 21,\n \"header_type\" : \"bridged_metadata_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"int_egress_fabric_md_int_report_md\",\n \"id\" : 22,\n \"header_type\" : \"int_report_metadata_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"int_egress_fabric_md_int_md\",\n \"id\" : 23,\n \"header_type\" : \"int_metadata_t\",\n \"metadata\" : true,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"scalars\",\n \"id\" : 24,\n \"header_type\" : \"scalars_0\",\n \"metadata\" : true,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"standard_metadata\",\n \"id\" : 25,\n \"header_type\" : \"standard_metadata\",\n \"metadata\" : true,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_packet_out0\",\n \"id\" : 26,\n \"header_type\" : \"packet_out_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_packet_in1\",\n \"id\" : 27,\n \"header_type\" : \"packet_in_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_fake_ethernet2\",\n \"id\" : 28,\n \"header_type\" : \"fake_ethernet_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_ethernet3\",\n \"id\" : 29,\n \"header_type\" : \"ethernet_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_vlan_tag4\",\n \"id\" : 30,\n \"header_type\" : \"vlan_tag_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_eth_type5\",\n \"id\" : 31,\n \"header_type\" : \"eth_type_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_mpls6\",\n \"id\" : 32,\n \"header_type\" : \"mpls_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_ipv47\",\n \"id\" : 33,\n \"header_type\" : \"ipv4_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_ipv68\",\n \"id\" : 34,\n \"header_type\" : \"ipv6_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_tcp9\",\n \"id\" : 35,\n \"header_type\" : \"tcp_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_udp10\",\n \"id\" : 36,\n \"header_type\" : \"udp_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_icmp11\",\n \"id\" : 37,\n \"header_type\" : \"icmp_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_gtpu12\",\n \"id\" : 38,\n \"header_type\" : \"gtpu_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_gtpu_options13\",\n \"id\" : 39,\n \"header_type\" : \"gtpu_options_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_gtpu_ext_psc14\",\n \"id\" : 40,\n \"header_type\" : \"gtpu_ext_psc_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_vxlan15\",\n \"id\" : 41,\n \"header_type\" : \"vxlan_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_inner_ethernet16\",\n \"id\" : 42,\n \"header_type\" : \"ethernet_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_inner_eth_type17\",\n \"id\" : 43,\n \"header_type\" : \"eth_type_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_inner_ipv418\",\n \"id\" : 44,\n \"header_type\" : \"ipv4_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_inner_tcp19\",\n \"id\" : 45,\n \"header_type\" : \"tcp_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_inner_udp20\",\n \"id\" : 46,\n \"header_type\" : \"udp_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_inner_icmp21\",\n \"id\" : 47,\n \"header_type\" : \"icmp_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_packet_in22\",\n \"id\" : 48,\n \"header_type\" : \"packet_in_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_fake_ethernet23\",\n \"id\" : 49,\n \"header_type\" : \"fake_ethernet_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_report_ethernet24\",\n \"id\" : 50,\n \"header_type\" : \"ethernet_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_report_eth_type25\",\n \"id\" : 51,\n \"header_type\" : \"eth_type_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_report_mpls26\",\n \"id\" : 52,\n \"header_type\" : \"mpls_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_report_ipv427\",\n \"id\" : 53,\n \"header_type\" : \"ipv4_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_report_udp28\",\n \"id\" : 54,\n \"header_type\" : \"udp_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_report_fixed_header29\",\n \"id\" : 55,\n \"header_type\" : \"report_fixed_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_common_report_header30\",\n \"id\" : 56,\n \"header_type\" : \"common_report_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_local_report_header31\",\n \"id\" : 57,\n \"header_type\" : \"local_report_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_drop_report_header32\",\n \"id\" : 58,\n \"header_type\" : \"drop_report_header_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_ethernet33\",\n \"id\" : 59,\n \"header_type\" : \"ethernet_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_vlan_tag34\",\n \"id\" : 60,\n \"header_type\" : \"vlan_tag_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_eth_type35\",\n \"id\" : 61,\n \"header_type\" : \"eth_type_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_mpls36\",\n \"id\" : 62,\n \"header_type\" : \"mpls_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_outer_ipv437\",\n \"id\" : 63,\n \"header_type\" : \"ipv4_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_outer_udp38\",\n \"id\" : 64,\n \"header_type\" : \"udp_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_outer_gtpu39\",\n \"id\" : 65,\n \"header_type\" : \"gtpu_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_outer_gtpu_options40\",\n \"id\" : 66,\n \"header_type\" : \"gtpu_options_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_outer_gtpu_ext_psc41\",\n \"id\" : 67,\n \"header_type\" : \"gtpu_ext_psc_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_ipv442\",\n \"id\" : 68,\n \"header_type\" : \"ipv4_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_ipv643\",\n \"id\" : 69,\n \"header_type\" : \"ipv6_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_udp44\",\n \"id\" : 70,\n \"header_type\" : \"udp_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_ingress_bridged4\",\n \"id\" : 71,\n \"header_type\" : \"bridged_metadata_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_bridged36\",\n \"id\" : 72,\n \"header_type\" : \"bridged_metadata_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n },\n {\n \"name\" : \"_egress_int_report_md39\",\n \"id\" : 73,\n \"header_type\" : \"int_report_metadata_t\",\n \"metadata\" : false,\n \"pi_omit\" : true\n }\n ],\n \"header_stacks\" : [],\n \"header_union_types\" : [],\n \"header_unions\" : [],\n \"header_union_stacks\" : [],\n \"field_lists\" : [\n {\n \"id\" : 1,\n \"name\" : \"field_list241\",\n \"elements\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_report_type47\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_egress_port48\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_drop_reason49\"]\n }\n ]\n },\n {\n \"id\" : 2,\n \"name\" : \"field_list231\",\n \"elements\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_ingress_port50\"]\n }\n ]\n },\n {\n \"id\" : 3,\n \"name\" : \"empty\",\n \"elements\" : []\n },\n {\n \"id\" : 4,\n \"name\" : \"empty_0\",\n \"elements\" : []\n },\n {\n \"id\" : 5,\n \"name\" : \"empty_1\",\n \"elements\" : []\n }\n ],\n \"errors\" : [\n [\"NoError\", 1],\n [\"PacketTooShort\", 2],\n [\"NoMatch\", 3],\n [\"StackOutOfBounds\", 4],\n [\"HeaderTooShort\", 5],\n [\"ParserTimeout\", 6],\n [\"ParserInvalidArgument\", 7],\n [\"PacketRejectedByParser\", 8]\n ],\n \"enums\" : [],\n \"parsers\" : [\n {\n \"name\" : \"parser\",\n \"id\" : 0,\n \"init_state\" : \"start\",\n \"parse_states\" : [\n {\n \"name\" : \"start\",\n \"id\" : 0,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_pkt_length46\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"packet_length\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000ffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_bridged4\"\n }\n ],\n \"op\" : \"add_header\"\n }\n ],\n \"op\" : \"primitive\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_bmd_type0\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_ig_port3\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"ingress_port\"]\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_ingress_port50\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"ingress_port\"]\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_ig_tstamp9\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"ingress_global_timestamp\"]\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_egress_port_set22\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_punt_to_cpu23\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_ip_eth_type10\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_wip_type26\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_encap_presence7\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_upf_meter_color32\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_8\"]\n },\n {\n \"type\" : \"lookahead\",\n \"value\" : [0, 112]\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"tmp\"\n }\n ],\n \"op\" : \"add_header\"\n }\n ],\n \"op\" : \"primitive\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp\", \"_pad0\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_8\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x40\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp\", \"_pad1\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_8\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x10\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp\", \"ether_type\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_8\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_2\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_8\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xbf02\",\n \"mask\" : null,\n \"next_state\" : \"parse_fake_ethernet\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xbf03\",\n \"mask\" : null,\n \"next_state\" : \"parse_fake_ethernet_and_accept\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xbf01\",\n \"mask\" : null,\n \"next_state\" : \"check_packet_out\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xbf04\",\n \"mask\" : null,\n \"next_state\" : \"parse_int_wip_ipv4\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xbf05\",\n \"mask\" : null,\n \"next_state\" : \"parse_int_wip_mpls\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : \"parse_ethernet\"\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_2\"]\n }\n ]\n },\n {\n \"name\" : \"check_packet_out\",\n \"id\" : 1,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_9\"]\n },\n {\n \"type\" : \"lookahead\",\n \"value\" : [0, 112]\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"tmp_0\"\n }\n ],\n \"op\" : \"add_header\"\n }\n ],\n \"op\" : \"primitive\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp_0\", \"pad0\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x69\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x7f\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp_0\", \"egress_port\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x60\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01ff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp_0\", \"pad1\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x5d\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x07\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp_0\", \"queue_id\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x58\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x1f\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp_0\", \"pad2\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x53\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x1f\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp_0\", \"cpu_loopback_mode\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x51\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x03\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp_0\", \"do_forwarding\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x50\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp_0\", \"pad3\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x40\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp_0\", \"pad4\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x10\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp_0\", \"ether_type\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_4\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x50\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\",\n \"mask\" : null,\n \"next_state\" : \"parse_packet_out_and_accept\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : \"strip_packet_out\"\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_4\"]\n }\n ]\n },\n {\n \"name\" : \"parse_int_wip_ipv4\",\n \"id\" : 2,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_ethernet3\"\n }\n ],\n \"op\" : \"add_header\"\n }\n ],\n \"op\" : \"primitive\"\n },\n {\n \"parameters\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_eth_type5\"\n }\n ],\n \"op\" : \"add_header\"\n }\n ],\n \"op\" : \"primitive\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_eth_type5\", \"value\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0800\"\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_wip_type26\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_mpls_label2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x000000\"\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_mpls_ttl8\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x41\"\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000070\"\n }\n ],\n \"op\" : \"advance\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : \"parse_ipv4\"\n }\n ],\n \"transition_key\" : []\n },\n {\n \"name\" : \"parse_int_wip_mpls\",\n \"id\" : 3,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_ethernet3\"\n }\n ],\n \"op\" : \"add_header\"\n }\n ],\n \"op\" : \"primitive\"\n },\n {\n \"parameters\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_eth_type5\"\n }\n ],\n \"op\" : \"add_header\"\n }\n ],\n \"op\" : \"primitive\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_eth_type5\", \"value\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x8847\"\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_wip_type26\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000070\"\n }\n ],\n \"op\" : \"advance\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : \"parse_mpls\"\n }\n ],\n \"transition_key\" : []\n },\n {\n \"name\" : \"parse_packet_out_and_accept\",\n \"id\" : 4,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_packet_out0\"\n }\n ],\n \"op\" : \"extract\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : []\n },\n {\n \"name\" : \"strip_packet_out\",\n \"id\" : 5,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000070\"\n }\n ],\n \"op\" : \"advance\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : \"parse_ethernet\"\n }\n ],\n \"transition_key\" : []\n },\n {\n \"name\" : \"parse_fake_ethernet\",\n \"id\" : 6,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_fake_ethernet2\"\n }\n ],\n \"op\" : \"extract\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_10\"]\n },\n {\n \"type\" : \"lookahead\",\n \"value\" : [0, 112]\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"tmp_1\"\n }\n ],\n \"op\" : \"add_header\"\n }\n ],\n \"op\" : \"primitive\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp_1\", \"_pad0\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_10\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x40\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp_1\", \"_pad1\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_10\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x10\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"tmp_1\", \"ether_type\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_10\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_6\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_10\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xbf04\",\n \"mask\" : null,\n \"next_state\" : \"parse_int_wip_ipv4\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xbf05\",\n \"mask\" : null,\n \"next_state\" : \"parse_int_wip_mpls\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : \"parse_ethernet\"\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_6\"]\n }\n ]\n },\n {\n \"name\" : \"parse_fake_ethernet_and_accept\",\n \"id\" : 7,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_fake_ethernet2\"\n }\n ],\n \"op\" : \"extract\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : []\n },\n {\n \"name\" : \"parse_ethernet\",\n \"id\" : 8,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_ethernet3\"\n }\n ],\n \"op\" : \"extract\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_3\"]\n },\n {\n \"type\" : \"lookahead\",\n \"value\" : [0, 16]\n }\n ],\n \"op\" : \"set\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x88a8\",\n \"mask\" : null,\n \"next_state\" : \"parse_vlan_tag\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x8100\",\n \"mask\" : \"0xefff\",\n \"next_state\" : \"parse_vlan_tag\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : \"parse_untagged\"\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_3\"]\n }\n ]\n },\n {\n \"name\" : \"parse_vlan_tag\",\n \"id\" : 9,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_vlan_tag4\"\n }\n ],\n \"op\" : \"extract\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_vlan_id6\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_vlan_tag4\", \"vlan_id\"]\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_5\"]\n },\n {\n \"type\" : \"lookahead\",\n \"value\" : [0, 16]\n }\n ],\n \"op\" : \"set\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : \"parse_eth_type\"\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_5\"]\n }\n ]\n },\n {\n \"name\" : \"parse_untagged\",\n \"id\" : 10,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_vlan_id6\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0ffe\"\n }\n ],\n \"op\" : \"set\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : \"parse_eth_type\"\n }\n ],\n \"transition_key\" : []\n },\n {\n \"name\" : \"parse_eth_type\",\n \"id\" : 11,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_eth_type5\"\n }\n ],\n \"op\" : \"extract\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x8847\",\n \"mask\" : null,\n \"next_state\" : \"parse_mpls\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0800\",\n \"mask\" : null,\n \"next_state\" : \"parse_non_mpls\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x86dd\",\n \"mask\" : null,\n \"next_state\" : \"parse_non_mpls\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_eth_type5\", \"value\"]\n }\n ]\n },\n {\n \"name\" : \"parse_mpls\",\n \"id\" : 12,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_mpls6\"\n }\n ],\n \"op\" : \"extract\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_mpls_label2\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_mpls6\", \"label\"]\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_mpls_ttl8\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_mpls6\", \"ttl\"]\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_7\"]\n },\n {\n \"type\" : \"lookahead\",\n \"value\" : [0, 4]\n }\n ],\n \"op\" : \"set\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\",\n \"mask\" : null,\n \"next_state\" : \"parse_ipv4\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x06\",\n \"mask\" : null,\n \"next_state\" : \"parse_ipv6\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : \"reject_packet\"\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_7\"]\n }\n ]\n },\n {\n \"name\" : \"reject_packet\",\n \"id\" : 13,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"bool\",\n \"value\" : false\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x8\"\n }\n ],\n \"op\" : \"verify\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : []\n },\n {\n \"name\" : \"parse_non_mpls\",\n \"id\" : 14,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_mpls_label2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x000000\"\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_mpls_ttl8\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x41\"\n }\n ],\n \"op\" : \"set\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0800\",\n \"mask\" : null,\n \"next_state\" : \"parse_ipv4\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x86dd\",\n \"mask\" : null,\n \"next_state\" : \"parse_ipv6\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_eth_type5\", \"value\"]\n }\n ]\n },\n {\n \"name\" : \"parse_ipv4\",\n \"id\" : 15,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_ipv47\"\n }\n ],\n \"op\" : \"extract\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_routing_ipv4_dst18\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"dst_addr\"]\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_ip_eth_type10\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0800\"\n }\n ],\n \"op\" : \"set\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x06\",\n \"mask\" : null,\n \"next_state\" : \"parse_tcp\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x11\",\n \"mask\" : null,\n \"next_state\" : \"parse_udp\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\",\n \"mask\" : null,\n \"next_state\" : \"parse_icmp\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"protocol\"]\n }\n ]\n },\n {\n \"name\" : \"parse_ipv6\",\n \"id\" : 16,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_ipv68\"\n }\n ],\n \"op\" : \"extract\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_ip_eth_type10\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x86dd\"\n }\n ],\n \"op\" : \"set\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x06\",\n \"mask\" : null,\n \"next_state\" : \"parse_tcp\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x11\",\n \"mask\" : null,\n \"next_state\" : \"parse_udp\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3a\",\n \"mask\" : null,\n \"next_state\" : \"parse_icmp\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv68\", \"next_hdr\"]\n }\n ]\n },\n {\n \"name\" : \"parse_icmp\",\n \"id\" : 17,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_icmp11\"\n }\n ],\n \"op\" : \"extract\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : []\n },\n {\n \"name\" : \"parse_tcp\",\n \"id\" : 18,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_tcp9\"\n }\n ],\n \"op\" : \"extract\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : []\n },\n {\n \"name\" : \"parse_udp\",\n \"id\" : 19,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_udp10\"\n }\n ],\n \"op\" : \"extract\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_11\"]\n },\n {\n \"type\" : \"lookahead\",\n \"value\" : [0, 64]\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"gtpu_0\"\n }\n ],\n \"op\" : \"add_header\"\n }\n ],\n \"op\" : \"primitive\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"gtpu_0\", \"version\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_11\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3d\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x07\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"gtpu_0\", \"pt\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_11\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3c\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"gtpu_0\", \"spare\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_11\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3b\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"gtpu_0\", \"ex_flag\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_11\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3a\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"gtpu_0\", \"seq_flag\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_11\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x39\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"gtpu_0\", \"npdu_flag\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_11\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x38\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"gtpu_0\", \"msgtype\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_11\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x30\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"gtpu_0\", \"msglen\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_11\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x20\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"gtpu_0\", \"teid\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_11\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_12\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_11\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3d\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x07\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_13\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_11\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x30\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffffffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n }\n }\n ],\n \"op\" : \"set\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x086801ff\",\n \"mask\" : null,\n \"next_state\" : \"parse_gtpu\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x12b50000\",\n \"mask\" : \"0xffff0000\",\n \"next_state\" : \"parse_vxlan\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_udp10\", \"dport\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_12\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_13\"]\n }\n ]\n },\n {\n \"name\" : \"parse_gtpu\",\n \"id\" : 20,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_gtpu12\"\n }\n ],\n \"op\" : \"extract\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x000000\",\n \"mask\" : null,\n \"next_state\" : \"set_gtpu_only\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : \"parse_gtpu_options\"\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"ex_flag\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"seq_flag\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"npdu_flag\"]\n }\n ]\n },\n {\n \"name\" : \"set_gtpu_only\",\n \"id\" : 21,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_encap_presence7\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"op\" : \"set\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : \"parse_inner_ipv4\"\n }\n ],\n \"transition_key\" : []\n },\n {\n \"name\" : \"parse_gtpu_options\",\n \"id\" : 22,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_gtpu_options13\"\n }\n ],\n \"op\" : \"extract\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"gtpu_ext_len_0\"]\n },\n {\n \"type\" : \"lookahead\",\n \"value\" : [0, 8]\n }\n ],\n \"op\" : \"set\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x8501\",\n \"mask\" : null,\n \"next_state\" : \"parse_gtpu_ext_psc\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_options13\", \"next_ext\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"gtpu_ext_len_0\"]\n }\n ]\n },\n {\n \"name\" : \"parse_gtpu_ext_psc\",\n \"id\" : 23,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_gtpu_ext_psc14\"\n }\n ],\n \"op\" : \"extract\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_encap_presence7\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n ],\n \"op\" : \"set\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\",\n \"mask\" : null,\n \"next_state\" : \"parse_inner_ipv4\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_ext_psc14\", \"next_ext\"]\n }\n ]\n },\n {\n \"name\" : \"parse_vxlan\",\n \"id\" : 24,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_vxlan15\"\n }\n ],\n \"op\" : \"extract\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_encap_presence7\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x03\"\n }\n ],\n \"op\" : \"set\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_inner_ethernet16\"\n }\n ],\n \"op\" : \"extract\"\n },\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_inner_eth_type17\"\n }\n ],\n \"op\" : \"extract\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0800\",\n \"mask\" : null,\n \"next_state\" : \"parse_inner_ipv4\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_eth_type17\", \"value\"]\n }\n ]\n },\n {\n \"name\" : \"parse_inner_ipv4\",\n \"id\" : 25,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_inner_ipv418\"\n }\n ],\n \"op\" : \"extract\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x06\",\n \"mask\" : null,\n \"next_state\" : \"parse_inner_tcp\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x11\",\n \"mask\" : null,\n \"next_state\" : \"parse_inner_udp\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\",\n \"mask\" : null,\n \"next_state\" : \"parse_inner_icmp\"\n },\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"protocol\"]\n }\n ]\n },\n {\n \"name\" : \"parse_inner_tcp\",\n \"id\" : 26,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_inner_tcp19\"\n }\n ],\n \"op\" : \"extract\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : []\n },\n {\n \"name\" : \"parse_inner_udp\",\n \"id\" : 27,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_inner_udp20\"\n }\n ],\n \"op\" : \"extract\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : []\n },\n {\n \"name\" : \"parse_inner_icmp\",\n \"id\" : 28,\n \"parser_ops\" : [\n {\n \"parameters\" : [\n {\n \"type\" : \"regular\",\n \"value\" : \"_ingress_inner_icmp21\"\n }\n ],\n \"op\" : \"extract\"\n }\n ],\n \"transitions\" : [\n {\n \"type\" : \"default\",\n \"value\" : null,\n \"mask\" : null,\n \"next_state\" : null\n }\n ],\n \"transition_key\" : []\n }\n ]\n }\n ],\n \"parse_vsets\" : [],\n \"deparsers\" : [\n {\n \"name\" : \"deparser\",\n \"id\" : 0,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/parser.p4\",\n \"line\" : 321,\n \"column\" : 8,\n \"source_fragment\" : \"FabricDeparser\"\n },\n \"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\"],\n \"primitives\" : []\n }\n ],\n \"meter_arrays\" : [\n {\n \"name\" : \"FabricIngress.qos.slice_tc_meter\",\n \"id\" : 0,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 104,\n \"column\" : 41,\n \"source_fragment\" : \"slice_tc_meter\"\n },\n \"is_direct\" : false,\n \"size\" : 64,\n \"rate_count\" : 2,\n \"type\" : \"bytes\"\n },\n {\n \"name\" : \"FabricIngress.upf.session_meter\",\n \"id\" : 1,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 22,\n \"column\" : 34,\n \"source_fragment\" : \"session_meter\"\n },\n \"is_direct\" : false,\n \"size\" : 20000,\n \"rate_count\" : 2,\n \"type\" : \"bytes\"\n },\n {\n \"name\" : \"FabricIngress.upf.app_meter\",\n \"id\" : 2,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 23,\n \"column\" : 34,\n \"source_fragment\" : \"app_meter\"\n },\n \"is_direct\" : false,\n \"size\" : 20000,\n \"rate_count\" : 2,\n \"type\" : \"bytes\"\n }\n ],\n \"counter_arrays\" : [\n {\n \"name\" : \"FabricIngress.stats.flow_counter\",\n \"id\" : 0,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.stats.flows\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/stats.p4\",\n \"line\" : 14,\n \"column\" : 50,\n \"source_fragment\" : \"flow_counter\"\n }\n },\n {\n \"name\" : \"FabricIngress.filtering.ingress_port_vlan_counter\",\n \"id\" : 1,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.filtering.ingress_port_vlan\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4\",\n \"line\" : 17,\n \"column\" : 50,\n \"source_fragment\" : \"ingress_port_vlan_counter\"\n }\n },\n {\n \"name\" : \"FabricIngress.filtering.fwd_classifier_counter\",\n \"id\" : 2,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.filtering.fwd_classifier\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4\",\n \"line\" : 71,\n \"column\" : 50,\n \"source_fragment\" : \"fwd_classifier_counter\"\n }\n },\n {\n \"name\" : \"FabricIngress.filtering.fwd_type_counter\",\n \"id\" : 3,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4\",\n \"line\" : 78,\n \"column\" : 46,\n \"source_fragment\" : \"fwd_type_counter\"\n },\n \"size\" : 8,\n \"is_direct\" : false\n },\n {\n \"name\" : \"FabricIngress.forwarding.bridging_counter\",\n \"id\" : 4,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.forwarding.bridging\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 29,\n \"column\" : 50,\n \"source_fragment\" : \"bridging_counter\"\n }\n },\n {\n \"name\" : \"FabricIngress.forwarding.mpls_counter\",\n \"id\" : 5,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.forwarding.mpls\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 64,\n \"column\" : 50,\n \"source_fragment\" : \"mpls_counter\"\n }\n },\n {\n \"name\" : \"FabricIngress.forwarding.routing_v4_counter\",\n \"id\" : 6,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.forwarding.routing_v4\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 98,\n \"column\" : 50,\n \"source_fragment\" : \"routing_v4_counter\"\n }\n },\n {\n \"name\" : \"FabricIngress.forwarding.routing_v6_counter\",\n \"id\" : 7,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.forwarding.routing_v6\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 142,\n \"column\" : 50,\n \"source_fragment\" : \"routing_v6_counter\"\n }\n },\n {\n \"name\" : \"FabricIngress.pre_next.next_mpls_counter\",\n \"id\" : 8,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.pre_next.next_mpls\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/pre_next.p4\",\n \"line\" : 15,\n \"column\" : 50,\n \"source_fragment\" : \"next_mpls_counter\"\n }\n },\n {\n \"name\" : \"FabricIngress.pre_next.next_vlan_counter\",\n \"id\" : 9,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.pre_next.next_vlan\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/pre_next.p4\",\n \"line\" : 39,\n \"column\" : 50,\n \"source_fragment\" : \"next_vlan_counter\"\n }\n },\n {\n \"name\" : \"FabricIngress.acl.acl_counter\",\n \"id\" : 10,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.acl.acl\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 19,\n \"column\" : 50,\n \"source_fragment\" : \"acl_counter\"\n }\n },\n {\n \"name\" : \"FabricIngress.next.hashed_counter\",\n \"id\" : 11,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.next.hashed\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 115,\n \"column\" : 50,\n \"source_fragment\" : \"hashed_counter\"\n }\n },\n {\n \"name\" : \"FabricIngress.next.multicast_counter\",\n \"id\" : 12,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.next.multicast\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 148,\n \"column\" : 50,\n \"source_fragment\" : \"multicast_counter\"\n }\n },\n {\n \"name\" : \"FabricIngress.slice_tc_classifier.classifier_stats\",\n \"id\" : 13,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.slice_tc_classifier.classifier\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 20,\n \"column\" : 40,\n \"source_fragment\" : \"classifier_stats\"\n }\n },\n {\n \"name\" : \"FabricIngress.qos.queues_stats\",\n \"id\" : 14,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.qos.queues\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 106,\n \"column\" : 40,\n \"source_fragment\" : \"queues_stats\"\n }\n },\n {\n \"name\" : \"FabricIngress.upf.terminations_counter\",\n \"id\" : 15,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 20,\n \"column\" : 49,\n \"source_fragment\" : \"terminations_counter\"\n },\n \"size\" : 4096,\n \"is_direct\" : false\n },\n {\n \"name\" : \"FabricIngress.upf.recirc_stats\",\n \"id\" : 16,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.upf.uplink_recirc_rules\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 356,\n \"column\" : 40,\n \"source_fragment\" : \"recirc_stats\"\n }\n },\n {\n \"name\" : \"FabricIngress.int_watchlist.watchlist_counter\",\n \"id\" : 17,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.int_watchlist.watchlist\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 15,\n \"column\" : 50,\n \"source_fragment\" : \"watchlist_counter\"\n }\n },\n {\n \"name\" : \"FabricIngress.int_ingress.drop_report_counter\",\n \"id\" : 18,\n \"is_direct\" : true,\n \"binding\" : \"FabricIngress.int_ingress.drop_report\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 64,\n \"column\" : 50,\n \"source_fragment\" : \"drop_report_counter\"\n }\n },\n {\n \"name\" : \"FabricEgress.stats.flow_counter\",\n \"id\" : 19,\n \"is_direct\" : true,\n \"binding\" : \"FabricEgress.stats.flows\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/stats.p4\",\n \"line\" : 47,\n \"column\" : 50,\n \"source_fragment\" : \"flow_counter\"\n }\n },\n {\n \"name\" : \"FabricEgress.egress_next.egress_vlan_counter\",\n \"id\" : 20,\n \"is_direct\" : true,\n \"binding\" : \"FabricEgress.egress_next.egress_vlan\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 241,\n \"column\" : 50,\n \"source_fragment\" : \"egress_vlan_counter\"\n }\n },\n {\n \"name\" : \"FabricEgress.upf.terminations_counter\",\n \"id\" : 21,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 477,\n \"column\" : 49,\n \"source_fragment\" : \"terminations_counter\"\n },\n \"size\" : 4096,\n \"is_direct\" : false\n },\n {\n \"name\" : \"FabricEgress.int_egress.report_counter\",\n \"id\" : 22,\n \"is_direct\" : true,\n \"binding\" : \"FabricEgress.int_egress.report\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 131,\n \"column\" : 50,\n \"source_fragment\" : \"report_counter\"\n }\n },\n {\n \"name\" : \"FabricEgress.int_egress.int_metadata_counter\",\n \"id\" : 23,\n \"is_direct\" : true,\n \"binding\" : \"FabricEgress.int_egress.int_metadata\",\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 132,\n \"column\" : 50,\n \"source_fragment\" : \"int_metadata_counter\"\n }\n }\n ],\n \"register_arrays\" : [\n {\n \"name\" : \"FabricEgress.int_egress.seq_number\",\n \"id\" : 0,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 138,\n \"column\" : 28,\n \"source_fragment\" : \"seq_number\"\n },\n \"size\" : 1024,\n \"bitwidth\" : 32\n }\n ],\n \"calculations\" : [\n {\n \"name\" : \"calc\",\n \"id\" : 0,\n \"algo\" : \"crc32\",\n \"input\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_18\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_19\"]\n }\n ]\n },\n {\n \"name\" : \"calc_0\",\n \"id\" : 1,\n \"algo\" : \"crc32\",\n \"input\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_20\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_21\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_22\"]\n }\n ]\n },\n {\n \"name\" : \"calc_1\",\n \"id\" : 2,\n \"algo\" : \"crc32\",\n \"input\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_23\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_24\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_25\"]\n }\n ]\n },\n {\n \"name\" : \"calc_2\",\n \"id\" : 3,\n \"algo\" : \"crc32\",\n \"input\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_26\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_27\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_28\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_29\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_30\"]\n }\n ]\n },\n {\n \"name\" : \"calc_3\",\n \"id\" : 4,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4\",\n \"line\" : 55,\n \"column\" : 8,\n \"source_fragment\" : \"update_checksum(hdr.ingress.ipv4.isValid(), ...\"\n },\n \"algo\" : \"csum16\",\n \"input\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"version\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ihl\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"dscp\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ecn\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"total_len\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"identification\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"flags\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"frag_offset\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ttl\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"protocol\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"src_addr\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"dst_addr\"]\n }\n ]\n },\n {\n \"name\" : \"calc_4\",\n \"id\" : 5,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4\",\n \"line\" : 73,\n \"column\" : 8,\n \"source_fragment\" : \"update_checksum(hdr.ingress.inner_ipv4.isValid(), ...\"\n },\n \"algo\" : \"csum16\",\n \"input\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"version\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"ihl\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"dscp\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"ecn\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"total_len\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"identification\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"flags\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"frag_offset\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"ttl\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"protocol\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"src_addr\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"dst_addr\"]\n }\n ]\n },\n {\n \"name\" : \"calc_5\",\n \"id\" : 6,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4\",\n \"line\" : 92,\n \"column\" : 8,\n \"source_fragment\" : \"update_checksum(hdr.egress.report_ipv4.isValid(), ...\"\n },\n \"algo\" : \"csum16\",\n \"input\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_report_ipv427\", \"version\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_report_ipv427\", \"ihl\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_report_ipv427\", \"dscp\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_report_ipv427\", \"ecn\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_report_ipv427\", \"total_len\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_report_ipv427\", \"identification\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_report_ipv427\", \"flags\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_report_ipv427\", \"frag_offset\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_report_ipv427\", \"ttl\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_report_ipv427\", \"protocol\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_report_ipv427\", \"src_addr\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_report_ipv427\", \"dst_addr\"]\n }\n ]\n },\n {\n \"name\" : \"calc_6\",\n \"id\" : 7,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4\",\n \"line\" : 13,\n \"column\" : 8,\n \"source_fragment\" : \"verify_checksum(hdr.ingress.ipv4.isValid(), ...\"\n },\n \"algo\" : \"csum16\",\n \"input\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"version\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ihl\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"dscp\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ecn\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"total_len\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"identification\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"flags\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"frag_offset\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ttl\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"protocol\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"src_addr\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"dst_addr\"]\n }\n ]\n },\n {\n \"name\" : \"calc_7\",\n \"id\" : 8,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4\",\n \"line\" : 31,\n \"column\" : 8,\n \"source_fragment\" : \"verify_checksum(hdr.ingress.inner_ipv4.isValid(), ...\"\n },\n \"algo\" : \"csum16\",\n \"input\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"version\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"ihl\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"dscp\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"ecn\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"total_len\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"identification\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"flags\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"frag_offset\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"ttl\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"protocol\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"src_addr\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"dst_addr\"]\n }\n ]\n }\n ],\n \"learn_lists\" : [],\n \"actions\" : [\n {\n \"name\" : \"nop\",\n \"id\" : 0,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"nop\",\n \"id\" : 1,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"nop\",\n \"id\" : 2,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"nop\",\n \"id\" : 3,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"nop\",\n \"id\" : 4,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"nop\",\n \"id\" : 5,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"nop\",\n \"id\" : 6,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"NoAction\",\n \"id\" : 7,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"FabricIngress.stats.count\",\n \"id\" : 8,\n \"runtime_data\" : [\n {\n \"name\" : \"flow_id\",\n \"bitwidth\" : 10\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_stats_flow_id11\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/stats.p4\",\n \"line\" : 17,\n \"column\" : 22,\n \"source_fragment\" : \"= flow_id; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.pkt_io.do_packet_out\",\n \"id\" : 9,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_spec\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_packet_out0\", \"egress_port\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01ff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 13,\n \"column\" : 8,\n \"source_fragment\" : \"standard_md.egress_spec = (PortId_t)hdr.packet_out.egress_port\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_egress_port48\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_packet_out0\", \"egress_port\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 14,\n \"column\" : 37,\n \"source_fragment\" : \"= hdr.packet_out.egress_port; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_egress_port_set22\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 15,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_packet_out0\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 16,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.packet_out.setInvalid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._skip_egress0\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 17,\n \"column\" : 20,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_bridged4\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 19,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.setInvalid()\"\n }\n },\n {\n \"op\" : \"exit\",\n \"parameters\" : [],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 20,\n \"column\" : 8,\n \"source_fragment\" : \"exit\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.filtering.deny\",\n \"id\" : 10,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_forwarding19\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4\",\n \"line\" : 22,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4\",\n \"line\" : 23,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_ig_port_type33\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 100,\n \"column\" : 14,\n \"source_fragment\" : \"0x0, ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x37\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 250,\n \"column\" : 41,\n \"source_fragment\" : \"55, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.filtering.permit\",\n \"id\" : 11,\n \"runtime_data\" : [\n {\n \"name\" : \"port_type\",\n \"bitwidth\" : 2\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_ig_port_type33\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4\",\n \"line\" : 33,\n \"column\" : 31,\n \"source_fragment\" : \"= port_type; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.filtering.permit_with_internal_vlan\",\n \"id\" : 12,\n \"runtime_data\" : [\n {\n \"name\" : \"vlan_id\",\n \"bitwidth\" : 12\n },\n {\n \"name\" : \"port_type\",\n \"bitwidth\" : 2\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_vlan_id6\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4\",\n \"line\" : 38,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.base.vlan_id = vlan_id\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_ig_port_type33\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 1\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4\",\n \"line\" : 33,\n \"column\" : 31,\n \"source_fragment\" : \"= port_type; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.filtering.set_forwarding_type\",\n \"id\" : 13,\n \"runtime_data\" : [\n {\n \"name\" : \"fwd_type\",\n \"bitwidth\" : 3\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_fwd_type5\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4\",\n \"line\" : 74,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.base.fwd_type = fwd_type\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.forwarding.set_int_drop_reason\",\n \"id\" : 14,\n \"runtime_data\" : [\n {\n \"name\" : \"drop_reason\",\n \"bitwidth\" : 8\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"local\",\n \"value\" : 0\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 17,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.int_bmd.drop_reason = (IntDropReason_t)drop_reason\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.forwarding.set_int_drop_reason\",\n \"id\" : 15,\n \"runtime_data\" : [\n {\n \"name\" : \"drop_reason\",\n \"bitwidth\" : 8\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"local\",\n \"value\" : 0\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 17,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.int_bmd.drop_reason = (IntDropReason_t)drop_reason\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.forwarding.set_int_drop_reason\",\n \"id\" : 16,\n \"runtime_data\" : [\n {\n \"name\" : \"drop_reason\",\n \"bitwidth\" : 8\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"local\",\n \"value\" : 0\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 17,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.int_bmd.drop_reason = (IntDropReason_t)drop_reason\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.forwarding.set_int_drop_reason\",\n \"id\" : 17,\n \"runtime_data\" : [\n {\n \"name\" : \"drop_reason\",\n \"bitwidth\" : 8\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"local\",\n \"value\" : 0\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 17,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.int_bmd.drop_reason = (IntDropReason_t)drop_reason\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.forwarding.set_next_id_bridging\",\n \"id\" : 18,\n \"runtime_data\" : [\n {\n \"name\" : \"next_id\",\n \"bitwidth\" : 32\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_next_id21\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 23,\n \"column\" : 26,\n \"source_fragment\" : \"= next_id; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.forwarding.pop_mpls_and_next\",\n \"id\" : 19,\n \"runtime_data\" : [\n {\n \"name\" : \"next_id\",\n \"bitwidth\" : 32\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_mpls6\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 67,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.mpls.setInvalid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_eth_type5\", \"value\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_ip_eth_type10\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 68,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.eth_type.value = fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_mpls_label2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x000000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 69,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.base.mpls_label = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_next_id21\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 23,\n \"column\" : 26,\n \"source_fragment\" : \"= next_id; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.forwarding.set_next_id_routing_v4\",\n \"id\" : 20,\n \"runtime_data\" : [\n {\n \"name\" : \"next_id\",\n \"bitwidth\" : 32\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_next_id21\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 23,\n \"column\" : 26,\n \"source_fragment\" : \"= next_id; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.forwarding.nop_routing_v4\",\n \"id\" : 21,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"FabricIngress.forwarding.drop_routing_v4\",\n \"id\" : 22,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 111,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 113,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.forwarding.set_next_id_routing_v6\",\n \"id\" : 23,\n \"runtime_data\" : [\n {\n \"name\" : \"next_id\",\n \"bitwidth\" : 32\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_next_id21\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 23,\n \"column\" : 26,\n \"source_fragment\" : \"= next_id; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.forwarding.drop_routing_v6\",\n \"id\" : 24,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 150,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 152,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.pre_next.set_mpls_label\",\n \"id\" : 25,\n \"runtime_data\" : [\n {\n \"name\" : \"label\",\n \"bitwidth\" : 20\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_mpls_label2\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/pre_next.p4\",\n \"line\" : 18,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.base.mpls_label = label\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.pre_next.set_vlan\",\n \"id\" : 26,\n \"runtime_data\" : [\n {\n \"name\" : \"vlan_id\",\n \"bitwidth\" : 12\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_vlan_id6\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/pre_next.p4\",\n \"line\" : 42,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.base.vlan_id = vlan_id\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.acl.set_next_id_acl\",\n \"id\" : 27,\n \"runtime_data\" : [\n {\n \"name\" : \"next_id\",\n \"bitwidth\" : 32\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_next_id21\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 22,\n \"column\" : 26,\n \"source_fragment\" : \"= next_id; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 26,\n \"column\" : 28,\n \"source_fragment\" : \"= false; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 27,\n \"column\" : 17,\n \"source_fragment\" : \"= 0; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.acl.copy_to_cpu\",\n \"id\" : 28,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"clone_ingress_pkt_to_egress\",\n \"parameters\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x000001ff\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x2\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 31,\n \"column\" : 8,\n \"source_fragment\" : \"clone_preserving_field_list(CloneType.I2E, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.acl.punt_to_cpu\",\n \"id\" : 29,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"clone_ingress_pkt_to_egress\",\n \"parameters\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x000001ff\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x2\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 31,\n \"column\" : 8,\n \"source_fragment\" : \"clone_preserving_field_list(CloneType.I2E, ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 40,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_punt_to_cpu23\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 41,\n \"column\" : 30,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 42,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.acl.drop\",\n \"id\" : 30,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 46,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 47,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x50\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 252,\n \"column\" : 27,\n \"source_fragment\" : \"80, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.acl.set_output_port\",\n \"id\" : 31,\n \"runtime_data\" : [\n {\n \"name\" : \"port_num\",\n \"bitwidth\" : 9\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_spec\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"local\",\n \"value\" : 0\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01ff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 62,\n \"column\" : 8,\n \"source_fragment\" : \"standard_md.egress_spec = (PortId_t) port_num\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_egress_port48\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 63,\n \"column\" : 37,\n \"source_fragment\" : \"= port_num; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_egress_port_set22\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 64,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 65,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 66,\n \"column\" : 17,\n \"source_fragment\" : \"= 0; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.acl.nop_acl\",\n \"id\" : 32,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"FabricIngress.next.output_hashed\",\n \"id\" : 33,\n \"runtime_data\" : [\n {\n \"name\" : \"port_num\",\n \"bitwidth\" : 9\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_spec\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"local\",\n \"value\" : 0\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01ff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 16,\n \"column\" : 8,\n \"source_fragment\" : \"standard_md.egress_spec = (PortId_t)port_num\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_egress_port48\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 17,\n \"column\" : 37,\n \"source_fragment\" : \"= port_num; // Needed by INT. ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_egress_port_set22\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 18,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.next.routing_hashed\",\n \"id\" : 34,\n \"runtime_data\" : [\n {\n \"name\" : \"port_num\",\n \"bitwidth\" : 9\n },\n {\n \"name\" : \"smac\",\n \"bitwidth\" : 48\n },\n {\n \"name\" : \"dmac\",\n \"bitwidth\" : 48\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ethernet3\", \"src_addr\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 1\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 23,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ethernet.src_addr = smac; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ethernet3\", \"dst_addr\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 2\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 28,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ethernet.dst_addr = dmac; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_spec\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"local\",\n \"value\" : 0\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01ff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 16,\n \"column\" : 8,\n \"source_fragment\" : \"standard_md.egress_spec = (PortId_t)port_num\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_egress_port48\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 17,\n \"column\" : 37,\n \"source_fragment\" : \"= port_num; // Needed by INT. ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_egress_port_set22\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 18,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.next.set_mcast_group_id\",\n \"id\" : 35,\n \"runtime_data\" : [\n {\n \"name\" : \"group_id\",\n \"bitwidth\" : 16\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"mcast_grp\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 151,\n \"column\" : 8,\n \"source_fragment\" : \"standard_md.mcast_grp = group_id\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_is_multicast4\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 152,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.base.is_multicast = true\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.next.reset_mcast_group_id\",\n \"id\" : 36,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"mcast_grp\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 157,\n \"column\" : 8,\n \"source_fragment\" : \"standard_md.mcast_grp = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_is_multicast4\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 158,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.base.is_multicast = false\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.slice_tc_classifier.set_slice_id_tc\",\n \"id\" : 37,\n \"runtime_data\" : [\n {\n \"name\" : \"slice_id\",\n \"bitwidth\" : 4\n },\n {\n \"name\" : \"tc\",\n \"bitwidth\" : 2\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_slice_id26\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 23,\n \"column\" : 27,\n \"source_fragment\" : \"= slice_id; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_tc27\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 1\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 24,\n \"column\" : 21,\n \"source_fragment\" : \"= tc; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_tc_unknown28\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 25,\n \"column\" : 29,\n \"source_fragment\" : \"= false; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.slice_tc_classifier.no_classification\",\n \"id\" : 38,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_slice_id26\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 57,\n \"column\" : 36,\n \"source_fragment\" : \"0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_tc27\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 58,\n \"column\" : 24,\n \"source_fragment\" : \"0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_tc_unknown28\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 25,\n \"column\" : 29,\n \"source_fragment\" : \"= false; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_tc_unknown28\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 31,\n \"column\" : 29,\n \"source_fragment\" : \"= true; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.slice_tc_classifier.trust_dscp\",\n \"id\" : 39,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_slice_id26\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"dscp\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x2\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3f\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0f\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 38,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr.ipv4.dscp[4 +2 -1:2]; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_tc27\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"dscp\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x03\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 39,\n \"column\" : 21,\n \"source_fragment\" : \"= hdr.ipv4.dscp[2 -1:0]; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_tc_unknown28\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 40,\n \"column\" : 29,\n \"source_fragment\" : \"= false; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.qos.use_upf\",\n \"id\" : 40,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_slice_tc12\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"|\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"<<\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_upf_slice_id30\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3f\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x2\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3f\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_upf_tc31\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3f\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x07\"\n }\n }\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 81,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.base.slice_tc = fabric_md.upf_slice_id++fabric_md.upf_tc\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.qos.use_default\",\n \"id\" : 41,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_slice_tc12\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"|\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"<<\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_slice_id26\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3f\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x2\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3f\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_tc27\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3f\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x07\"\n }\n }\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 86,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.base.slice_tc = fabric_md.slice_id++fabric_md.tc\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.qos.set_queue\",\n \"id\" : 42,\n \"runtime_data\" : [\n {\n \"name\" : \"qid\",\n \"bitwidth\" : 5\n }\n ],\n \"primitives\" : []\n },\n {\n \"name\" : \"FabricIngress.qos.meter_drop\",\n \"id\" : 43,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 115,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xa0\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 269,\n \"column\" : 36,\n \"source_fragment\" : \"160, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.qos.set_default_tc\",\n \"id\" : 44,\n \"runtime_data\" : [\n {\n \"name\" : \"tc\",\n \"bitwidth\" : 2\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_slice_tc12\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"|\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"<<\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_slice_tc12\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x2\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3f\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0f\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3f\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x2\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3f\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"local\",\n \"value\" : 0\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3f\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x07\"\n }\n }\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 146,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.base.slice_tc = fabric_md.bridged.base.slice_tc[4 +2 -1:2]++tc\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.iface_access\",\n \"id\" : 45,\n \"runtime_data\" : [\n {\n \"name\" : \"slice_id\",\n \"bitwidth\" : 4\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_skip_upf17\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 85,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.skip_upf = false\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_is_upf_hit29\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 86,\n \"column\" : 29,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_upf_slice_id30\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 87,\n \"column\" : 31,\n \"source_fragment\" : \"= slice_id; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.iface_core\",\n \"id\" : 46,\n \"runtime_data\" : [\n {\n \"name\" : \"slice_id\",\n \"bitwidth\" : 4\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_skip_upf17\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 85,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.skip_upf = false\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_is_upf_hit29\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 86,\n \"column\" : 29,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_upf_slice_id30\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 87,\n \"column\" : 31,\n \"source_fragment\" : \"= slice_id; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.iface_dbuf\",\n \"id\" : 47,\n \"runtime_data\" : [\n {\n \"name\" : \"slice_id\",\n \"bitwidth\" : 4\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_skip_upf17\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 85,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.skip_upf = false\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_is_upf_hit29\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 86,\n \"column\" : 29,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_upf_slice_id30\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 87,\n \"column\" : 31,\n \"source_fragment\" : \"= slice_id; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_ip_eth_type10\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0800\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 114,\n \"column\" : 31,\n \"source_fragment\" : \"0x0800; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_routing_ipv4_dst18\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"dst_addr\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 62,\n \"column\" : 35,\n \"source_fragment\" : \"= hdr.inner_ipv4.dst_addr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_ipv47\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_ipv418\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 64,\n \"column\" : 17,\n \"source_fragment\" : \"= hdr.inner_ipv4; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_ipv418\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 65,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.inner_ipv4.setInvalid()\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_udp10\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_udp20\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 66,\n \"column\" : 16,\n \"source_fragment\" : \"= hdr.inner_udp; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_udp20\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 67,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.inner_udp.setInvalid()\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_tcp9\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_tcp19\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 68,\n \"column\" : 16,\n \"source_fragment\" : \"= hdr.inner_tcp; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_tcp19\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 69,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.inner_tcp.setInvalid()\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_icmp11\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_icmp21\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 70,\n \"column\" : 17,\n \"source_fragment\" : \"= hdr.inner_icmp; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_icmp21\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 71,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.inner_icmp.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu12\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 72,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu_options13\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 73,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_options.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu_ext_psc14\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 74,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_ext_psc.setInvalid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_encap_presence7\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 80,\n \"column\" : 11,\n \"source_fragment\" : \"0x0, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.iface_miss\",\n \"id\" : 48,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_skip_upf17\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 104,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.skip_upf = true\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.set_uplink_session_miss\",\n \"id\" : 49,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 39,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_forwarding19\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 40,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 41,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x86\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 261,\n \"column\" : 38,\n \"source_fragment\" : \"134, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.set_uplink_session_drop\",\n \"id\" : 50,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_sess_hit\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 136,\n \"column\" : 8,\n \"source_fragment\" : \"sess_hit = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 39,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_forwarding19\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 40,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 41,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x87\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 262,\n \"column\" : 38,\n \"source_fragment\" : \"135, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.set_downlink_session_miss\",\n \"id\" : 51,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 39,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_forwarding19\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 40,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 41,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x84\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 259,\n \"column\" : 38,\n \"source_fragment\" : \"132, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.set_downlink_session_drop\",\n \"id\" : 52,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_sess_hit\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 151,\n \"column\" : 8,\n \"source_fragment\" : \"sess_hit = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 39,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_forwarding19\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 40,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 41,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x85\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 260,\n \"column\" : 38,\n \"source_fragment\" : \"133, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.set_downlink_session\",\n \"id\" : 53,\n \"runtime_data\" : [\n {\n \"name\" : \"tun_peer_id\",\n \"bitwidth\" : 8\n },\n {\n \"name\" : \"session_meter_idx\",\n \"bitwidth\" : 15\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_sess_hit\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 159,\n \"column\" : 8,\n \"source_fragment\" : \"sess_hit = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_ue_session_id\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_routing_ipv4_dst18\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 161,\n \"column\" : 8,\n \"source_fragment\" : \"ue_session_id = fabric_md.routing_ipv4_dst; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_session_meter_idx_internal\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 1\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 162,\n \"column\" : 8,\n \"source_fragment\" : \"session_meter_idx_internal = session_meter_idx\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_tun_peer_id13\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 163,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.tun_peer_id = tun_peer_id\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.set_downlink_session_buf\",\n \"id\" : 54,\n \"runtime_data\" : [\n {\n \"name\" : \"tun_peer_id\",\n \"bitwidth\" : 8\n },\n {\n \"name\" : \"session_meter_idx\",\n \"bitwidth\" : 15\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_sess_hit\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 167,\n \"column\" : 8,\n \"source_fragment\" : \"sess_hit = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_ue_session_id\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_routing_ipv4_dst18\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 169,\n \"column\" : 8,\n \"source_fragment\" : \"ue_session_id = fabric_md.routing_ipv4_dst; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_session_meter_idx_internal\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 1\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 170,\n \"column\" : 8,\n \"source_fragment\" : \"session_meter_idx_internal = session_meter_idx\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_tun_peer_id13\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 171,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.tun_peer_id = tun_peer_id\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_skip_egress_upf_ctr18\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 175,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.skip_egress_upf_ctr = true\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.set_downlink_session_buf_drop\",\n \"id\" : 55,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_sess_hit\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 179,\n \"column\" : 8,\n \"source_fragment\" : \"sess_hit = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_ue_session_id\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_routing_ipv4_dst18\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 182,\n \"column\" : 8,\n \"source_fragment\" : \"ue_session_id = fabric_md.routing_ipv4_dst; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 39,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_forwarding19\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 40,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 41,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x88\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 263,\n \"column\" : 43,\n \"source_fragment\" : \"136, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.set_uplink_session\",\n \"id\" : 56,\n \"runtime_data\" : [\n {\n \"name\" : \"session_meter_idx\",\n \"bitwidth\" : 15\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_sess_hit\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 190,\n \"column\" : 8,\n \"source_fragment\" : \"sess_hit = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_ue_session_id\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_src11\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 192,\n \"column\" : 8,\n \"source_fragment\" : \"ue_session_id = fabric_md.lkp.ipv4_src; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_session_meter_idx_internal\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 193,\n \"column\" : 8,\n \"source_fragment\" : \"session_meter_idx_internal = session_meter_idx\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_ip_eth_type10\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0800\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 114,\n \"column\" : 31,\n \"source_fragment\" : \"0x0800; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_routing_ipv4_dst18\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"dst_addr\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 62,\n \"column\" : 35,\n \"source_fragment\" : \"= hdr.inner_ipv4.dst_addr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_ipv47\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_ipv418\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 64,\n \"column\" : 17,\n \"source_fragment\" : \"= hdr.inner_ipv4; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_ipv418\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 65,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.inner_ipv4.setInvalid()\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_udp10\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_udp20\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 66,\n \"column\" : 16,\n \"source_fragment\" : \"= hdr.inner_udp; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_udp20\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 67,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.inner_udp.setInvalid()\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_tcp9\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_tcp19\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 68,\n \"column\" : 16,\n \"source_fragment\" : \"= hdr.inner_tcp; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_tcp19\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 69,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.inner_tcp.setInvalid()\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_icmp11\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_icmp21\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 70,\n \"column\" : 17,\n \"source_fragment\" : \"= hdr.inner_icmp; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_icmp21\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 71,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.inner_icmp.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu12\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 72,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu_options13\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 73,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_options.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu_ext_psc14\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 74,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_ext_psc.setInvalid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_encap_presence7\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 80,\n \"column\" : 11,\n \"source_fragment\" : \"0x0, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.uplink_drop_miss\",\n \"id\" : 57,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 39,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_forwarding19\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 40,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 41,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x8b\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 266,\n \"column\" : 42,\n \"source_fragment\" : \"139, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.downlink_drop_miss\",\n \"id\" : 58,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 39,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_forwarding19\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 40,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 41,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x89\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 264,\n \"column\" : 42,\n \"source_fragment\" : \"137, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.uplink_drop\",\n \"id\" : 59,\n \"runtime_data\" : [\n {\n \"name\" : \"ctr_id\",\n \"bitwidth\" : 12\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 39,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_forwarding19\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 40,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 41,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_upf_ctr_id14\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 46,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.upf_ctr_id = ctr_id; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_term_hit\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 47,\n \"column\" : 8,\n \"source_fragment\" : \"term_hit = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x8c\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 267,\n \"column\" : 42,\n \"source_fragment\" : \"140, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.downlink_drop\",\n \"id\" : 60,\n \"runtime_data\" : [\n {\n \"name\" : \"ctr_id\",\n \"bitwidth\" : 12\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 39,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_forwarding19\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 40,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 41,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_upf_ctr_id14\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 46,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.upf_ctr_id = ctr_id; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_term_hit\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 47,\n \"column\" : 8,\n \"source_fragment\" : \"term_hit = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x8a\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 265,\n \"column\" : 42,\n \"source_fragment\" : \"138, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.app_fwd\",\n \"id\" : 61,\n \"runtime_data\" : [\n {\n \"name\" : \"ctr_id\",\n \"bitwidth\" : 12\n },\n {\n \"name\" : \"tc\",\n \"bitwidth\" : 2\n },\n {\n \"name\" : \"app_meter_idx\",\n \"bitwidth\" : 15\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_upf_ctr_id14\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 46,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.upf_ctr_id = ctr_id; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_term_hit\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 47,\n \"column\" : 8,\n \"source_fragment\" : \"term_hit = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_upf_tc31\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 1\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 265,\n \"column\" : 25,\n \"source_fragment\" : \"= tc; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_meter_idx_internal\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 2\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 266,\n \"column\" : 8,\n \"source_fragment\" : \"app_meter_idx_internal = app_meter_idx\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_tc_unknown28\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 267,\n \"column\" : 29,\n \"source_fragment\" : \"= false; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.downlink_fwd_encap\",\n \"id\" : 62,\n \"runtime_data\" : [\n {\n \"name\" : \"ctr_id\",\n \"bitwidth\" : 12\n },\n {\n \"name\" : \"tc\",\n \"bitwidth\" : 2\n },\n {\n \"name\" : \"teid\",\n \"bitwidth\" : 32\n },\n {\n \"name\" : \"qfi\",\n \"bitwidth\" : 6\n },\n {\n \"name\" : \"app_meter_idx\",\n \"bitwidth\" : 15\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_upf_ctr_id14\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 46,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.upf_ctr_id = ctr_id; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_term_hit\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 47,\n \"column\" : 8,\n \"source_fragment\" : \"term_hit = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_upf_tc31\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 1\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 265,\n \"column\" : 25,\n \"source_fragment\" : \"= tc; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_meter_idx_internal\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 4\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 266,\n \"column\" : 8,\n \"source_fragment\" : \"app_meter_idx_internal = app_meter_idx; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_tc_unknown28\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 267,\n \"column\" : 29,\n \"source_fragment\" : \"= false; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_needs_gtpu_encap16\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 54,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.needs_gtpu_encap = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_teid19\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 2\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 55,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.teid = teid; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_qfi15\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 3\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 56,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.qfi = qfi; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.set_routing_ipv4_dst\",\n \"id\" : 63,\n \"runtime_data\" : [\n {\n \"name\" : \"tun_dst_addr\",\n \"bitwidth\" : 32\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_routing_ipv4_dst18\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 314,\n \"column\" : 35,\n \"source_fragment\" : \"= tun_dst_addr; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.set_app_id\",\n \"id\" : 64,\n \"runtime_data\" : [\n {\n \"name\" : \"app_id\",\n \"bitwidth\" : 8\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_internal_app_id\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 334,\n \"column\" : 8,\n \"source_fragment\" : \"internal_app_id = app_id\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.recirc_allow\",\n \"id\" : 65,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_spec\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01fe\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4\",\n \"line\" : 36,\n \"column\" : 42,\n \"source_fragment\" : \"510; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_vlan_id6\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0ffe\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 147,\n \"column\" : 34,\n \"source_fragment\" : \"12w4094; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._do_upf_uplink_recirc1\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 364,\n \"column\" : 29,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_egress_port_set22\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 365,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_forwarding19\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 366,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 367,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.recirc_deny\",\n \"id\" : 66,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x96\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 268,\n \"column\" : 41,\n \"source_fragment\" : \"150, ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._do_upf_uplink_recirc1\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 375,\n \"column\" : 29,\n \"source_fragment\" : \"= false; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_forwarding19\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 376,\n \"column\" : 34,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 377,\n \"column\" : 28,\n \"source_fragment\" : \"= true; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.upf.recirc_miss\",\n \"id\" : 67,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"FabricIngress.int_watchlist.mark_to_report\",\n \"id\" : 68,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_report_type21\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 223,\n \"column\" : 45,\n \"source_fragment\" : \"1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_report_type47\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 223,\n \"column\" : 45,\n \"source_fragment\" : \"1; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.int_watchlist.no_report\",\n \"id\" : 69,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_report_type21\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 219,\n \"column\" : 50,\n \"source_fragment\" : \"0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_report_type47\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 219,\n \"column\" : 50,\n \"source_fragment\" : \"0; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.int_watchlist.no_report_collector\",\n \"id\" : 70,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_report_type21\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 219,\n \"column\" : 50,\n \"source_fragment\" : \"0; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.int_ingress.report_drop\",\n \"id\" : 71,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_bmd_type0\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 169,\n \"column\" : 23,\n \"source_fragment\" : \"4, ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_report_type21\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 221,\n \"column\" : 45,\n \"source_fragment\" : \"4; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_vlan_id6\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0ffe\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 147,\n \"column\" : 34,\n \"source_fragment\" : \"12w4094; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_mpls_label2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x000000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 71,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.base.mpls_label = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_skip_upf17\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 73,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.upf.skip_upf = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 79,\n \"column\" : 17,\n \"source_fragment\" : \"= 0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_spec\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01fe\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4\",\n \"line\" : 36,\n \"column\" : 42,\n \"source_fragment\" : \"510; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"fabric_v1model64\",\n \"id\" : 72,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"exit\",\n \"parameters\" : [],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 64,\n \"column\" : 12,\n \"source_fragment\" : \"exit\"\n }\n }\n ]\n },\n {\n \"name\" : \"fabric_v1model61\",\n \"id\" : 73,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"mark_to_drop\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"standard_metadata\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 61,\n \"column\" : 8,\n \"source_fragment\" : \"mark_to_drop(standard_md)\"\n }\n }\n ]\n },\n {\n \"name\" : \"fabric_v1model70\",\n \"id\" : 74,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_ig_port3\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01fe\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4\",\n \"line\" : 36,\n \"column\" : 42,\n \"source_fragment\" : \"510; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"lookup_md_init21\",\n \"id\" : 75,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_vlan_id9\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_vlan_tag4\", \"vlan_id\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 21,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr.vlan_tag.vlan_id; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"lookup_md_init15\",\n \"id\" : 76,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_eth_dst6\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ethernet3\", \"dst_addr\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 15,\n \"column\" : 23,\n \"source_fragment\" : \"= hdr.ethernet.dst_addr; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_eth_src7\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ethernet3\", \"src_addr\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 16,\n \"column\" : 23,\n \"source_fragment\" : \"= hdr.ethernet.src_addr; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_eth_type8\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_eth_type5\", \"value\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 17,\n \"column\" : 24,\n \"source_fragment\" : \"= hdr.eth_type.value; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_vlan_id9\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 19,\n \"column\" : 23,\n \"source_fragment\" : \"= 0; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"lookup_md_init38\",\n \"id\" : 77,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_sport14\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_tcp19\", \"sport\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 38,\n \"column\" : 32,\n \"source_fragment\" : \"= hdr.inner_tcp.sport; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_dport15\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_tcp19\", \"dport\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 39,\n \"column\" : 32,\n \"source_fragment\" : \"= hdr.inner_tcp.dport; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"lookup_md_init41\",\n \"id\" : 78,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_sport14\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_udp20\", \"sport\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 41,\n \"column\" : 32,\n \"source_fragment\" : \"= hdr.inner_udp.sport; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_dport15\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_udp20\", \"dport\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 42,\n \"column\" : 32,\n \"source_fragment\" : \"= hdr.inner_udp.dport; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"lookup_md_init44\",\n \"id\" : 79,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_icmp_type16\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_icmp21\", \"icmp_type\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 44,\n \"column\" : 33,\n \"source_fragment\" : \"= hdr.inner_icmp.icmp_type; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_icmp_code17\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_icmp21\", \"icmp_code\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 45,\n \"column\" : 33,\n \"source_fragment\" : \"= hdr.inner_icmp.icmp_code; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"lookup_md_init33\",\n \"id\" : 80,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_is_ipv410\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 33,\n \"column\" : 27,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_src11\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"src_addr\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 34,\n \"column\" : 28,\n \"source_fragment\" : \"= hdr.inner_ipv4.src_addr; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_dst12\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"dst_addr\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 35,\n \"column\" : 28,\n \"source_fragment\" : \"= hdr.inner_ipv4.dst_addr; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ip_proto13\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"protocol\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 36,\n \"column\" : 28,\n \"source_fragment\" : \"= hdr.inner_ipv4.protocol; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"lookup_md_init53\",\n \"id\" : 81,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_sport14\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_tcp9\", \"sport\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 53,\n \"column\" : 32,\n \"source_fragment\" : \"= hdr.tcp.sport; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_dport15\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_tcp9\", \"dport\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 54,\n \"column\" : 32,\n \"source_fragment\" : \"= hdr.tcp.dport; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"lookup_md_init56\",\n \"id\" : 82,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_sport14\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_udp10\", \"sport\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 56,\n \"column\" : 32,\n \"source_fragment\" : \"= hdr.udp.sport; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_dport15\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_udp10\", \"dport\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 57,\n \"column\" : 32,\n \"source_fragment\" : \"= hdr.udp.dport; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"lookup_md_init59\",\n \"id\" : 83,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_icmp_type16\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_icmp11\", \"icmp_type\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 59,\n \"column\" : 33,\n \"source_fragment\" : \"= hdr.icmp.icmp_type; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_icmp_code17\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_icmp11\", \"icmp_code\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 60,\n \"column\" : 33,\n \"source_fragment\" : \"= hdr.icmp.icmp_code; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"lookup_md_init48\",\n \"id\" : 84,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_is_ipv410\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 48,\n \"column\" : 27,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_src11\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"src_addr\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 49,\n \"column\" : 28,\n \"source_fragment\" : \"= hdr.ipv4.src_addr; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_dst12\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"dst_addr\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 50,\n \"column\" : 28,\n \"source_fragment\" : \"= hdr.ipv4.dst_addr; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ip_proto13\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"protocol\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 51,\n \"column\" : 28,\n \"source_fragment\" : \"= hdr.ipv4.protocol; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"lookup_md_init24\",\n \"id\" : 85,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_is_ipv410\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 24,\n \"column\" : 23,\n \"source_fragment\" : \"= false; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_src11\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 25,\n \"column\" : 24,\n \"source_fragment\" : \"= 0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_dst12\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 26,\n \"column\" : 24,\n \"source_fragment\" : \"= 0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ip_proto13\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 27,\n \"column\" : 24,\n \"source_fragment\" : \"= 0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_sport14\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 28,\n \"column\" : 24,\n \"source_fragment\" : \"= 0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_dport15\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 29,\n \"column\" : 24,\n \"source_fragment\" : \"= 0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_icmp_type16\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 30,\n \"column\" : 25,\n \"source_fragment\" : \"= 0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_icmp_code17\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 31,\n \"column\" : 25,\n \"source_fragment\" : \"= 0; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"upf409\",\n \"id\" : 86,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_is_uplink\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 409,\n \"column\" : 20,\n \"source_fragment\" : \"is_uplink = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_ipv4_addr\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_dst12\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 410,\n \"column\" : 20,\n \"source_fragment\" : \"app_ipv4_addr = fabric_md.lkp.ipv4_dst; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_l4_port\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_dport15\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 411,\n \"column\" : 20,\n \"source_fragment\" : \"app_l4_port = fabric_md.lkp.l4_dport; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_ip_proto\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ip_proto13\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 412,\n \"column\" : 20,\n \"source_fragment\" : \"app_ip_proto = fabric_md.lkp.ip_proto; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"upf418\",\n \"id\" : 87,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_ipv4_addr\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_src11\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 418,\n \"column\" : 20,\n \"source_fragment\" : \"app_ipv4_addr = fabric_md.lkp.ipv4_src; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_l4_port\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_sport14\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 419,\n \"column\" : 20,\n \"source_fragment\" : \"app_l4_port = fabric_md.lkp.l4_sport; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_ip_proto\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ip_proto13\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 420,\n \"column\" : 20,\n \"source_fragment\" : \"app_ip_proto = fabric_md.lkp.ip_proto; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"upf424\",\n \"id\" : 88,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_ipv4_addr\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_src11\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 424,\n \"column\" : 20,\n \"source_fragment\" : \"app_ipv4_addr = fabric_md.lkp.ipv4_src; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_l4_port\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_sport14\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 425,\n \"column\" : 20,\n \"source_fragment\" : \"app_l4_port = fabric_md.lkp.l4_sport; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_ip_proto\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ip_proto13\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 426,\n \"column\" : 20,\n \"source_fragment\" : \"app_ip_proto = fabric_md.lkp.ip_proto; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"upf443\",\n \"id\" : 89,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_skip_egress_upf_ctr18\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 443,\n \"column\" : 16,\n \"source_fragment\" : \"fabric_md.bridged.upf.skip_egress_upf_ctr = true\"\n }\n }\n ]\n },\n {\n \"name\" : \"upf448\",\n \"id\" : 90,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_14\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_session_meter_idx_internal\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 448,\n \"column\" : 44,\n \"source_fragment\" : \"(bit<32>) session_meter_idx_internal\"\n }\n },\n {\n \"op\" : \"execute_meter\",\n \"parameters\" : [\n {\n \"type\" : \"meter_array\",\n \"value\" : \"FabricIngress.upf.session_meter\"\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_14\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_upf_meter_color32\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 448,\n \"column\" : 16,\n \"source_fragment\" : \"session_meter.execute_meter((bit<32>) session_meter_idx_internal, fabric_md.upf_meter_color)\"\n }\n }\n ]\n },\n {\n \"name\" : \"upf445\",\n \"id\" : 91,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_15\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_meter_idx_internal\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 445,\n \"column\" : 36,\n \"source_fragment\" : \"(bit<32>) app_meter_idx_internal\"\n }\n },\n {\n \"op\" : \"execute_meter\",\n \"parameters\" : [\n {\n \"type\" : \"meter_array\",\n \"value\" : \"FabricIngress.upf.app_meter\"\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_15\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_upf_meter_color32\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 445,\n \"column\" : 12,\n \"source_fragment\" : \"app_meter.execute_meter((bit<32>) app_meter_idx_internal, fabric_md.upf_meter_color)\"\n }\n }\n ]\n },\n {\n \"name\" : \"upf461\",\n \"id\" : 92,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_16\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_upf_ctr_id14\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 461,\n \"column\" : 43,\n \"source_fragment\" : \"(bit<32>)fabric_md.bridged.upf.upf_ctr_id\"\n }\n },\n {\n \"op\" : \"count\",\n \"parameters\" : [\n {\n \"type\" : \"counter_array\",\n \"value\" : \"FabricIngress.upf.terminations_counter\"\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_16\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 461,\n \"column\" : 16,\n \"source_fragment\" : \"terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id)\"\n }\n }\n ]\n },\n {\n \"name\" : \"upf25\",\n \"id\" : 93,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_is_uplink\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 25,\n \"column\" : 4,\n \"source_fragment\" : \"bool is_uplink = false;\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_term_hit\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 26,\n \"column\" : 4,\n \"source_fragment\" : \"bool term_hit = false;\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_sess_hit\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : false\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 27,\n \"column\" : 4,\n \"source_fragment\" : \"bool sess_hit = false;\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_ipv4_addr\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 28,\n \"column\" : 4,\n \"source_fragment\" : \"bit<32> app_ipv4_addr = 0;\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_l4_port\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 29,\n \"column\" : 4,\n \"source_fragment\" : \"l4_port_t app_l4_port = 0;\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_ip_proto\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 30,\n \"column\" : 4,\n \"source_fragment\" : \"bit<8> app_ip_proto = 0;\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_internal_app_id\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 55,\n \"column\" : 30,\n \"source_fragment\" : \"0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_ue_session_id\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 32,\n \"column\" : 4,\n \"source_fragment\" : \"ue_session_id_t ue_session_id = 0;\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_session_meter_idx_internal\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 72,\n \"column\" : 54,\n \"source_fragment\" : \"0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_app_meter_idx_internal\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 73,\n \"column\" : 46,\n \"source_fragment\" : \"0; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"filtering100\",\n \"id\" : 94,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_17\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_fwd_type5\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4\",\n \"line\" : 100,\n \"column\" : 31,\n \"source_fragment\" : \"(bit<32>)fabric_md.bridged.base.fwd_type\"\n }\n },\n {\n \"op\" : \"count\",\n \"parameters\" : [\n {\n \"type\" : \"counter_array\",\n \"value\" : \"FabricIngress.filtering.fwd_type_counter\"\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_17\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4\",\n \"line\" : 100,\n \"column\" : 8,\n \"source_fragment\" : \"fwd_type_counter.count((bit<32>)fabric_md.bridged.base.fwd_type)\"\n }\n }\n ]\n },\n {\n \"name\" : \"hasher28\",\n \"id\" : 95,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_18\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_tun_peer_id13\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 32,\n \"column\" : 17,\n \"source_fragment\" : \"fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_19\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_teid19\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 32,\n \"column\" : 52,\n \"source_fragment\" : \"fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"modify_field_with_hash_based_offset\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_ecmp_hash5\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000000\"\n },\n {\n \"type\" : \"calculation\",\n \"value\" : \"calc\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 28,\n \"column\" : 12,\n \"source_fragment\" : \"hash( ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"hasher39\",\n \"id\" : 96,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_20\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"src_addr\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 43,\n \"column\" : 17,\n \"source_fragment\" : \"hdr.ipv4.src_addr\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_21\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"dst_addr\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 43,\n \"column\" : 36,\n \"source_fragment\" : \"hdr.ipv4.dst_addr\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_22\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"teid\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 43,\n \"column\" : 55,\n \"source_fragment\" : \"hdr.gtpu.teid\"\n }\n },\n {\n \"op\" : \"modify_field_with_hash_based_offset\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_ecmp_hash5\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000000\"\n },\n {\n \"type\" : \"calculation\",\n \"value\" : \"calc_0\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 39,\n \"column\" : 12,\n \"source_fragment\" : \"hash( ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"hasher50\",\n \"id\" : 97,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_ecmp_hash5\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_inner_hash1\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 50,\n \"column\" : 32,\n \"source_fragment\" : \"= fabric_md.bridged.base.inner_hash; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"hasher66\",\n \"id\" : 98,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_inner_hash1\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 66,\n \"column\" : 12,\n \"source_fragment\" : \"fabric_md.bridged.base.inner_hash = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_23\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ethernet3\", \"dst_addr\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 71,\n \"column\" : 17,\n \"source_fragment\" : \"hdr.ethernet.dst_addr\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_24\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ethernet3\", \"src_addr\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 71,\n \"column\" : 40,\n \"source_fragment\" : \"hdr.ethernet.src_addr\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_25\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_eth_type5\", \"value\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 71,\n \"column\" : 63,\n \"source_fragment\" : \"hdr.eth_type.value\"\n }\n },\n {\n \"op\" : \"modify_field_with_hash_based_offset\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_ecmp_hash5\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000000\"\n },\n {\n \"type\" : \"calculation\",\n \"value\" : \"calc_1\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 67,\n \"column\" : 12,\n \"source_fragment\" : \"hash( ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"hasher17\",\n \"id\" : 99,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_26\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_src11\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 91,\n \"column\" : 34,\n \"source_fragment\" : \"fabric_md\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_27\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_dst12\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 91,\n \"column\" : 34,\n \"source_fragment\" : \"fabric_md\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_28\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_ip_proto13\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 91,\n \"column\" : 34,\n \"source_fragment\" : \"fabric_md\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_29\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_sport14\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 91,\n \"column\" : 34,\n \"source_fragment\" : \"fabric_md\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_30\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_dport15\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 91,\n \"column\" : 34,\n \"source_fragment\" : \"fabric_md\"\n }\n },\n {\n \"op\" : \"modify_field_with_hash_based_offset\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_inner_hash1\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000000\"\n },\n {\n \"type\" : \"calculation\",\n \"value\" : \"calc_2\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 17,\n \"column\" : 8,\n \"source_fragment\" : \"hash( ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"slicing174\",\n \"id\" : 100,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_31\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_slice_tc12\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 174,\n \"column\" : 41,\n \"source_fragment\" : \"(bit<32>) fabric_md.bridged.base.slice_tc\"\n }\n },\n {\n \"op\" : \"execute_meter\",\n \"parameters\" : [\n {\n \"type\" : \"meter_array\",\n \"value\" : \"FabricIngress.qos.slice_tc_meter\"\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_31\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"qos_packet_color\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 174,\n \"column\" : 12,\n \"source_fragment\" : \"slice_tc_meter.execute_meter((bit<32>) fabric_md.bridged.base.slice_tc, packet_color)\"\n }\n }\n ]\n },\n {\n \"name\" : \"slicing177\",\n \"id\" : 101,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"qos_packet_color\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/define_v1model.p4\",\n \"line\" : 25,\n \"column\" : 10,\n \"source_fragment\" : \"2 ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"int112\",\n \"id\" : 102,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_egress_port25\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_spec\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 112,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.int_bmd.egress_port = standard_md.egress_spec\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_int_bmd_queue_id24\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 113,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.int_bmd.queue_id = 0\"\n }\n }\n ]\n },\n {\n \"name\" : \"fabric_v1model110\",\n \"id\" : 103,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"mark_to_drop\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"standard_metadata\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 110,\n \"column\" : 12,\n \"source_fragment\" : \"mark_to_drop(standard_md)\"\n }\n }\n ]\n },\n {\n \"name\" : \"fabric_v1model106\",\n \"id\" : 104,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_bridged36\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_bridged4\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 106,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.egress.bridged = fabric_md\"\n }\n }\n ]\n },\n {\n \"name\" : \"nop\",\n \"id\" : 105,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"nop\",\n \"id\" : 106,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"nop\",\n \"id\" : 107,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"nop\",\n \"id\" : 108,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"nop\",\n \"id\" : 109,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"nop\",\n \"id\" : 110,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"nop\",\n \"id\" : 111,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"FabricEgress.stats.count\",\n \"id\" : 112,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"FabricEgress.pkt_io_egress.set_switch_info\",\n \"id\" : 113,\n \"runtime_data\" : [\n {\n \"name\" : \"cpu_port\",\n \"bitwidth\" : 9\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_cpu_port37\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"local\",\n \"value\" : 0\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01ff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 36,\n \"column\" : 27,\n \"source_fragment\" : \"= (PortId_t)cpu_port; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.egress_next.pop_mpls_if_present\",\n \"id\" : 114,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_mpls6\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 198,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.mpls.setInvalid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_eth_type5\", \"value\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_ip_eth_type10\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 200,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.eth_type.value = fabric_md.bridged\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.egress_next.set_mpls\",\n \"id\" : 115,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_mpls6\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 205,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.mpls.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_mpls6\", \"label\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_mpls_label2\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 206,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.mpls.label = fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_mpls6\", \"tc\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 207,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.mpls.tc = 3w0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_mpls6\", \"bos\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 208,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.mpls.bos = 1w1\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_mpls6\", \"ttl\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_mpls_ttl8\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 209,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.mpls.ttl = fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_eth_type5\", \"value\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x8847\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 112,\n \"column\" : 31,\n \"source_fragment\" : \"0x8847; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.egress_next.push_vlan\",\n \"id\" : 116,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_vlan_tag4\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 217,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.vlan_tag.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_vlan_tag4\", \"eth_type\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x8100\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 111,\n \"column\" : 31,\n \"source_fragment\" : \"0x8100; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_vlan_tag4\", \"vlan_id\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_vlan_id6\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 221,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.vlan_tag.vlan_id = fabric_md.bridged\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.egress_next.pop_vlan\",\n \"id\" : 117,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_vlan_tag4\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 249,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.vlan_tag.setInvalid()\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.egress_next.drop\",\n \"id\" : 118,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 254,\n \"column\" : 17,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_drop_reason49\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x82\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 257,\n \"column\" : 35,\n \"source_fragment\" : \"130, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.dscp_rewriter.rewrite\",\n \"id\" : 119,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"FabricEgress.dscp_rewriter.clear\",\n \"id\" : 120,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"dscp_rewriter_tmp_dscp\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 198,\n \"column\" : 8,\n \"source_fragment\" : \"tmp_dscp = 0\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.upf.load_tunnel_params\",\n \"id\" : 121,\n \"runtime_data\" : [\n {\n \"name\" : \"tunnel_src_port\",\n \"bitwidth\" : 16\n },\n {\n \"name\" : \"tunnel_src_addr\",\n \"bitwidth\" : 32\n },\n {\n \"name\" : \"tunnel_dst_addr\",\n \"bitwidth\" : 32\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"src_addr\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 1\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 486,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.src_addr = tunnel_src_addr\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"dst_addr\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 2\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 487,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.dst_addr = tunnel_dst_addr\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_udp10\", \"sport\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 488,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.udp.sport = tunnel_src_port\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.upf.gtpu_only\",\n \"id\" : 122,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_ipv418\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 551,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.inner_ipv4.setValid()\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_ipv418\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_ipv47\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 552,\n \"column\" : 23,\n \"source_fragment\" : \"= hdr.ipv4; ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_udp10\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 553,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.udp.setValid()\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu12\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 554,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"version\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 506,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.version = 4w4\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ihl\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x05\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 507,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.ihl = 4w5\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"dscp\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 508,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.dscp = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ecn\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 509,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.ecn = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"identification\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x1513\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 511,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.identification = 0x1513\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"flags\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 512,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.flags = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"frag_offset\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 513,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.frag_offset = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ttl\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x40\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 150,\n \"column\" : 32,\n \"source_fragment\" : \"64; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"protocol\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x11\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 134,\n \"column\" : 25,\n \"source_fragment\" : \"17; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_udp10\", \"dport\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0868\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 86,\n \"column\" : 30,\n \"source_fragment\" : \"2152; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"version\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 87,\n \"column\" : 22,\n \"source_fragment\" : \"3w1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"pt\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 89,\n \"column\" : 37,\n \"source_fragment\" : \"1w1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"spare\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 527,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.spare = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"seq_flag\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 529,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.seq_flag = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"npdu_flag\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 530,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.npdu_flag = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"msgtype\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 88,\n \"column\" : 25,\n \"source_fragment\" : \"0xff; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"teid\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_upf_teid19\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 533,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.teid = fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_options13\", \"seq_num\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 535,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_options.seq_num = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_options13\", \"n_pdu_num\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 536,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_options.n_pdu_num = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_options13\", \"next_ext\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x85\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 91,\n \"column\" : 33,\n \"source_fragment\" : \"0x85; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_ext_psc14\", \"len\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 94,\n \"column\" : 32,\n \"source_fragment\" : \"8w1; // 1*4-octets ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_ext_psc14\", \"type\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 92,\n \"column\" : 36,\n \"source_fragment\" : \"4w0; // Downlink ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_ext_psc14\", \"spare0\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 541,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_ext_psc.spare0 = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_ext_psc14\", \"ppp\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 542,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_ext_psc.ppp = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_ext_psc14\", \"rqi\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 543,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_ext_psc.rqi = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_ext_psc14\", \"next_ext\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 90,\n \"column\" : 34,\n \"source_fragment\" : \"0x0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"total_len\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0024\"\n },\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"total_len\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 563,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.total_len = 20 + 8 + 8 ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_udp10\", \"len\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0010\"\n },\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"total_len\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 565,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.udp.len = 8 + 8 ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"msglen\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"total_len\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 567,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.msglen = hdr.inner_ipv4.total_len\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"encap_presence\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 81,\n \"column\" : 16,\n \"source_fragment\" : \"0x1, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.upf.gtpu_with_psc\",\n \"id\" : 123,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu_options13\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 577,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_options.setValid()\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu_ext_psc14\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 578,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_ext_psc.setValid()\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_ipv418\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 551,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.inner_ipv4.setValid()\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_ipv418\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_ipv47\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 552,\n \"column\" : 23,\n \"source_fragment\" : \"= hdr.ipv4; ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_udp10\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 553,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.udp.setValid()\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu12\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 554,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"version\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 506,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.version = 4w4\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ihl\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x05\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 507,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.ihl = 4w5\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"dscp\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 508,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.dscp = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ecn\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 509,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.ecn = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"identification\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x1513\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 511,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.identification = 0x1513\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"flags\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 512,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.flags = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"frag_offset\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 513,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.frag_offset = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ttl\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x40\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 150,\n \"column\" : 32,\n \"source_fragment\" : \"64; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"protocol\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x11\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 134,\n \"column\" : 25,\n \"source_fragment\" : \"17; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_udp10\", \"dport\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0868\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 86,\n \"column\" : 30,\n \"source_fragment\" : \"2152; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"version\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 87,\n \"column\" : 22,\n \"source_fragment\" : \"3w1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"pt\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 89,\n \"column\" : 37,\n \"source_fragment\" : \"1w1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"spare\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 527,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.spare = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"seq_flag\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 529,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.seq_flag = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"npdu_flag\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 530,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.npdu_flag = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"msgtype\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 88,\n \"column\" : 25,\n \"source_fragment\" : \"0xff; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"teid\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_upf_teid19\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 533,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.teid = fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_options13\", \"seq_num\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 535,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_options.seq_num = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_options13\", \"n_pdu_num\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 536,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_options.n_pdu_num = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_options13\", \"next_ext\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x85\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 91,\n \"column\" : 33,\n \"source_fragment\" : \"0x85; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_ext_psc14\", \"len\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 94,\n \"column\" : 32,\n \"source_fragment\" : \"8w1; // 1*4-octets ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_ext_psc14\", \"type\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 92,\n \"column\" : 36,\n \"source_fragment\" : \"4w0; // Downlink ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_ext_psc14\", \"spare0\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 541,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_ext_psc.spare0 = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_ext_psc14\", \"ppp\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 542,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_ext_psc.ppp = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_ext_psc14\", \"rqi\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 543,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_ext_psc.rqi = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_ext_psc14\", \"next_ext\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 90,\n \"column\" : 34,\n \"source_fragment\" : \"0x0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"total_len\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x002c\"\n },\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"total_len\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 580,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.ipv4.total_len = 20 + 8 + 8 ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_udp10\", \"len\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0018\"\n },\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"total_len\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 583,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.udp.len = 8 + 8 ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"msglen\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0008\"\n },\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"total_len\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 586,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.msglen = 4 + 4 ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"ex_flag\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 588,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu.ex_flag = 1\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu_ext_psc14\", \"qfi\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_upf_qfi15\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 589,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.gtpu_ext_psc.qfi = fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"encap_presence\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 82,\n \"column\" : 20,\n \"source_fragment\" : \"0x2, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.parser_emulator.parse_int_ingress_drop\",\n \"id\" : 124,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ethernet\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 20,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ethernet.setValid()\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_eth_type\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 25,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_eth_type.setValid()\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ipv4\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 37,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"version\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 38,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.version = 4w4\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"ihl\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x05\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 39,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.ihl = 4w5\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"dscp\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 40,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.dscp = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"ecn\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 41,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.ecn = 2w0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"flags\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 44,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.flags = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"frag_offset\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 45,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.frag_offset = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"ttl\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x40\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 150,\n \"column\" : 32,\n \"source_fragment\" : \"64; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"protocol\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x11\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 134,\n \"column\" : 25,\n \"source_fragment\" : \"17; ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_udp\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 53,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_udp.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_udp\", \"sport\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 54,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_udp.sport = 0\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_fixed_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 60,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"ver\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 61,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.ver = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"nproto\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 203,\n \"column\" : 52,\n \"source_fragment\" : \"2; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"rsvd\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 66,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.rsvd = 0\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_common_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 71,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.setValid()\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_int_report_md39\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 79,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"ip_eth_type\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0800\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 114,\n \"column\" : 31,\n \"source_fragment\" : \"0x0800; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"report_type\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 221,\n \"column\" : 45,\n \"source_fragment\" : \"4; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"mirror_type\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 178,\n \"column\" : 14,\n \"source_fragment\" : \"0, ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_drop_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 85,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.drop_report_header.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"bmd_type\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 169,\n \"column\" : 23,\n \"source_fragment\" : \"4, ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"encap_presence\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_encap_presence7\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 93,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.encap_presence = fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"flow_hash\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_inner_hash1\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 94,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.flow_hash = fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_drop_report_header\", \"drop_reason\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_int_bmd_drop_reason23\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 97,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.drop_report_header.drop_reason = fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"ig_tstamp\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_ig_tstamp9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 99,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.ig_tstamp = fabric_md.bridged.base.ig_tstamp[31:0]\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_common_report_header\", \"ig_port\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_ig_port3\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 101,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.ig_port = fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_common_report_header\", \"eg_port\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 102,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.eg_port = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_common_report_header\", \"queue_id\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 103,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.queue_id = 0\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.parser_emulator.parse_int_ingress_drop\",\n \"id\" : 125,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ethernet\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 20,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ethernet.setValid()\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_eth_type\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 25,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_eth_type.setValid()\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ipv4\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 37,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"version\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 38,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.version = 4w4\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"ihl\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x05\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 39,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.ihl = 4w5\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"dscp\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 40,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.dscp = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"ecn\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 41,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.ecn = 2w0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"flags\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 44,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.flags = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"frag_offset\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 45,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.frag_offset = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"ttl\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x40\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 150,\n \"column\" : 32,\n \"source_fragment\" : \"64; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"protocol\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x11\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 134,\n \"column\" : 25,\n \"source_fragment\" : \"17; ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_udp\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 53,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_udp.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_udp\", \"sport\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 54,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_udp.sport = 0\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_fixed_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 60,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"ver\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 61,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.ver = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"nproto\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 203,\n \"column\" : 52,\n \"source_fragment\" : \"2; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"rsvd\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 66,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.rsvd = 0\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_common_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 71,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.setValid()\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_int_report_md39\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 79,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"ip_eth_type\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0800\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 114,\n \"column\" : 31,\n \"source_fragment\" : \"0x0800; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"report_type\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 221,\n \"column\" : 45,\n \"source_fragment\" : \"4; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"mirror_type\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 178,\n \"column\" : 14,\n \"source_fragment\" : \"0, ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_drop_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 85,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.drop_report_header.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"bmd_type\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 169,\n \"column\" : 23,\n \"source_fragment\" : \"4, ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"encap_presence\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_encap_presence7\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 93,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.encap_presence = fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"flow_hash\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_inner_hash1\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 94,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.flow_hash = fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_drop_report_header\", \"drop_reason\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_int_bmd_drop_reason23\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 97,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.drop_report_header.drop_reason = fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"ig_tstamp\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_ig_tstamp9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 99,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.ig_tstamp = fabric_md.bridged.base.ig_tstamp[31:0]\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_common_report_header\", \"ig_port\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_ig_port3\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 101,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.ig_port = fabric_md.bridged\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_common_report_header\", \"eg_port\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 102,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.eg_port = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_common_report_header\", \"queue_id\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 103,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.queue_id = 0\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.parser_emulator.parse_int_report_mirror\",\n \"id\" : 126,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ethernet\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 20,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ethernet.setValid()\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_eth_type\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 25,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_eth_type.setValid()\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ipv4\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 37,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"version\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 38,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.version = 4w4\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"ihl\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x05\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 39,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.ihl = 4w5\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"dscp\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 40,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.dscp = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"ecn\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 41,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.ecn = 2w0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"flags\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 44,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.flags = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"frag_offset\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 45,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.frag_offset = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"ttl\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x40\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 150,\n \"column\" : 32,\n \"source_fragment\" : \"64; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"protocol\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x11\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 134,\n \"column\" : 25,\n \"source_fragment\" : \"17; ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_udp\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 53,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_udp.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_udp\", \"sport\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 54,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_udp.sport = 0\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_fixed_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 60,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"ver\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 61,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.ver = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"nproto\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 203,\n \"column\" : 52,\n \"source_fragment\" : \"2; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"rsvd\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 66,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.rsvd = 0\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_common_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 71,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_bmd_type0\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"bmd_type\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 110,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.bmd_type = fabric_md.int_report_md.bmd_type\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_vlan_id6\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0ffe\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 147,\n \"column\" : 34,\n \"source_fragment\" : \"12w4094; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_mpls_label2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x000000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 112,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.base.mpls_label = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_upf_skip_upf17\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 114,\n \"column\" : 12,\n \"source_fragment\" : \"fabric_md.bridged.upf.skip_upf = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"ig_tstamp\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"ig_tstamp\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 118,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.ig_tstamp = fabric_md.int_report_md.ig_tstamp\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_common_report_header\", \"ig_port\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"ig_port\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 121,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.ig_port = fabric_md.int_report_md.ig_port\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_common_report_header\", \"eg_port\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"eg_port\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 122,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.eg_port = fabric_md.int_report_md.eg_port\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_common_report_header\", \"queue_id\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"queue_id\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 123,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.queue_id = fabric_md.int_report_md.queue_id\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_local_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 126,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.local_report_header.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_local_report_header\", \"queue_occupancy\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"queue_occupancy\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 127,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.local_report_header.queue_occupancy = fabric_md.int_report_md.queue_occupancy\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_local_report_header\", \"eg_tstamp\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"eg_tstamp\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 128,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.local_report_header.eg_tstamp = fabric_md.int_report_md.eg_tstamp\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.parser_emulator.parse_int_report_mirror\",\n \"id\" : 127,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ethernet\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 20,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ethernet.setValid()\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_eth_type\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 25,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_eth_type.setValid()\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ipv4\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 37,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"version\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 38,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.version = 4w4\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"ihl\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x05\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 39,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.ihl = 4w5\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"dscp\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 40,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.dscp = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"ecn\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 41,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.ecn = 2w0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"flags\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 44,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.flags = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"frag_offset\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 45,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.frag_offset = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"ttl\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x40\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 150,\n \"column\" : 32,\n \"source_fragment\" : \"64; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_ipv4\", \"protocol\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x11\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 134,\n \"column\" : 25,\n \"source_fragment\" : \"17; ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_udp\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 53,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_udp.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_udp\", \"sport\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 54,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_udp.sport = 0\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_fixed_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 60,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"ver\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 61,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.ver = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"nproto\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 203,\n \"column\" : 52,\n \"source_fragment\" : \"2; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"rsvd\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 66,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.rsvd = 0\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_common_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 71,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_bmd_type0\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"bmd_type\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 110,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.bmd_type = fabric_md.int_report_md.bmd_type\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_vlan_id6\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0ffe\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 147,\n \"column\" : 34,\n \"source_fragment\" : \"12w4094; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_mpls_label2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x000000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 112,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.bridged.base.mpls_label = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_upf_skip_upf17\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 114,\n \"column\" : 12,\n \"source_fragment\" : \"fabric_md.bridged.upf.skip_upf = true\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_report_fixed_header\", \"ig_tstamp\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"ig_tstamp\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 118,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.ig_tstamp = fabric_md.int_report_md.ig_tstamp\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_common_report_header\", \"ig_port\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"ig_port\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 121,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.ig_port = fabric_md.int_report_md.ig_port\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_common_report_header\", \"eg_port\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"eg_port\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 122,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.eg_port = fabric_md.int_report_md.eg_port\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_common_report_header\", \"queue_id\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"queue_id\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 123,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.queue_id = fabric_md.int_report_md.queue_id\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_local_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 126,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.local_report_header.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_local_report_header\", \"queue_occupancy\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"queue_occupancy\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 127,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.local_report_header.queue_occupancy = fabric_md.int_report_md.queue_occupancy\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"parser_emulator_hdr_local_report_header\", \"eg_tstamp\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_int_report_md39\", \"eg_tstamp\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 128,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.local_report_header.eg_tstamp = fabric_md.int_report_md.eg_tstamp\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.int_egress.check_quota\",\n \"id\" : 128,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"FabricEgress.int_egress.reset_quota\",\n \"id\" : 129,\n \"runtime_data\" : [],\n \"primitives\" : []\n },\n {\n \"name\" : \"FabricEgress.int_egress.set_config\",\n \"id\" : 130,\n \"runtime_data\" : [\n {\n \"name\" : \"hop_latency_mask\",\n \"bitwidth\" : 32\n },\n {\n \"name\" : \"timestamp_mask\",\n \"bitwidth\" : 48\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_md\", \"hop_latency\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_md\", \"hop_latency\"]\n },\n \"right\" : {\n \"type\" : \"local\",\n \"value\" : 0\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 179,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_md.hop_latency = fabric_md.int_md.hop_latency & hop_latency_mask\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_md\", \"timestamp\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_md\", \"timestamp\"]\n },\n \"right\" : {\n \"type\" : \"local\",\n \"value\" : 1\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 180,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_md.timestamp = fabric_md.int_md.timestamp & timestamp_mask\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.int_egress.do_local_report_encap\",\n \"id\" : 131,\n \"runtime_data\" : [\n {\n \"name\" : \"src_ip\",\n \"bitwidth\" : 32\n },\n {\n \"name\" : \"mon_ip\",\n \"bitwidth\" : 32\n },\n {\n \"name\" : \"mon_port\",\n \"bitwidth\" : 16\n },\n {\n \"name\" : \"switch_id\",\n \"bitwidth\" : 32\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"modify_field_rng_uniform\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_ipv4\", \"identification\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 195,\n \"column\" : 8,\n \"source_fragment\" : \"random(hdr.report_ipv4.identification, 0, 0xffff)\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_ipv4\", \"src_addr\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 197,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.src_addr = src_ip; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_ipv4\", \"dst_addr\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 1\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 198,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.dst_addr = mon_ip; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_udp\", \"dport\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 2\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 199,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_udp.dport = mon_port; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_32\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"hw_id\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 200,\n \"column\" : 23,\n \"source_fragment\" : \"(bit<32>)hdr.report_fixed_header.hw_id\"\n }\n },\n {\n \"op\" : \"register_read\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n },\n {\n \"type\" : \"register_array\",\n \"value\" : \"FabricEgress.int_egress.seq_number\"\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_32\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 143,\n \"column\" : 8,\n \"source_fragment\" : \"seq_number.read(reg, seq_number_idx)\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000001\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 144,\n \"column\" : 8,\n \"source_fragment\" : \"reg = reg + 1\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_33\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"hw_id\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 200,\n \"column\" : 23,\n \"source_fragment\" : \"(bit<32>)hdr.report_fixed_header.hw_id\"\n }\n },\n {\n \"op\" : \"register_write\",\n \"parameters\" : [\n {\n \"type\" : \"register_array\",\n \"value\" : \"FabricEgress.int_egress.seq_number\"\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_33\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 146,\n \"column\" : 8,\n \"source_fragment\" : \"seq_number.write(seq_number_idx, reg)\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"seq_no\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n }\n ]\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"dqf\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"report_type\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 201,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.dqf = fabric_md.int_report_md.report_type\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"switch_id\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 3\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 202,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.switch_id = switch_id; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"pad1\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 203,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.pad1 = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"pad2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 204,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.pad2 = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"pad3\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 205,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.pad3 = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_eth_type\", \"value\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"ip_eth_type\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 207,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.eth_type.value = fabric_md.int_report_md.ip_eth_type\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._int_mirror_type3\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 178,\n \"column\" : 14,\n \"source_fragment\" : \"0, ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_eth_type\", \"value\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xbf04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 125,\n \"column\" : 39,\n \"source_fragment\" : \"0xBF04; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"nproto\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 203,\n \"column\" : 52,\n \"source_fragment\" : \"2; ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_local_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 218,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.local_report_header.setValid()\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.int_egress.do_local_report_encap_mpls\",\n \"id\" : 132,\n \"runtime_data\" : [\n {\n \"name\" : \"src_ip\",\n \"bitwidth\" : 32\n },\n {\n \"name\" : \"mon_ip\",\n \"bitwidth\" : 32\n },\n {\n \"name\" : \"mon_port\",\n \"bitwidth\" : 16\n },\n {\n \"name\" : \"mon_label\",\n \"bitwidth\" : 20\n },\n {\n \"name\" : \"switch_id\",\n \"bitwidth\" : 32\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"modify_field_rng_uniform\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_ipv4\", \"identification\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 195,\n \"column\" : 8,\n \"source_fragment\" : \"random(hdr.report_ipv4.identification, 0, 0xffff)\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_ipv4\", \"src_addr\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 197,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.src_addr = src_ip; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_ipv4\", \"dst_addr\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 1\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 198,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.dst_addr = mon_ip; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_udp\", \"dport\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 2\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 199,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_udp.dport = mon_port; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_34\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"hw_id\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 200,\n \"column\" : 23,\n \"source_fragment\" : \"(bit<32>)hdr.report_fixed_header.hw_id\"\n }\n },\n {\n \"op\" : \"register_read\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n },\n {\n \"type\" : \"register_array\",\n \"value\" : \"FabricEgress.int_egress.seq_number\"\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_34\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 143,\n \"column\" : 8,\n \"source_fragment\" : \"seq_number.read(reg, seq_number_idx)\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000001\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 144,\n \"column\" : 8,\n \"source_fragment\" : \"reg = reg + 1\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_35\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"hw_id\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 200,\n \"column\" : 23,\n \"source_fragment\" : \"(bit<32>)hdr.report_fixed_header.hw_id\"\n }\n },\n {\n \"op\" : \"register_write\",\n \"parameters\" : [\n {\n \"type\" : \"register_array\",\n \"value\" : \"FabricEgress.int_egress.seq_number\"\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_35\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 146,\n \"column\" : 8,\n \"source_fragment\" : \"seq_number.write(seq_number_idx, reg)\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"seq_no\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n }\n ]\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"dqf\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"report_type\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 201,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.dqf = fabric_md.int_report_md.report_type\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"switch_id\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 4\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 202,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.switch_id = switch_id; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"pad1\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 203,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.pad1 = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"pad2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 204,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.pad2 = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"pad3\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 205,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.pad3 = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_eth_type\", \"value\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"ip_eth_type\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 207,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.eth_type.value = fabric_md.int_report_md.ip_eth_type\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._int_mirror_type3\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 178,\n \"column\" : 14,\n \"source_fragment\" : \"0, ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_eth_type\", \"value\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xbf04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 125,\n \"column\" : 39,\n \"source_fragment\" : \"0xBF04; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"nproto\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 203,\n \"column\" : 52,\n \"source_fragment\" : \"2; ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_local_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 218,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.local_report_header.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_eth_type\", \"value\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xbf05\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 126,\n \"column\" : 39,\n \"source_fragment\" : \"0xBF05; ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_report_mpls\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 226,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_mpls.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_mpls\", \"tc\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 227,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_mpls.tc = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_mpls\", \"bos\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 228,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_mpls.bos = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_mpls\", \"ttl\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x40\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 149,\n \"column\" : 32,\n \"source_fragment\" : \"64; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_mpls\", \"label\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 3\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 230,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_mpls.label = mon_label\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.int_egress.do_drop_report_encap\",\n \"id\" : 133,\n \"runtime_data\" : [\n {\n \"name\" : \"src_ip\",\n \"bitwidth\" : 32\n },\n {\n \"name\" : \"mon_ip\",\n \"bitwidth\" : 32\n },\n {\n \"name\" : \"mon_port\",\n \"bitwidth\" : 16\n },\n {\n \"name\" : \"switch_id\",\n \"bitwidth\" : 32\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"modify_field_rng_uniform\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_ipv4\", \"identification\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 195,\n \"column\" : 8,\n \"source_fragment\" : \"random(hdr.report_ipv4.identification, 0, 0xffff)\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_ipv4\", \"src_addr\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 197,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.src_addr = src_ip; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_ipv4\", \"dst_addr\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 1\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 198,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.dst_addr = mon_ip; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_udp\", \"dport\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 2\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 199,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_udp.dport = mon_port; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_36\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"hw_id\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 200,\n \"column\" : 23,\n \"source_fragment\" : \"(bit<32>)hdr.report_fixed_header.hw_id\"\n }\n },\n {\n \"op\" : \"register_read\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n },\n {\n \"type\" : \"register_array\",\n \"value\" : \"FabricEgress.int_egress.seq_number\"\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_36\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 143,\n \"column\" : 8,\n \"source_fragment\" : \"seq_number.read(reg, seq_number_idx)\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000001\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 144,\n \"column\" : 8,\n \"source_fragment\" : \"reg = reg + 1\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_37\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"hw_id\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 200,\n \"column\" : 23,\n \"source_fragment\" : \"(bit<32>)hdr.report_fixed_header.hw_id\"\n }\n },\n {\n \"op\" : \"register_write\",\n \"parameters\" : [\n {\n \"type\" : \"register_array\",\n \"value\" : \"FabricEgress.int_egress.seq_number\"\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_37\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 146,\n \"column\" : 8,\n \"source_fragment\" : \"seq_number.write(seq_number_idx, reg)\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"seq_no\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n }\n ]\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"dqf\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"report_type\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 201,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.dqf = fabric_md.int_report_md.report_type\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"switch_id\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 3\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 202,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.switch_id = switch_id; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"pad1\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 203,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.pad1 = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"pad2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 204,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.pad2 = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"pad3\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 205,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.pad3 = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_eth_type\", \"value\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"ip_eth_type\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 207,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.eth_type.value = fabric_md.int_report_md.ip_eth_type\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._int_mirror_type3\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 178,\n \"column\" : 14,\n \"source_fragment\" : \"0, ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_eth_type\", \"value\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xbf04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 125,\n \"column\" : 39,\n \"source_fragment\" : \"0xBF04; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"nproto\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 202,\n \"column\" : 44,\n \"source_fragment\" : \"1; ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_drop_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 238,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.drop_report_header.setValid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_local_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 241,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.local_report_header.setInvalid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_drop_report_header\", \"drop_reason\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_bridged\", \"_int_bmd_drop_reason23\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 243,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.drop_report_header.drop_reason =\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.int_egress.do_drop_report_encap_mpls\",\n \"id\" : 134,\n \"runtime_data\" : [\n {\n \"name\" : \"src_ip\",\n \"bitwidth\" : 32\n },\n {\n \"name\" : \"mon_ip\",\n \"bitwidth\" : 32\n },\n {\n \"name\" : \"mon_port\",\n \"bitwidth\" : 16\n },\n {\n \"name\" : \"mon_label\",\n \"bitwidth\" : 20\n },\n {\n \"name\" : \"switch_id\",\n \"bitwidth\" : 32\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"modify_field_rng_uniform\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_ipv4\", \"identification\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 195,\n \"column\" : 8,\n \"source_fragment\" : \"random(hdr.report_ipv4.identification, 0, 0xffff)\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_ipv4\", \"src_addr\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 197,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.src_addr = src_ip; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_ipv4\", \"dst_addr\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 1\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 198,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_ipv4.dst_addr = mon_ip; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_udp\", \"dport\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 2\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 199,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_udp.dport = mon_port; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_38\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"hw_id\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 200,\n \"column\" : 23,\n \"source_fragment\" : \"(bit<32>)hdr.report_fixed_header.hw_id\"\n }\n },\n {\n \"op\" : \"register_read\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n },\n {\n \"type\" : \"register_array\",\n \"value\" : \"FabricEgress.int_egress.seq_number\"\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_38\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 143,\n \"column\" : 8,\n \"source_fragment\" : \"seq_number.read(reg, seq_number_idx)\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000001\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 144,\n \"column\" : 8,\n \"source_fragment\" : \"reg = reg + 1\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_39\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"hw_id\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 200,\n \"column\" : 23,\n \"source_fragment\" : \"(bit<32>)hdr.report_fixed_header.hw_id\"\n }\n },\n {\n \"op\" : \"register_write\",\n \"parameters\" : [\n {\n \"type\" : \"register_array\",\n \"value\" : \"FabricEgress.int_egress.seq_number\"\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_39\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 146,\n \"column\" : 8,\n \"source_fragment\" : \"seq_number.write(seq_number_idx, reg)\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"seq_no\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_reg\"]\n }\n ]\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"dqf\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"report_type\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 201,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.dqf = fabric_md.int_report_md.report_type\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"switch_id\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 4\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 202,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.switch_id = switch_id; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"pad1\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 203,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.pad1 = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"pad2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 204,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.pad2 = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_common_report_header\", \"pad3\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 205,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.common_report_header.pad3 = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_eth_type\", \"value\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"ip_eth_type\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 207,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.eth_type.value = fabric_md.int_report_md.ip_eth_type\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._int_mirror_type3\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 178,\n \"column\" : 14,\n \"source_fragment\" : \"0, ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_eth_type\", \"value\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xbf04\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 125,\n \"column\" : 39,\n \"source_fragment\" : \"0xBF04; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"nproto\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 202,\n \"column\" : 44,\n \"source_fragment\" : \"1; ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_drop_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 238,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.drop_report_header.setValid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_local_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 241,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.local_report_header.setInvalid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_drop_report_header\", \"drop_reason\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_bridged\", \"_int_bmd_drop_reason23\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 243,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.drop_report_header.drop_reason =\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_eth_type\", \"value\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0xbf05\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 126,\n \"column\" : 39,\n \"source_fragment\" : \"0xBF05; ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_report_mpls\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 251,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_mpls.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_mpls\", \"tc\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 252,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_mpls.tc = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_mpls\", \"bos\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 253,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_mpls.bos = 0\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_mpls\", \"ttl\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x40\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 149,\n \"column\" : 32,\n \"source_fragment\" : \"64; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_mpls\", \"label\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 3\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 256,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_mpls.label = mon_label\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.int_egress.init_int_metadata\",\n \"id\" : 135,\n \"runtime_data\" : [\n {\n \"name\" : \"report_type\",\n \"bitwidth\" : 3\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_bridged\", \"_int_bmd_mirror_session_id22\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01fa\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 208,\n \"column\" : 43,\n \"source_fragment\" : \"0x1FA; ...\"\n }\n },\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_fabric_md_int_report_md\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 293,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._int_mirror_type3\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 179,\n \"column\" : 17,\n \"source_fragment\" : \"1, ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"bmd_type\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 167,\n \"column\" : 20,\n \"source_fragment\" : \"2, ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"mirror_type\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 179,\n \"column\" : 17,\n \"source_fragment\" : \"1, ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"ig_port\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_bridged\", \"_base_ig_port3\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 299,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.ig_port =\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"eg_port\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_port\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 300,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.eg_port = (PortId_t)standard_md.egress_port\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"queue_id\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_egress_qid\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 301,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.queue_id = egress_qid\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"queue_occupancy\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"deq_qdepth\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 302,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.queue_occupancy = standard_md.deq_qdepth\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"ig_tstamp\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_bridged\", \"_base_ig_tstamp9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 303,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.ig_tstamp = fabric_md.bridged.base.ig_tstamp[31:0]\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"eg_tstamp\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_global_timestamp\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 304,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.eg_tstamp = standard_md.egress_global_timestamp[31:0]\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"ip_eth_type\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_bridged\", \"_base_ip_eth_type10\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 305,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.ip_eth_type =\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"flow_hash\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_bridged\", \"_base_inner_hash1\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 306,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.flow_hash =\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"report_type\"]\n },\n {\n \"type\" : \"runtime_data\",\n \"value\" : 0\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 309,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_report_md.report_type = report_type\"\n }\n }\n ]\n },\n {\n \"name\" : \"FabricEgress.int_egress.adjust_ip_udp_len\",\n \"id\" : 136,\n \"runtime_data\" : [\n {\n \"name\" : \"adjust_ip\",\n \"bitwidth\" : 16\n },\n {\n \"name\" : \"adjust_udp\",\n \"bitwidth\" : 16\n }\n ],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"total_len\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_fabric_md_pkt_length\"]\n },\n \"right\" : {\n \"type\" : \"local\",\n \"value\" : 0\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 342,\n \"column\" : 8,\n \"source_fragment\" : \"hdr_v1model.ingress.ipv4.total_len = fabric_md.pkt_length + adjust_ip\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_udp10\", \"len\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_fabric_md_pkt_length\"]\n },\n \"right\" : {\n \"type\" : \"local\",\n \"value\" : 1\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 343,\n \"column\" : 8,\n \"source_fragment\" : \"hdr_v1model.ingress.udp.len = fabric_md.pkt_length + adjust_udp\"\n }\n }\n ]\n },\n {\n \"name\" : \"fabric_v1model136\",\n \"id\" : 137,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"exit\",\n \"parameters\" : [],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 136,\n \"column\" : 12,\n \"source_fragment\" : \"exit\"\n }\n }\n ]\n },\n {\n \"name\" : \"fabric_v1model133\",\n \"id\" : 138,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_cpu_port37\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 133,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.egress.cpu_port = 0\"\n }\n }\n ]\n },\n {\n \"name\" : \"int_tna_parser_emulator148\",\n \"id\" : 139,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_ipv47\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 148,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.ipv4.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_tcp9\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 149,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.tcp.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_udp10\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 150,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.udp.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_icmp11\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 151,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.icmp.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_vxlan15\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 153,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.vxlan.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_ethernet16\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 154,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.inner_ethernet.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_eth_type17\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 155,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.inner_eth_type.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu12\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 157,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.gtpu.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu_options13\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 158,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.gtpu_options.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu_ext_psc14\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 159,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.gtpu_ext_psc.setInvalid()\"\n }\n }\n ]\n },\n {\n \"name\" : \"int_tna_parser_emulator14\",\n \"id\" : 140,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_int_bmd_drop_reason23\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_drop_reason49\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 144,\n \"column\" : 12,\n \"source_fragment\" : \"fabric_md.egress.bridged.int_bmd.drop_reason = fabric_md\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_int_bmd_report_type21\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_report_type47\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 145,\n \"column\" : 12,\n \"source_fragment\" : \"fabric_md.egress.bridged.int_bmd.report_type = fabric_md\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ethernet\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_ethernet24\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_eth_type\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_eth_type25\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ipv4\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_ipv427\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_udp\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_udp28\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_fixed_header\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_fixed_header29\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_common_report_header\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_common_report_header30\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_local_report_header\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_local_report_header31\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_drop_report_header\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_drop_report_header32\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_is_int_recirc45\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 134,\n \"column\" : 32,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_vlan_tag4\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 140,\n \"column\" : 8,\n \"source_fragment\" : \"hdr_v1model.ingress.vlan_tag.setInvalid()\"\n }\n }\n ]\n },\n {\n \"name\" : \"int_tna_parser_emulator166\",\n \"id\" : 141,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"recirculate\",\n \"parameters\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 166,\n \"column\" : 12,\n \"source_fragment\" : \"recirculate_preserving_field_list(NO_PRESERVATION)\"\n }\n }\n ]\n },\n {\n \"name\" : \"int_tna_parser_emulator169\",\n \"id\" : 142,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"recirculate\",\n \"parameters\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x1\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 169,\n \"column\" : 12,\n \"source_fragment\" : \"recirculate_preserving_field_list(PRESERVE_INT_MD)\"\n }\n }\n ]\n },\n {\n \"name\" : \"int_tna_parser_emulator173\",\n \"id\" : 143,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_ethernet24\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ethernet\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_eth_type25\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_eth_type\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_ipv427\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ipv4\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_udp28\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_udp\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_fixed_header29\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_fixed_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_common_report_header30\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_common_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_local_report_header31\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_local_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_drop_report_header32\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_drop_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"int_tna_parser_emulator148_0\",\n \"id\" : 144,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_ipv47\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 148,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.ipv4.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_tcp9\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 149,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.tcp.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_udp10\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 150,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.udp.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_icmp11\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 151,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.icmp.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_vxlan15\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 153,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.vxlan.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_ethernet16\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 154,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.inner_ethernet.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_eth_type17\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 155,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.inner_eth_type.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu12\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 157,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.gtpu.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu_options13\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 158,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.gtpu_options.setInvalid()\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_gtpu_ext_psc14\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 159,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.gtpu_ext_psc.setInvalid()\"\n }\n }\n ]\n },\n {\n \"name\" : \"int_tna_parser_emulator14_0\",\n \"id\" : 145,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ethernet\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_ethernet24\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_eth_type\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_eth_type25\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ipv4\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_ipv427\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_udp\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_udp28\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_fixed_header\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_fixed_header29\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_common_report_header\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_common_report_header30\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_local_report_header\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_local_report_header31\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_drop_report_header\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_drop_report_header32\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_is_int_recirc45\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"bool\",\n \"value\" : true\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 134,\n \"column\" : 32,\n \"source_fragment\" : \"= true; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_vlan_tag4\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 140,\n \"column\" : 8,\n \"source_fragment\" : \"hdr_v1model.ingress.vlan_tag.setInvalid()\"\n }\n }\n ]\n },\n {\n \"name\" : \"int_tna_parser_emulator166_0\",\n \"id\" : 146,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"recirculate\",\n \"parameters\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x4\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 166,\n \"column\" : 12,\n \"source_fragment\" : \"recirculate_preserving_field_list(NO_PRESERVATION)\"\n }\n }\n ]\n },\n {\n \"name\" : \"int_tna_parser_emulator169_0\",\n \"id\" : 147,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"recirculate\",\n \"parameters\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x1\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 169,\n \"column\" : 12,\n \"source_fragment\" : \"recirculate_preserving_field_list(PRESERVE_INT_MD)\"\n }\n }\n ]\n },\n {\n \"name\" : \"int_tna_parser_emulator173_0\",\n \"id\" : 148,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_ethernet24\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ethernet\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_eth_type25\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_eth_type\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_ipv427\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_ipv4\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_udp28\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_udp\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_fixed_header29\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_report_fixed_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_common_report_header30\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_common_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_local_report_header31\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_local_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_drop_report_header32\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"parser_emulator_hdr_drop_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"packetio51\",\n \"id\" : 149,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_packet_in1\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 51,\n \"column\" : 12,\n \"source_fragment\" : \"hdr.packet_in.setValid()\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_packet_in1\", \"ingress_port\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_ingress_port50\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 52,\n \"column\" : 12,\n \"source_fragment\" : \"hdr.packet_in.ingress_port = preserved_ig_port; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_fake_ethernet2\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 53,\n \"column\" : 12,\n \"source_fragment\" : \"hdr.fake_ethernet.setInvalid()\"\n }\n },\n {\n \"op\" : \"exit\",\n \"parameters\" : [],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 54,\n \"column\" : 12,\n \"source_fragment\" : \"exit\"\n }\n }\n ]\n },\n {\n \"name\" : \"packetio60\",\n \"id\" : 150,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_pkt_length46\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"packet_length\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x0000ffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xfff2\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 60,\n \"column\" : 37,\n \"source_fragment\" : \"= (bit<16>)standard_md.packet_length - 14; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"next283\",\n \"id\" : 151,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_int_bmd_report_type21\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 219,\n \"column\" : 50,\n \"source_fragment\" : \"0; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 285,\n \"column\" : 21,\n \"source_fragment\" : \"= 1; ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"next325\",\n \"id\" : 152,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 325,\n \"column\" : 25,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_drop_reason49\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x83\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 258,\n \"column\" : 32,\n \"source_fragment\" : \"131, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"next323\",\n \"id\" : 153,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_mpls6\", \"ttl\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_mpls6\", \"ttl\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 323,\n \"column\" : 12,\n \"source_fragment\" : \"hdr.mpls.ttl = hdr.mpls.ttl - 1\"\n }\n }\n ]\n },\n {\n \"name\" : \"next333\",\n \"id\" : 154,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ttl\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ttl\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 333,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.ipv4.ttl = hdr.ipv4.ttl - 1\"\n }\n }\n ]\n },\n {\n \"name\" : \"next336\",\n \"id\" : 155,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 336,\n \"column\" : 29,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_drop_reason49\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x1a\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 247,\n \"column\" : 30,\n \"source_fragment\" : \"26, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"next343\",\n \"id\" : 156,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv68\", \"hop_limit\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"+\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv68\", \"hop_limit\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 343,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.ipv6.hop_limit = hdr.ipv6.hop_limit - 1\"\n }\n }\n ]\n },\n {\n \"name\" : \"next346\",\n \"id\" : 157,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 346,\n \"column\" : 29,\n \"source_fragment\" : \"= 1; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_drop_reason49\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x1a\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../shared/define.p4\",\n \"line\" : 247,\n \"column\" : 30,\n \"source_fragment\" : \"26, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"upf610\",\n \"id\" : 158,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_udp20\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 610,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.inner_udp.setValid()\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_udp20\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_udp10\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 611,\n \"column\" : 34,\n \"source_fragment\" : \"= hdr.udp; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_udp10\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 612,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.udp.setInvalid()\"\n }\n }\n ]\n },\n {\n \"name\" : \"upf615\",\n \"id\" : 159,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_tcp19\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 615,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.inner_tcp.setValid()\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_tcp19\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_tcp9\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 616,\n \"column\" : 34,\n \"source_fragment\" : \"= hdr.tcp; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_tcp9\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 617,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.tcp.setInvalid()\"\n }\n }\n ]\n },\n {\n \"name\" : \"upf620\",\n \"id\" : 160,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"add_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_icmp21\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 620,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.inner_icmp.setValid()\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_inner_icmp21\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_icmp11\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 621,\n \"column\" : 35,\n \"source_fragment\" : \"= hdr.icmp; ...\"\n }\n },\n {\n \"op\" : \"remove_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_ingress_icmp11\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 622,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.icmp.setInvalid()\"\n }\n }\n ]\n },\n {\n \"name\" : \"upf628\",\n \"id\" : 161,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_40\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_upf_upf_ctr_id14\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 628,\n \"column\" : 43,\n \"source_fragment\" : \"(bit<32>)fabric_md.bridged.upf.upf_ctr_id\"\n }\n },\n {\n \"op\" : \"count\",\n \"parameters\" : [\n {\n \"type\" : \"counter_array\",\n \"value\" : \"FabricEgress.upf.terminations_counter\"\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_40\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 628,\n \"column\" : 16,\n \"source_fragment\" : \"terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id)\"\n }\n }\n ]\n },\n {\n \"name\" : \"int128\",\n \"id\" : 162,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_report_eth_type\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_eth_type25\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 128,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_report_mpls\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_mpls26\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 128,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_report_ipv4\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_ipv427\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 128,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_report_udp\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_udp28\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 128,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_report_fixed_header\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_fixed_header29\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 128,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_common_report_header\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_common_report_header30\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 128,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_local_report_header\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_local_report_header31\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 128,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_drop_report_header\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_drop_report_header32\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 128,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_eth_type\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_eth_type35\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 128,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_fabric_md_bridged\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_bridged36\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 129,\n \"column\" : 4,\n \"source_fragment\" : \"fabric_egress_metadata_t fabric_md = fabric_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_fabric_md_int_report_md\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_int_report_md39\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 129,\n \"column\" : 4,\n \"source_fragment\" : \"fabric_egress_metadata_t fabric_md = fabric_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_md\", \"hop_latency\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_int_md_hop_latency40\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 129,\n \"column\" : 4,\n \"source_fragment\" : \"fabric_egress_metadata_t fabric_md = fabric_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_md\", \"timestamp\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_int_md_timestamp41\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 129,\n \"column\" : 4,\n \"source_fragment\" : \"fabric_egress_metadata_t fabric_md = fabric_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_md\", \"vlan_stripped\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_int_md_vlan_stripped42\"]\n }\n }\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 129,\n \"column\" : 4,\n \"source_fragment\" : \"fabric_egress_metadata_t fabric_md = fabric_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_md\", \"queue_report\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"b2d\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_int_md_queue_report43\"]\n }\n }\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 129,\n \"column\" : 4,\n \"source_fragment\" : \"fabric_egress_metadata_t fabric_md = fabric_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_fabric_md_pkt_length\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_pkt_length46\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 129,\n \"column\" : 4,\n \"source_fragment\" : \"fabric_egress_metadata_t fabric_md = fabric_v1model.egress; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"int_egress_egress_qid\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 135,\n \"column\" : 4,\n \"source_fragment\" : \"QueueId_t egress_qid = 0;\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_md\", \"hop_latency\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"-\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_global_timestamp\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_bridged\", \"_base_ig_tstamp9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 365,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_md.hop_latency = standard_md.egress_global_timestamp[31:0] - fabric_md.bridged.base.ig_tstamp[31:0]\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_md\", \"timestamp\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_global_timestamp\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 366,\n \"column\" : 8,\n \"source_fragment\" : \"fabric_md.int_md.timestamp = standard_md.egress_global_timestamp\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"key_0\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"-\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_global_timestamp\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_bridged\", \"_base_ig_tstamp9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x10\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 166,\n \"column\" : 12,\n \"source_fragment\" : \" fabric_md.int_md.hop_latency[31:16]: range @name(\\\\\\\"hop_latency_upper\\\\\\\");\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"key_1\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"-\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_global_timestamp\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_bridged\", \"_base_ig_tstamp9\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 167,\n \"column\" : 12,\n \"source_fragment\" : \" fabric_md.int_md.hop_latency[15:0]: range @name(\\\\\\\"hop_latency_lower\\\\\\\");\"\n }\n }\n ]\n },\n {\n \"name\" : \"int383\",\n \"id\" : 163,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_41\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_bridged\", \"_int_bmd_mirror_session_id22\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xffffffff\"\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 384,\n \"column\" : 20,\n \"source_fragment\" : \"(bit<32>)fabric_md.bridged.int_bmd.mirror_session_id\"\n }\n },\n {\n \"op\" : \"clone_egress_pkt_to_egress\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"tmp_41\"]\n },\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x1\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 383,\n \"column\" : 16,\n \"source_fragment\" : \"clone_preserving_field_list(CloneType.E2E, ...\"\n }\n }\n ]\n },\n {\n \"name\" : \"int373\",\n \"id\" : 164,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_hdr_report_fixed_header\", \"hw_id\"]\n },\n {\n \"type\" : \"expression\",\n \"value\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"|\",\n \"left\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \">>\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_spec\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x7\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01ff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x03\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x3f\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x07\"\n }\n }\n }\n }\n }\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 373,\n \"column\" : 8,\n \"source_fragment\" : \"hdr.report_fixed_header.hw_id = 4w0 ++ standard_md.egress_spec[8:7]\"\n }\n }\n ]\n },\n {\n \"name\" : \"slicing217\",\n \"id\" : 165,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"dscp\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"dscp_rewriter_tmp_dscp\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 217,\n \"column\" : 16,\n \"source_fragment\" : \"hdr.ipv4.dscp = tmp_dscp\"\n }\n }\n ]\n },\n {\n \"name\" : \"slicing189\",\n \"id\" : 166,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_bridged36\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_fabric_md_bridged\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 391,\n \"column\" : 30,\n \"source_fragment\" : \"= fabric_md; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_int_report_md39\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_fabric_md_int_report_md\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 391,\n \"column\" : 30,\n \"source_fragment\" : \"= fabric_md; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_int_md_hop_latency40\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_md\", \"hop_latency\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 391,\n \"column\" : 30,\n \"source_fragment\" : \"= fabric_md; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_int_md_timestamp41\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_md\", \"timestamp\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 391,\n \"column\" : 30,\n \"source_fragment\" : \"= fabric_md; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_eth_type25\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_report_eth_type\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 392,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_mpls26\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_report_mpls\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 392,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_ipv427\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_report_ipv4\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 392,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_udp28\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_report_udp\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 392,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_report_fixed_header29\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_report_fixed_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 392,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_common_report_header30\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_common_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 392,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_local_report_header31\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_local_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 392,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_drop_report_header32\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_drop_report_header\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 392,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign_header\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"_egress_eth_type35\"\n },\n {\n \"type\" : \"header\",\n \"value\" : \"int_egress_hdr_eth_type\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 392,\n \"column\" : 27,\n \"source_fragment\" : \"= hdr; ...\"\n }\n },\n {\n \"op\" : \"assign\",\n \"parameters\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"dscp_rewriter_tmp_dscp\"]\n },\n {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_slice_tc12\"]\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 189,\n \"column\" : 4,\n \"source_fragment\" : \"bit<6> tmp_dscp = fabric_md.bridged.base.slice_tc;\"\n }\n }\n ]\n },\n {\n \"name\" : \"fabric_v1model170\",\n \"id\" : 167,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"recirculate\",\n \"parameters\" : [\n {\n \"type\" : \"hexstr\",\n \"value\" : \"0x5\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 170,\n \"column\" : 12,\n \"source_fragment\" : \"recirculate_preserving_field_list(NO_PRESERVATION)\"\n }\n }\n ]\n },\n {\n \"name\" : \"fabric_v1model174\",\n \"id\" : 168,\n \"runtime_data\" : [],\n \"primitives\" : [\n {\n \"op\" : \"mark_to_drop\",\n \"parameters\" : [\n {\n \"type\" : \"header\",\n \"value\" : \"standard_metadata\"\n }\n ],\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 174,\n \"column\" : 12,\n \"source_fragment\" : \"mark_to_drop(standard_md)\"\n }\n }\n ]\n }\n ],\n \"pipelines\" : [\n {\n \"name\" : \"ingress\",\n \"id\" : 0,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 35,\n \"column\" : 8,\n \"source_fragment\" : \"FabricIngress\"\n },\n \"init_table\" : \"tbl_fabric_v1model61\",\n \"tables\" : [\n {\n \"name\" : \"tbl_fabric_v1model61\",\n \"id\" : 0,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 61,\n \"column\" : 8,\n \"source_fragment\" : \"mark_to_drop(standard_md)\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [73],\n \"actions\" : [\"fabric_v1model61\"],\n \"base_default_next\" : \"node_3\",\n \"next_tables\" : {\n \"fabric_v1model61\" : \"node_3\"\n },\n \"default_entry\" : {\n \"action_id\" : 73,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_fabric_v1model64\",\n \"id\" : 1,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 64,\n \"column\" : 12,\n \"source_fragment\" : \"exit\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [72],\n \"actions\" : [\"fabric_v1model64\"],\n \"base_default_next\" : \"node_5\",\n \"next_tables\" : {\n \"fabric_v1model64\" : \"node_5\"\n },\n \"default_entry\" : {\n \"action_id\" : 72,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_fabric_v1model70\",\n \"id\" : 2,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 70,\n \"column\" : 51,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [74],\n \"actions\" : [\"fabric_v1model70\"],\n \"base_default_next\" : \"tbl_lookup_md_init15\",\n \"next_tables\" : {\n \"fabric_v1model70\" : \"tbl_lookup_md_init15\"\n },\n \"default_entry\" : {\n \"action_id\" : 74,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_lookup_md_init15\",\n \"id\" : 3,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 15,\n \"column\" : 23,\n \"source_fragment\" : \"= hdr.ethernet.dst_addr; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [76],\n \"actions\" : [\"lookup_md_init15\"],\n \"base_default_next\" : \"node_8\",\n \"next_tables\" : {\n \"lookup_md_init15\" : \"node_8\"\n },\n \"default_entry\" : {\n \"action_id\" : 76,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_lookup_md_init21\",\n \"id\" : 4,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 21,\n \"column\" : 27,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [75],\n \"actions\" : [\"lookup_md_init21\"],\n \"base_default_next\" : \"tbl_lookup_md_init24\",\n \"next_tables\" : {\n \"lookup_md_init21\" : \"tbl_lookup_md_init24\"\n },\n \"default_entry\" : {\n \"action_id\" : 75,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_lookup_md_init24\",\n \"id\" : 5,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 24,\n \"column\" : 23,\n \"source_fragment\" : \"= false; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [85],\n \"actions\" : [\"lookup_md_init24\"],\n \"base_default_next\" : \"node_11\",\n \"next_tables\" : {\n \"lookup_md_init24\" : \"node_11\"\n },\n \"default_entry\" : {\n \"action_id\" : 85,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_lookup_md_init33\",\n \"id\" : 6,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 33,\n \"column\" : 27,\n \"source_fragment\" : \"= true; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [80],\n \"actions\" : [\"lookup_md_init33\"],\n \"base_default_next\" : \"node_13\",\n \"next_tables\" : {\n \"lookup_md_init33\" : \"node_13\"\n },\n \"default_entry\" : {\n \"action_id\" : 80,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_lookup_md_init38\",\n \"id\" : 7,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 38,\n \"column\" : 32,\n \"source_fragment\" : \"= hdr.inner_tcp.sport; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [77],\n \"actions\" : [\"lookup_md_init38\"],\n \"base_default_next\" : \"node_27\",\n \"next_tables\" : {\n \"lookup_md_init38\" : \"node_27\"\n },\n \"default_entry\" : {\n \"action_id\" : 77,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_lookup_md_init41\",\n \"id\" : 8,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 41,\n \"column\" : 32,\n \"source_fragment\" : \"= hdr.inner_udp.sport; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [78],\n \"actions\" : [\"lookup_md_init41\"],\n \"base_default_next\" : \"node_27\",\n \"next_tables\" : {\n \"lookup_md_init41\" : \"node_27\"\n },\n \"default_entry\" : {\n \"action_id\" : 78,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_lookup_md_init44\",\n \"id\" : 9,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 44,\n \"column\" : 33,\n \"source_fragment\" : \"= hdr.inner_icmp.icmp_type; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [79],\n \"actions\" : [\"lookup_md_init44\"],\n \"base_default_next\" : \"node_27\",\n \"next_tables\" : {\n \"lookup_md_init44\" : \"node_27\"\n },\n \"default_entry\" : {\n \"action_id\" : 79,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_lookup_md_init48\",\n \"id\" : 10,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 48,\n \"column\" : 27,\n \"source_fragment\" : \"= true; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [84],\n \"actions\" : [\"lookup_md_init48\"],\n \"base_default_next\" : \"node_21\",\n \"next_tables\" : {\n \"lookup_md_init48\" : \"node_21\"\n },\n \"default_entry\" : {\n \"action_id\" : 84,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_lookup_md_init53\",\n \"id\" : 11,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 53,\n \"column\" : 32,\n \"source_fragment\" : \"= hdr.tcp.sport; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [81],\n \"actions\" : [\"lookup_md_init53\"],\n \"base_default_next\" : \"node_27\",\n \"next_tables\" : {\n \"lookup_md_init53\" : \"node_27\"\n },\n \"default_entry\" : {\n \"action_id\" : 81,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_lookup_md_init56\",\n \"id\" : 12,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 56,\n \"column\" : 32,\n \"source_fragment\" : \"= hdr.udp.sport; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [82],\n \"actions\" : [\"lookup_md_init56\"],\n \"base_default_next\" : \"node_27\",\n \"next_tables\" : {\n \"lookup_md_init56\" : \"node_27\"\n },\n \"default_entry\" : {\n \"action_id\" : 82,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_lookup_md_init59\",\n \"id\" : 13,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 59,\n \"column\" : 33,\n \"source_fragment\" : \"= hdr.icmp.icmp_type; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [83],\n \"actions\" : [\"lookup_md_init59\"],\n \"base_default_next\" : \"node_27\",\n \"next_tables\" : {\n \"lookup_md_init59\" : \"node_27\"\n },\n \"default_entry\" : {\n \"action_id\" : 83,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_pkt_io_do_packet_out\",\n \"id\" : 14,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 25,\n \"column\" : 12,\n \"source_fragment\" : \"do_packet_out()\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [9],\n \"actions\" : [\"FabricIngress.pkt_io.do_packet_out\"],\n \"base_default_next\" : \"FabricIngress.int_watchlist.watchlist\",\n \"next_tables\" : {\n \"FabricIngress.pkt_io.do_packet_out\" : \"FabricIngress.int_watchlist.watchlist\"\n },\n \"default_entry\" : {\n \"action_id\" : 9,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.int_watchlist.watchlist\",\n \"id\" : 15,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 34,\n \"column\" : 10,\n \"source_fragment\" : \"watchlist\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"ipv4_valid\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_is_ipv410\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ipv4_src\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_src11\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ipv4_dst\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_dst12\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ip_proto\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_ip_proto13\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"range\",\n \"name\" : \"l4_sport\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_sport14\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"range\",\n \"name\" : \"l4_dport\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_dport15\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"range\",\n \"type\" : \"simple\",\n \"max_size\" : 64,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [68, 70, 69],\n \"actions\" : [\"FabricIngress.int_watchlist.mark_to_report\", \"FabricIngress.int_watchlist.no_report_collector\", \"FabricIngress.int_watchlist.no_report\"],\n \"base_default_next\" : \"FabricIngress.stats.flows\",\n \"next_tables\" : {\n \"FabricIngress.int_watchlist.mark_to_report\" : \"FabricIngress.stats.flows\",\n \"FabricIngress.int_watchlist.no_report_collector\" : \"FabricIngress.stats.flows\",\n \"FabricIngress.int_watchlist.no_report\" : \"FabricIngress.stats.flows\"\n },\n \"default_entry\" : {\n \"action_id\" : 69,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.stats.flows\",\n \"id\" : 16,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/stats.p4\",\n \"line\" : 21,\n \"column\" : 10,\n \"source_fragment\" : \"flows\"\n },\n \"key\" : [\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ipv4_src\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_src11\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ipv4_dst\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_dst12\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ip_proto\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_ip_proto13\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"l4_sport\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_sport14\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"l4_dport\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_dport15\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"ig_port\",\n \"target\" : [\"_ingress_bridged4\", \"_base_ig_port3\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"ternary\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [8],\n \"actions\" : [\"FabricIngress.stats.count\"],\n \"base_default_next\" : \"FabricIngress.slice_tc_classifier.classifier\",\n \"next_tables\" : {\n \"FabricIngress.stats.count\" : \"FabricIngress.slice_tc_classifier.classifier\"\n },\n \"default_entry\" : {\n \"action_id\" : 8,\n \"action_const\" : true,\n \"action_data\" : [\"0x0\"],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.slice_tc_classifier.classifier\",\n \"id\" : 17,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 44,\n \"column\" : 10,\n \"source_fragment\" : \"classifier\"\n },\n \"key\" : [\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ig_port\",\n \"target\" : [\"_ingress_bridged4\", \"_base_ig_port3\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ipv4_src\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_src11\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ipv4_dst\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_dst12\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ip_proto\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_ip_proto13\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"l4_sport\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_sport14\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"l4_dport\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_dport15\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"ternary\",\n \"type\" : \"simple\",\n \"max_size\" : 512,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [37, 39, 38],\n \"actions\" : [\"FabricIngress.slice_tc_classifier.set_slice_id_tc\", \"FabricIngress.slice_tc_classifier.trust_dscp\", \"FabricIngress.slice_tc_classifier.no_classification\"],\n \"base_default_next\" : \"FabricIngress.filtering.ingress_port_vlan\",\n \"next_tables\" : {\n \"FabricIngress.slice_tc_classifier.set_slice_id_tc\" : \"FabricIngress.filtering.ingress_port_vlan\",\n \"FabricIngress.slice_tc_classifier.trust_dscp\" : \"FabricIngress.filtering.ingress_port_vlan\",\n \"FabricIngress.slice_tc_classifier.no_classification\" : \"FabricIngress.filtering.ingress_port_vlan\"\n },\n \"default_entry\" : {\n \"action_id\" : 38,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.filtering.ingress_port_vlan\",\n \"id\" : 18,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4\",\n \"line\" : 42,\n \"column\" : 10,\n \"source_fragment\" : \"ingress_port_vlan\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"ig_port\",\n \"target\" : [\"_ingress_bridged4\", \"_base_ig_port3\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"vlan_is_valid\",\n \"target\" : [\"_ingress_vlan_tag4\", \"$valid$\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"vlan_id\",\n \"target\" : [\"_ingress_vlan_tag4\", \"vlan_id\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"ternary\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [10, 11, 12],\n \"actions\" : [\"FabricIngress.filtering.deny\", \"FabricIngress.filtering.permit\", \"FabricIngress.filtering.permit_with_internal_vlan\"],\n \"base_default_next\" : \"FabricIngress.filtering.fwd_classifier\",\n \"next_tables\" : {\n \"FabricIngress.filtering.deny\" : \"FabricIngress.filtering.fwd_classifier\",\n \"FabricIngress.filtering.permit\" : \"FabricIngress.filtering.fwd_classifier\",\n \"FabricIngress.filtering.permit_with_internal_vlan\" : \"FabricIngress.filtering.fwd_classifier\"\n },\n \"default_entry\" : {\n \"action_id\" : 10,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.filtering.fwd_classifier\",\n \"id\" : 19,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4\",\n \"line\" : 80,\n \"column\" : 10,\n \"source_fragment\" : \"fwd_classifier\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"ig_port\",\n \"target\" : [\"_ingress_bridged4\", \"_base_ig_port3\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"eth_dst\",\n \"target\" : [\"_ingress_ethernet3\", \"dst_addr\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"eth_type\",\n \"target\" : [\"_ingress_eth_type5\", \"value\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"ip_eth_type\",\n \"target\" : [\"_ingress_bridged4\", \"_base_ip_eth_type10\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"ternary\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [13],\n \"actions\" : [\"FabricIngress.filtering.set_forwarding_type\"],\n \"base_default_next\" : \"tbl_filtering100\",\n \"next_tables\" : {\n \"FabricIngress.filtering.set_forwarding_type\" : \"tbl_filtering100\"\n },\n \"default_entry\" : {\n \"action_id\" : 13,\n \"action_const\" : true,\n \"action_data\" : [\"0x0\"],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_filtering100\",\n \"id\" : 20,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/filtering.p4\",\n \"line\" : 100,\n \"column\" : 8,\n \"source_fragment\" : \"fwd_type_counter.count((bit<32>)fabric_md.bridged.base.fwd_type)\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [94],\n \"actions\" : [\"filtering100\"],\n \"base_default_next\" : \"node_35\",\n \"next_tables\" : {\n \"filtering100\" : \"node_35\"\n },\n \"default_entry\" : {\n \"action_id\" : 94,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_upf25\",\n \"id\" : 21,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 25,\n \"column\" : 4,\n \"source_fragment\" : \"bool is_uplink = false; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [93],\n \"actions\" : [\"upf25\"],\n \"base_default_next\" : \"node_37\",\n \"next_tables\" : {\n \"upf25\" : \"node_37\"\n },\n \"default_entry\" : {\n \"action_id\" : 93,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.upf.interfaces\",\n \"id\" : 22,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 107,\n \"column\" : 10,\n \"source_fragment\" : \"interfaces\"\n },\n \"key\" : [\n {\n \"match_type\" : \"lpm\",\n \"name\" : \"ipv4_dst_addr\",\n \"target\" : [\"_ingress_ipv47\", \"dst_addr\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"gtpu_is_valid\",\n \"target\" : [\"_ingress_gtpu12\", \"$valid$\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"lpm\",\n \"type\" : \"simple\",\n \"max_size\" : 64,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [45, 46, 47, 48],\n \"actions\" : [\"FabricIngress.upf.iface_access\", \"FabricIngress.upf.iface_core\", \"FabricIngress.upf.iface_dbuf\", \"FabricIngress.upf.iface_miss\"],\n \"base_default_next\" : \"FabricIngress.upf.applications\",\n \"next_tables\" : {\n \"FabricIngress.upf.iface_access\" : \"tbl_upf409\",\n \"FabricIngress.upf.iface_core\" : \"tbl_upf418\",\n \"FabricIngress.upf.iface_dbuf\" : \"tbl_upf424\",\n \"FabricIngress.upf.iface_miss\" : \"FabricIngress.upf.applications\"\n },\n \"default_entry\" : {\n \"action_id\" : 48,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_upf409\",\n \"id\" : 23,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 409,\n \"column\" : 30,\n \"source_fragment\" : \"= true; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [86],\n \"actions\" : [\"upf409\"],\n \"base_default_next\" : \"node_40\",\n \"next_tables\" : {\n \"upf409\" : \"node_40\"\n },\n \"default_entry\" : {\n \"action_id\" : 86,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.upf.uplink_sessions\",\n \"id\" : 24,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 213,\n \"column\" : 10,\n \"source_fragment\" : \"uplink_sessions\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"tunnel_ipv4_dst\",\n \"target\" : [\"_ingress_ipv47\", \"dst_addr\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"teid\",\n \"target\" : [\"_ingress_gtpu12\", \"teid\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 100000,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [56, 50, 49],\n \"actions\" : [\"FabricIngress.upf.set_uplink_session\", \"FabricIngress.upf.set_uplink_session_drop\", \"FabricIngress.upf.set_uplink_session_miss\"],\n \"base_default_next\" : \"FabricIngress.upf.applications\",\n \"next_tables\" : {\n \"FabricIngress.upf.set_uplink_session\" : \"FabricIngress.upf.applications\",\n \"FabricIngress.upf.set_uplink_session_drop\" : \"FabricIngress.upf.applications\",\n \"FabricIngress.upf.set_uplink_session_miss\" : \"FabricIngress.upf.applications\"\n },\n \"default_entry\" : {\n \"action_id\" : 49,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_upf418\",\n \"id\" : 25,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 418,\n \"column\" : 34,\n \"source_fragment\" : \"= fabric_md.lkp.ipv4_src; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [87],\n \"actions\" : [\"upf418\"],\n \"base_default_next\" : \"FabricIngress.upf.downlink_sessions\",\n \"next_tables\" : {\n \"upf418\" : \"FabricIngress.upf.downlink_sessions\"\n },\n \"default_entry\" : {\n \"action_id\" : 87,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.upf.downlink_sessions\",\n \"id\" : 26,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 198,\n \"column\" : 10,\n \"source_fragment\" : \"downlink_sessions\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"ue_addr\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_routing_ipv4_dst18\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 100000,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [53, 54, 55, 52, 51],\n \"actions\" : [\"FabricIngress.upf.set_downlink_session\", \"FabricIngress.upf.set_downlink_session_buf\", \"FabricIngress.upf.set_downlink_session_buf_drop\", \"FabricIngress.upf.set_downlink_session_drop\", \"FabricIngress.upf.set_downlink_session_miss\"],\n \"base_default_next\" : \"FabricIngress.upf.applications\",\n \"next_tables\" : {\n \"FabricIngress.upf.set_downlink_session\" : \"FabricIngress.upf.applications\",\n \"FabricIngress.upf.set_downlink_session_buf\" : \"FabricIngress.upf.applications\",\n \"FabricIngress.upf.set_downlink_session_buf_drop\" : \"FabricIngress.upf.applications\",\n \"FabricIngress.upf.set_downlink_session_drop\" : \"FabricIngress.upf.applications\",\n \"FabricIngress.upf.set_downlink_session_miss\" : \"FabricIngress.upf.applications\"\n },\n \"default_entry\" : {\n \"action_id\" : 51,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_upf424\",\n \"id\" : 27,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 424,\n \"column\" : 34,\n \"source_fragment\" : \"= fabric_md.lkp.ipv4_src; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [88],\n \"actions\" : [\"upf424\"],\n \"base_default_next\" : \"FabricIngress.upf.downlink_sessions\",\n \"next_tables\" : {\n \"upf424\" : \"FabricIngress.upf.downlink_sessions\"\n },\n \"default_entry\" : {\n \"action_id\" : 88,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.upf.applications\",\n \"id\" : 28,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 337,\n \"column\" : 10,\n \"source_fragment\" : \"applications\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"slice_id\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_upf_slice_id30\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"lpm\",\n \"name\" : \"app_ipv4_addr\",\n \"target\" : [\"scalars\", \"upf_app_ipv4_addr\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"range\",\n \"name\" : \"app_l4_port\",\n \"target\" : [\"scalars\", \"upf_app_l4_port\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"app_ip_proto\",\n \"target\" : [\"scalars\", \"upf_app_ip_proto\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"range\",\n \"type\" : \"simple\",\n \"max_size\" : 5,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [64, 5],\n \"actions\" : [\"FabricIngress.upf.set_app_id\", \"nop\"],\n \"base_default_next\" : \"node_47\",\n \"next_tables\" : {\n \"FabricIngress.upf.set_app_id\" : \"node_47\",\n \"nop\" : \"node_47\"\n },\n \"default_entry\" : {\n \"action_id\" : 5,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.upf.uplink_terminations\",\n \"id\" : 29,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 280,\n \"column\" : 10,\n \"source_fragment\" : \"uplink_terminations\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"ue_session_id\",\n \"target\" : [\"scalars\", \"upf_ue_session_id\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"app_id\",\n \"target\" : [\"scalars\", \"upf_internal_app_id\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 100000,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [61, 59, 57],\n \"actions\" : [\"FabricIngress.upf.app_fwd\", \"FabricIngress.upf.uplink_drop\", \"FabricIngress.upf.uplink_drop_miss\"],\n \"base_default_next\" : \"FabricIngress.upf.uplink_recirc_rules\",\n \"next_tables\" : {\n \"FabricIngress.upf.app_fwd\" : \"FabricIngress.upf.uplink_recirc_rules\",\n \"FabricIngress.upf.uplink_drop\" : \"FabricIngress.upf.uplink_recirc_rules\",\n \"FabricIngress.upf.uplink_drop_miss\" : \"FabricIngress.upf.uplink_recirc_rules\"\n },\n \"default_entry\" : {\n \"action_id\" : 57,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.upf.uplink_recirc_rules\",\n \"id\" : 30,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 387,\n \"column\" : 10,\n \"source_fragment\" : \"uplink_recirc_rules\"\n },\n \"key\" : [\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ipv4_src\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_src11\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ipv4_dst\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_dst12\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"ternary\",\n \"type\" : \"simple\",\n \"max_size\" : 64,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [65, 66, 67],\n \"actions\" : [\"FabricIngress.upf.recirc_allow\", \"FabricIngress.upf.recirc_deny\", \"FabricIngress.upf.recirc_miss\"],\n \"base_default_next\" : \"tbl_upf445\",\n \"next_tables\" : {\n \"FabricIngress.upf.recirc_allow\" : \"tbl_upf445\",\n \"FabricIngress.upf.recirc_deny\" : \"tbl_upf445\",\n \"FabricIngress.upf.recirc_miss\" : \"tbl_upf445\"\n },\n \"default_entry\" : {\n \"action_id\" : 67,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.upf.downlink_terminations\",\n \"id\" : 31,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 295,\n \"column\" : 10,\n \"source_fragment\" : \"downlink_terminations\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"ue_session_id\",\n \"target\" : [\"scalars\", \"upf_ue_session_id\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"app_id\",\n \"target\" : [\"scalars\", \"upf_internal_app_id\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 100000,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [62, 60, 58],\n \"actions\" : [\"FabricIngress.upf.downlink_fwd_encap\", \"FabricIngress.upf.downlink_drop\", \"FabricIngress.upf.downlink_drop_miss\"],\n \"base_default_next\" : \"tbl_upf445\",\n \"next_tables\" : {\n \"FabricIngress.upf.downlink_fwd_encap\" : \"tbl_upf445\",\n \"FabricIngress.upf.downlink_drop\" : \"tbl_upf445\",\n \"FabricIngress.upf.downlink_drop_miss\" : \"tbl_upf445\"\n },\n \"default_entry\" : {\n \"action_id\" : 58,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_upf443\",\n \"id\" : 32,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 443,\n \"column\" : 58,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [89],\n \"actions\" : [\"upf443\"],\n \"base_default_next\" : \"tbl_upf445\",\n \"next_tables\" : {\n \"upf443\" : \"tbl_upf445\"\n },\n \"default_entry\" : {\n \"action_id\" : 89,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_upf445\",\n \"id\" : 33,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 445,\n \"column\" : 12,\n \"source_fragment\" : \"app_meter.execute_meter((bit<32>) app_meter_idx_internal, fabric_md.upf_meter_color)\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [91],\n \"actions\" : [\"upf445\"],\n \"base_default_next\" : \"node_54\",\n \"next_tables\" : {\n \"upf445\" : \"node_54\"\n },\n \"default_entry\" : {\n \"action_id\" : 91,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_upf448\",\n \"id\" : 34,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 448,\n \"column\" : 16,\n \"source_fragment\" : \"session_meter.execute_meter((bit<32>) session_meter_idx_internal, fabric_md.upf_meter_color)\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [90],\n \"actions\" : [\"upf448\"],\n \"base_default_next\" : \"FabricIngress.upf.ig_tunnel_peers\",\n \"next_tables\" : {\n \"upf448\" : \"FabricIngress.upf.ig_tunnel_peers\"\n },\n \"default_entry\" : {\n \"action_id\" : 90,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.upf.ig_tunnel_peers\",\n \"id\" : 35,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 317,\n \"column\" : 10,\n \"source_fragment\" : \"ig_tunnel_peers\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"tun_peer_id\",\n \"target\" : [\"_ingress_bridged4\", \"_upf_tun_peer_id13\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 256,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [63, 4],\n \"actions\" : [\"FabricIngress.upf.set_routing_ipv4_dst\", \"nop\"],\n \"base_default_next\" : \"node_57\",\n \"next_tables\" : {\n \"FabricIngress.upf.set_routing_ipv4_dst\" : \"node_57\",\n \"nop\" : \"node_57\"\n },\n \"default_entry\" : {\n \"action_id\" : 4,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_upf461\",\n \"id\" : 36,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 461,\n \"column\" : 16,\n \"source_fragment\" : \"terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id)\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [92],\n \"actions\" : [\"upf461\"],\n \"base_default_next\" : \"node_59\",\n \"next_tables\" : {\n \"upf461\" : \"node_59\"\n },\n \"default_entry\" : {\n \"action_id\" : 92,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.forwarding.bridging\",\n \"id\" : 37,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 39,\n \"column\" : 10,\n \"source_fragment\" : \"bridging\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"vlan_id\",\n \"target\" : [\"_ingress_bridged4\", \"_base_vlan_id6\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"eth_dst\",\n \"target\" : [\"_ingress_ethernet3\", \"dst_addr\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"ternary\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [18, 14],\n \"actions\" : [\"FabricIngress.forwarding.set_next_id_bridging\", \"FabricIngress.forwarding.set_int_drop_reason\"],\n \"base_default_next\" : \"tbl_hasher17\",\n \"next_tables\" : {\n \"FabricIngress.forwarding.set_next_id_bridging\" : \"tbl_hasher17\",\n \"FabricIngress.forwarding.set_int_drop_reason\" : \"tbl_hasher17\"\n },\n \"default_entry\" : {\n \"action_id\" : 14,\n \"action_const\" : true,\n \"action_data\" : [\"0x59\"],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.forwarding.mpls\",\n \"id\" : 38,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 74,\n \"column\" : 10,\n \"source_fragment\" : \"mpls\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"mpls_label\",\n \"target\" : [\"_ingress_bridged4\", \"_base_mpls_label2\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [19, 15],\n \"actions\" : [\"FabricIngress.forwarding.pop_mpls_and_next\", \"FabricIngress.forwarding.set_int_drop_reason\"],\n \"base_default_next\" : \"tbl_hasher17\",\n \"next_tables\" : {\n \"FabricIngress.forwarding.pop_mpls_and_next\" : \"tbl_hasher17\",\n \"FabricIngress.forwarding.set_int_drop_reason\" : \"tbl_hasher17\"\n },\n \"default_entry\" : {\n \"action_id\" : 15,\n \"action_const\" : true,\n \"action_data\" : [\"0x81\"],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.forwarding.routing_v4\",\n \"id\" : 39,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 116,\n \"column\" : 10,\n \"source_fragment\" : \"routing_v4\"\n },\n \"key\" : [\n {\n \"match_type\" : \"lpm\",\n \"name\" : \"ipv4_dst\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_routing_ipv4_dst18\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"lpm\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [20, 21, 22, 16],\n \"actions\" : [\"FabricIngress.forwarding.set_next_id_routing_v4\", \"FabricIngress.forwarding.nop_routing_v4\", \"FabricIngress.forwarding.drop_routing_v4\", \"FabricIngress.forwarding.set_int_drop_reason\"],\n \"base_default_next\" : \"tbl_hasher17\",\n \"next_tables\" : {\n \"FabricIngress.forwarding.set_next_id_routing_v4\" : \"tbl_hasher17\",\n \"FabricIngress.forwarding.nop_routing_v4\" : \"tbl_hasher17\",\n \"FabricIngress.forwarding.drop_routing_v4\" : \"tbl_hasher17\",\n \"FabricIngress.forwarding.set_int_drop_reason\" : \"tbl_hasher17\"\n },\n \"default_entry\" : {\n \"action_id\" : 16,\n \"action_const\" : false,\n \"action_data\" : [\"0x1d\"],\n \"action_entry_const\" : false\n }\n },\n {\n \"name\" : \"FabricIngress.forwarding.routing_v6\",\n \"id\" : 40,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 155,\n \"column\" : 10,\n \"source_fragment\" : \"routing_v6\"\n },\n \"key\" : [\n {\n \"match_type\" : \"lpm\",\n \"name\" : \"ipv6_dst\",\n \"target\" : [\"_ingress_ipv68\", \"dst_addr\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"lpm\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [23, 24, 17],\n \"actions\" : [\"FabricIngress.forwarding.set_next_id_routing_v6\", \"FabricIngress.forwarding.drop_routing_v6\", \"FabricIngress.forwarding.set_int_drop_reason\"],\n \"base_default_next\" : \"tbl_hasher17\",\n \"next_tables\" : {\n \"FabricIngress.forwarding.set_next_id_routing_v6\" : \"tbl_hasher17\",\n \"FabricIngress.forwarding.drop_routing_v6\" : \"tbl_hasher17\",\n \"FabricIngress.forwarding.set_int_drop_reason\" : \"tbl_hasher17\"\n },\n \"default_entry\" : {\n \"action_id\" : 17,\n \"action_const\" : false,\n \"action_data\" : [\"0x1d\"],\n \"action_entry_const\" : false\n }\n },\n {\n \"name\" : \"tbl_hasher17\",\n \"id\" : 41,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 17,\n \"column\" : 8,\n \"source_fragment\" : \"hash( ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [99],\n \"actions\" : [\"hasher17\"],\n \"base_default_next\" : \"node_69\",\n \"next_tables\" : {\n \"hasher17\" : \"node_69\"\n },\n \"default_entry\" : {\n \"action_id\" : 99,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_hasher28\",\n \"id\" : 42,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 28,\n \"column\" : 12,\n \"source_fragment\" : \"hash( ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [95],\n \"actions\" : [\"hasher28\"],\n \"base_default_next\" : \"node_76\",\n \"next_tables\" : {\n \"hasher28\" : \"node_76\"\n },\n \"default_entry\" : {\n \"action_id\" : 95,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_hasher39\",\n \"id\" : 43,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 39,\n \"column\" : 12,\n \"source_fragment\" : \"hash( ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [96],\n \"actions\" : [\"hasher39\"],\n \"base_default_next\" : \"node_76\",\n \"next_tables\" : {\n \"hasher39\" : \"node_76\"\n },\n \"default_entry\" : {\n \"action_id\" : 96,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_hasher50\",\n \"id\" : 44,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 50,\n \"column\" : 32,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [97],\n \"actions\" : [\"hasher50\"],\n \"base_default_next\" : \"node_76\",\n \"next_tables\" : {\n \"hasher50\" : \"node_76\"\n },\n \"default_entry\" : {\n \"action_id\" : 97,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_hasher66\",\n \"id\" : 45,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 66,\n \"column\" : 46,\n \"source_fragment\" : \"= 0; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [98],\n \"actions\" : [\"hasher66\"],\n \"base_default_next\" : \"node_76\",\n \"next_tables\" : {\n \"hasher66\" : \"node_76\"\n },\n \"default_entry\" : {\n \"action_id\" : 98,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.pre_next.next_mpls\",\n \"id\" : 46,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/pre_next.p4\",\n \"line\" : 22,\n \"column\" : 10,\n \"source_fragment\" : \"next_mpls\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"next_id\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_next_id21\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [25, 0],\n \"actions\" : [\"FabricIngress.pre_next.set_mpls_label\", \"nop\"],\n \"base_default_next\" : \"FabricIngress.pre_next.next_vlan\",\n \"next_tables\" : {\n \"FabricIngress.pre_next.set_mpls_label\" : \"FabricIngress.pre_next.next_vlan\",\n \"nop\" : \"FabricIngress.pre_next.next_vlan\"\n },\n \"default_entry\" : {\n \"action_id\" : 0,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.pre_next.next_vlan\",\n \"id\" : 47,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/pre_next.p4\",\n \"line\" : 54,\n \"column\" : 10,\n \"source_fragment\" : \"next_vlan\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"next_id\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_next_id21\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [26, 1],\n \"actions\" : [\"FabricIngress.pre_next.set_vlan\", \"nop\"],\n \"base_default_next\" : \"FabricIngress.acl.acl\",\n \"next_tables\" : {\n \"FabricIngress.pre_next.set_vlan\" : \"FabricIngress.acl.acl\",\n \"nop\" : \"FabricIngress.acl.acl\"\n },\n \"default_entry\" : {\n \"action_id\" : 1,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.acl.acl\",\n \"id\" : 48,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/acl.p4\",\n \"line\" : 74,\n \"column\" : 10,\n \"source_fragment\" : \"acl\"\n },\n \"key\" : [\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ig_port\",\n \"target\" : [\"_ingress_bridged4\", \"_base_ig_port3\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"eth_dst\",\n \"target\" : [\"_ingress_ethernet3\", \"dst_addr\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"eth_src\",\n \"target\" : [\"_ingress_ethernet3\", \"src_addr\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"vlan_id\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_vlan_id9\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"eth_type\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_eth_type8\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ipv4_src\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_src11\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ipv4_dst\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_ipv4_dst12\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ip_proto\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_ip_proto13\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"icmp_type\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_icmp_type16\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"icmp_code\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_icmp_code17\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"l4_sport\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_sport14\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"l4_dport\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_lkp_l4_dport15\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"ig_port_type\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_ig_port_type33\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"ternary\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [27, 29, 28, 30, 31, 32],\n \"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\"],\n \"base_default_next\" : \"node_80\",\n \"next_tables\" : {\n \"FabricIngress.acl.set_next_id_acl\" : \"node_80\",\n \"FabricIngress.acl.punt_to_cpu\" : \"node_80\",\n \"FabricIngress.acl.copy_to_cpu\" : \"node_80\",\n \"FabricIngress.acl.drop\" : \"node_80\",\n \"FabricIngress.acl.set_output_port\" : \"node_80\",\n \"FabricIngress.acl.nop_acl\" : \"node_80\"\n },\n \"default_entry\" : {\n \"action_id\" : 32,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.next.hashed\",\n \"id\" : 49,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 127,\n \"column\" : 10,\n \"source_fragment\" : \"hashed\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"next_id\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_next_id21\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"indirect_ws\",\n \"action_profile\" : \"FabricIngress.next.hashed_profile\",\n \"max_size\" : 1024,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [33, 34, 2],\n \"actions\" : [\"FabricIngress.next.output_hashed\", \"FabricIngress.next.routing_hashed\", \"nop\"],\n \"base_default_next\" : \"FabricIngress.next.multicast\",\n \"next_tables\" : {\n \"FabricIngress.next.output_hashed\" : \"FabricIngress.next.multicast\",\n \"FabricIngress.next.routing_hashed\" : \"FabricIngress.next.multicast\",\n \"nop\" : \"FabricIngress.next.multicast\"\n }\n },\n {\n \"name\" : \"FabricIngress.next.multicast\",\n \"id\" : 50,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 161,\n \"column\" : 10,\n \"source_fragment\" : \"multicast\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"next_id\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_next_id21\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [35, 36],\n \"actions\" : [\"FabricIngress.next.set_mcast_group_id\", \"FabricIngress.next.reset_mcast_group_id\"],\n \"base_default_next\" : \"FabricIngress.qos.set_slice_tc\",\n \"next_tables\" : {\n \"FabricIngress.next.set_mcast_group_id\" : \"FabricIngress.qos.set_slice_tc\",\n \"FabricIngress.next.reset_mcast_group_id\" : \"FabricIngress.qos.set_slice_tc\"\n },\n \"default_entry\" : {\n \"action_id\" : 36,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.qos.set_slice_tc\",\n \"id\" : 51,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 91,\n \"column\" : 10,\n \"source_fragment\" : \"set_slice_tc\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"fabric_md.is_upf_hit\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_is_upf_hit29\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 2,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [40, 41, 7],\n \"actions\" : [\"FabricIngress.qos.use_upf\", \"FabricIngress.qos.use_default\", \"NoAction\"],\n \"base_default_next\" : \"FabricIngress.qos.default_tc\",\n \"next_tables\" : {\n \"FabricIngress.qos.use_upf\" : \"FabricIngress.qos.default_tc\",\n \"FabricIngress.qos.use_default\" : \"FabricIngress.qos.default_tc\",\n \"NoAction\" : \"FabricIngress.qos.default_tc\"\n },\n \"default_entry\" : {\n \"action_id\" : 7,\n \"action_const\" : false,\n \"action_data\" : [],\n \"action_entry_const\" : false\n },\n \"entries\" : [\n {\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 96,\n \"column\" : 12,\n \"source_fragment\" : \"true: use_upf\"\n },\n \"match_key\" : [\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x01\"\n }\n ],\n \"action_entry\" : {\n \"action_id\" : 40,\n \"action_data\" : []\n },\n \"priority\" : 1\n },\n {\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 97,\n \"column\" : 12,\n \"source_fragment\" : \"false: use_default\"\n },\n \"match_key\" : [\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x00\"\n }\n ],\n \"action_entry\" : {\n \"action_id\" : 41,\n \"action_data\" : []\n },\n \"priority\" : 2\n }\n ]\n },\n {\n \"name\" : \"FabricIngress.qos.default_tc\",\n \"id\" : 52,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 150,\n \"column\" : 10,\n \"source_fragment\" : \"default_tc\"\n },\n \"key\" : [\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"slice_tc\",\n \"target\" : [\"_ingress_bridged4\", \"_base_slice_tc12\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"tc_unknown\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_tc_unknown28\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"ternary\",\n \"type\" : \"simple\",\n \"max_size\" : 16,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [44, 3],\n \"actions\" : [\"FabricIngress.qos.set_default_tc\", \"nop\"],\n \"base_default_next\" : \"node_85\",\n \"next_tables\" : {\n \"FabricIngress.qos.set_default_tc\" : \"node_85\",\n \"nop\" : \"node_85\"\n },\n \"default_entry\" : {\n \"action_id\" : 3,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_slicing174\",\n \"id\" : 53,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 174,\n \"column\" : 12,\n \"source_fragment\" : \"slice_tc_meter.execute_meter((bit<32>) fabric_md.bridged.base.slice_tc, packet_color)\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [100],\n \"actions\" : [\"slicing174\"],\n \"base_default_next\" : \"FabricIngress.qos.queues\",\n \"next_tables\" : {\n \"slicing174\" : \"FabricIngress.qos.queues\"\n },\n \"default_entry\" : {\n \"action_id\" : 100,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_slicing177\",\n \"id\" : 54,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 177,\n \"column\" : 25,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [101],\n \"actions\" : [\"slicing177\"],\n \"base_default_next\" : \"FabricIngress.qos.queues\",\n \"next_tables\" : {\n \"slicing177\" : \"FabricIngress.qos.queues\"\n },\n \"default_entry\" : {\n \"action_id\" : 101,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.qos.queues\",\n \"id\" : 55,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 122,\n \"column\" : 10,\n \"source_fragment\" : \"queues\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"slice_tc\",\n \"target\" : [\"_ingress_bridged4\", \"_base_slice_tc12\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"color\",\n \"target\" : [\"scalars\", \"qos_packet_color\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"ternary\",\n \"type\" : \"simple\",\n \"max_size\" : 128,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [42, 43],\n \"actions\" : [\"FabricIngress.qos.set_queue\", \"FabricIngress.qos.meter_drop\"],\n \"base_default_next\" : \"tbl_int112\",\n \"next_tables\" : {\n \"FabricIngress.qos.set_queue\" : \"tbl_int112\",\n \"FabricIngress.qos.meter_drop\" : \"tbl_int112\"\n },\n \"default_entry\" : {\n \"action_id\" : 42,\n \"action_const\" : true,\n \"action_data\" : [\"0x0\"],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_int112\",\n \"id\" : 56,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 112,\n \"column\" : 46,\n \"source_fragment\" : \"= standard_md.egress_spec; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [102],\n \"actions\" : [\"int112\"],\n \"base_default_next\" : \"FabricIngress.int_ingress.drop_report\",\n \"next_tables\" : {\n \"int112\" : \"FabricIngress.int_ingress.drop_report\"\n },\n \"default_entry\" : {\n \"action_id\" : 102,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricIngress.int_ingress.drop_report\",\n \"id\" : 57,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 86,\n \"column\" : 10,\n \"source_fragment\" : \"drop_report\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"int_report_type\",\n \"target\" : [\"_ingress_bridged4\", \"_int_bmd_report_type21\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"drop_ctl\",\n \"target\" : [\"scalars\", \"userMetadata._drop_ctl2\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"punt_to_cpu\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_punt_to_cpu23\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"egress_port_set\",\n \"target\" : [\"scalars\", \"userMetadata._ingress_egress_port_set22\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"ternary\",\n \"name\" : \"mcast_group_id\",\n \"target\" : [\"standard_metadata\", \"mcast_grp\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"ternary\",\n \"type\" : \"simple\",\n \"max_size\" : 3,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [71, 6],\n \"actions\" : [\"FabricIngress.int_ingress.report_drop\", \"nop\"],\n \"base_default_next\" : \"tbl_fabric_v1model106\",\n \"next_tables\" : {\n \"FabricIngress.int_ingress.report_drop\" : \"tbl_fabric_v1model106\",\n \"nop\" : \"tbl_fabric_v1model106\"\n },\n \"default_entry\" : {\n \"action_id\" : 6,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n },\n \"entries\" : [\n {\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 101,\n \"column\" : 12,\n \"source_fragment\" : \"(INT_REPORT_TYPE_FLOW, 1, false, false, _): report_drop()\"\n },\n \"match_key\" : [\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x01\"\n },\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x01\"\n },\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x00\"\n },\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x00\"\n },\n {\n \"match_type\" : \"ternary\",\n \"key\" : \"0x0000\",\n \"mask\" : \"0x0000\"\n }\n ],\n \"action_entry\" : {\n \"action_id\" : 71,\n \"action_data\" : []\n },\n \"priority\" : 1\n },\n {\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 102,\n \"column\" : 12,\n \"source_fragment\" : \"(INT_REPORT_TYPE_FLOW, 1, false, true, _): report_drop()\"\n },\n \"match_key\" : [\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x01\"\n },\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x01\"\n },\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x00\"\n },\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x01\"\n },\n {\n \"match_type\" : \"ternary\",\n \"key\" : \"0x0000\",\n \"mask\" : \"0x0000\"\n }\n ],\n \"action_entry\" : {\n \"action_id\" : 71,\n \"action_data\" : []\n },\n \"priority\" : 2\n },\n {\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 104,\n \"column\" : 12,\n \"source_fragment\" : \"(INT_REPORT_TYPE_FLOW, 0, false, false, 0): report_drop()\"\n },\n \"match_key\" : [\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x01\"\n },\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x00\"\n },\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x00\"\n },\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x00\"\n },\n {\n \"match_type\" : \"ternary\",\n \"key\" : \"0x0000\",\n \"mask\" : \"0xffff\"\n }\n ],\n \"action_entry\" : {\n \"action_id\" : 71,\n \"action_data\" : []\n },\n \"priority\" : 3\n }\n ]\n },\n {\n \"name\" : \"tbl_fabric_v1model106\",\n \"id\" : 58,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 106,\n \"column\" : 33,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [104],\n \"actions\" : [\"fabric_v1model106\"],\n \"base_default_next\" : \"node_92\",\n \"next_tables\" : {\n \"fabric_v1model106\" : \"node_92\"\n },\n \"default_entry\" : {\n \"action_id\" : 104,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_fabric_v1model110\",\n \"id\" : 59,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 110,\n \"column\" : 12,\n \"source_fragment\" : \"mark_to_drop(standard_md)\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [103],\n \"actions\" : [\"fabric_v1model110\"],\n \"base_default_next\" : null,\n \"next_tables\" : {\n \"fabric_v1model110\" : null\n },\n \"default_entry\" : {\n \"action_id\" : 103,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n }\n ],\n \"action_profiles\" : [\n {\n \"name\" : \"FabricIngress.next.hashed_profile\",\n \"id\" : 0,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 112,\n \"column\" : 15,\n \"source_fragment\" : \"hashed_profile\"\n },\n \"max_size\" : 16,\n \"selector\" : {\n \"algo\" : \"crc16\",\n \"input\" : [\n {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_ecmp_hash5\"]\n }\n ]\n }\n }\n ],\n \"conditionals\" : [\n {\n \"name\" : \"node_3\",\n \"id\" : 0,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 62,\n \"column\" : 12,\n \"source_fragment\" : \"standard_md.parser_error == error.PacketRejectedByParser\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"parser_error\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x8\"\n }\n }\n },\n \"true_next\" : \"tbl_fabric_v1model64\",\n \"false_next\" : \"node_5\"\n },\n {\n \"name\" : \"node_5\",\n \"id\" : 1,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 67,\n \"column\" : 13,\n \"source_fragment\" : \"standard_md.instance_type == 4\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"instance_type\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000004\"\n }\n }\n },\n \"true_next\" : \"tbl_fabric_v1model70\",\n \"false_next\" : \"tbl_lookup_md_init15\"\n },\n {\n \"name\" : \"node_8\",\n \"id\" : 2,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 20,\n \"column\" : 12,\n \"source_fragment\" : \"hdr.vlan_tag.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_vlan_tag4\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_lookup_md_init21\",\n \"false_next\" : \"tbl_lookup_md_init24\"\n },\n {\n \"name\" : \"node_11\",\n \"id\" : 3,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 32,\n \"column\" : 12,\n \"source_fragment\" : \"hdr.inner_ipv4.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_lookup_md_init33\",\n \"false_next\" : \"node_19\"\n },\n {\n \"name\" : \"node_13\",\n \"id\" : 4,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 37,\n \"column\" : 16,\n \"source_fragment\" : \"hdr.inner_tcp.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_tcp19\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_lookup_md_init38\",\n \"false_next\" : \"node_15\"\n },\n {\n \"name\" : \"node_15\",\n \"id\" : 5,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 40,\n \"column\" : 23,\n \"source_fragment\" : \"hdr.inner_udp.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_udp20\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_lookup_md_init41\",\n \"false_next\" : \"node_17\"\n },\n {\n \"name\" : \"node_17\",\n \"id\" : 6,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 43,\n \"column\" : 23,\n \"source_fragment\" : \"hdr.inner_icmp.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_icmp21\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_lookup_md_init44\",\n \"false_next\" : \"node_27\"\n },\n {\n \"name\" : \"node_19\",\n \"id\" : 7,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 47,\n \"column\" : 19,\n \"source_fragment\" : \"hdr.ipv4.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_lookup_md_init48\",\n \"false_next\" : \"node_27\"\n },\n {\n \"name\" : \"node_21\",\n \"id\" : 8,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 52,\n \"column\" : 16,\n \"source_fragment\" : \"hdr.tcp.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_tcp9\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_lookup_md_init53\",\n \"false_next\" : \"node_23\"\n },\n {\n \"name\" : \"node_23\",\n \"id\" : 9,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 55,\n \"column\" : 23,\n \"source_fragment\" : \"hdr.udp.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_udp10\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_lookup_md_init56\",\n \"false_next\" : \"node_25\"\n },\n {\n \"name\" : \"node_25\",\n \"id\" : 10,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/lookup_md_init.p4\",\n \"line\" : 58,\n \"column\" : 23,\n \"source_fragment\" : \"hdr.icmp.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_icmp11\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_lookup_md_init59\",\n \"false_next\" : \"node_27\"\n },\n {\n \"name\" : \"node_27\",\n \"id\" : 11,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 24,\n \"column\" : 12,\n \"source_fragment\" : \"hdr.packet_out.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_packet_out0\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_pkt_io_do_packet_out\",\n \"false_next\" : \"FabricIngress.int_watchlist.watchlist\"\n },\n {\n \"name\" : \"node_35\",\n \"id\" : 12,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 84,\n \"column\" : 13,\n \"source_fragment\" : \"fabric_md\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_forwarding19\"]\n }\n }\n },\n \"false_next\" : \"tbl_upf25\",\n \"true_next\" : \"node_59\"\n },\n {\n \"name\" : \"node_37\",\n \"id\" : 13,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 406,\n \"column\" : 12,\n \"source_fragment\" : \"hdr.ipv4.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"FabricIngress.upf.interfaces\",\n \"false_next\" : \"node_59\"\n },\n {\n \"name\" : \"node_40\",\n \"id\" : 14,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 413,\n \"column\" : 24,\n \"source_fragment\" : \"fabric_md.bridged.base.encap_presence != EncapPresence.NONE\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"!=\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_encap_presence7\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n }\n },\n \"true_next\" : \"FabricIngress.upf.uplink_sessions\",\n \"false_next\" : \"FabricIngress.upf.applications\"\n },\n {\n \"name\" : \"node_47\",\n \"id\" : 15,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 433,\n \"column\" : 16,\n \"source_fragment\" : \"sess_hit\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_sess_hit\"]\n }\n }\n },\n \"true_next\" : \"node_48\",\n \"false_next\" : \"tbl_upf443\"\n },\n {\n \"name\" : \"node_48\",\n \"id\" : 16,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 434,\n \"column\" : 20,\n \"source_fragment\" : \"is_uplink\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_is_uplink\"]\n }\n }\n },\n \"true_next\" : \"FabricIngress.upf.uplink_terminations\",\n \"false_next\" : \"FabricIngress.upf.downlink_terminations\"\n },\n {\n \"name\" : \"node_54\",\n \"id\" : 17,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 446,\n \"column\" : 16,\n \"source_fragment\" : \"fabric_md.upf_meter_color != MeterColor_t.RED\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"!=\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_upf_meter_color32\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n }\n },\n \"true_next\" : \"tbl_upf448\",\n \"false_next\" : \"FabricIngress.upf.ig_tunnel_peers\"\n },\n {\n \"name\" : \"node_57\",\n \"id\" : 18,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 451,\n \"column\" : 16,\n \"source_fragment\" : \"term_hit\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"upf_term_hit\"]\n }\n }\n },\n \"true_next\" : \"tbl_upf461\",\n \"false_next\" : \"node_59\"\n },\n {\n \"name\" : \"node_59\",\n \"id\" : 19,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 88,\n \"column\" : 13,\n \"source_fragment\" : \"fabric_md\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_forwarding19\"]\n }\n }\n },\n \"false_next\" : \"node_60\",\n \"true_next\" : \"tbl_hasher17\"\n },\n {\n \"name\" : \"node_60\",\n \"id\" : 20,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 178,\n \"column\" : 12,\n \"source_fragment\" : \"hdr.ethernet.isValid() && ...\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"and\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ethernet3\", \"$valid$\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_fwd_type5\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n }\n }\n }\n },\n \"true_next\" : \"FabricIngress.forwarding.bridging\",\n \"false_next\" : \"node_62\"\n },\n {\n \"name\" : \"node_62\",\n \"id\" : 21,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 181,\n \"column\" : 19,\n \"source_fragment\" : \"hdr.mpls.isValid() && ...\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"and\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_mpls6\", \"$valid$\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_fwd_type5\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n }\n }\n }\n },\n \"true_next\" : \"FabricIngress.forwarding.mpls\",\n \"false_next\" : \"node_64\"\n },\n {\n \"name\" : \"node_64\",\n \"id\" : 22,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 184,\n \"column\" : 19,\n \"source_fragment\" : \"fabric_md.lkp.is_ipv4 && ...\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"and\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_is_ipv410\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"or\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_fwd_type5\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_fwd_type5\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x03\"\n }\n }\n }\n }\n }\n }\n },\n \"true_next\" : \"FabricIngress.forwarding.routing_v4\",\n \"false_next\" : \"node_66\"\n },\n {\n \"name\" : \"node_66\",\n \"id\" : 23,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/forwarding.p4\",\n \"line\" : 188,\n \"column\" : 19,\n \"source_fragment\" : \"hdr.ipv6.isValid() && ...\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"and\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv68\", \"$valid$\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_base_fwd_type5\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n }\n }\n }\n },\n \"true_next\" : \"FabricIngress.forwarding.routing_v6\",\n \"false_next\" : \"tbl_hasher17\"\n },\n {\n \"name\" : \"node_69\",\n \"id\" : 24,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 27,\n \"column\" : 12,\n \"source_fragment\" : \"fabric_md.bridged\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_bridged4\", \"_upf_needs_gtpu_encap16\"]\n }\n }\n },\n \"true_next\" : \"tbl_hasher28\",\n \"false_next\" : \"node_71\"\n },\n {\n \"name\" : \"node_71\",\n \"id\" : 25,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/hasher.p4\",\n \"line\" : 38,\n \"column\" : 12,\n \"source_fragment\" : \"hdr.gtpu.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_hasher39\",\n \"false_next\" : \"node_73\"\n },\n {\n \"name\" : \"node_73\",\n \"id\" : 26,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 91,\n \"column\" : 34,\n \"source_fragment\" : \"fabric_md\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_lkp_is_ipv410\"]\n }\n }\n },\n \"true_next\" : \"tbl_hasher50\",\n \"false_next\" : \"tbl_hasher66\"\n },\n {\n \"name\" : \"node_76\",\n \"id\" : 27,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 92,\n \"column\" : 13,\n \"source_fragment\" : \"fabric_md\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n }\n }\n },\n \"false_next\" : \"FabricIngress.pre_next.next_mpls\",\n \"true_next\" : \"FabricIngress.acl.acl\"\n },\n {\n \"name\" : \"node_80\",\n \"id\" : 28,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 96,\n \"column\" : 13,\n \"source_fragment\" : \"fabric_md\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_skip_next20\"]\n }\n }\n },\n \"false_next\" : \"FabricIngress.next.hashed\",\n \"true_next\" : \"FabricIngress.qos.set_slice_tc\"\n },\n {\n \"name\" : \"node_85\",\n \"id\" : 29,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 173,\n \"column\" : 12,\n \"source_fragment\" : \"fabric_md.upf_meter_color != MeterColor_t.RED\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"!=\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._ingress_upf_meter_color32\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n }\n },\n \"true_next\" : \"tbl_slicing174\",\n \"false_next\" : \"tbl_slicing177\"\n },\n {\n \"name\" : \"node_92\",\n \"id\" : 30,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 109,\n \"column\" : 12,\n \"source_fragment\" : \"fabric_md.drop_ctl == 1\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n }\n },\n \"false_next\" : null,\n \"true_next\" : \"tbl_fabric_v1model110\"\n }\n ]\n },\n {\n \"name\" : \"egress\",\n \"id\" : 1,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 115,\n \"column\" : 8,\n \"source_fragment\" : \"FabricEgress\"\n },\n \"init_table\" : \"tbl_fabric_v1model133\",\n \"tables\" : [\n {\n \"name\" : \"tbl_fabric_v1model133\",\n \"id\" : 60,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 133,\n \"column\" : 34,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [138],\n \"actions\" : [\"fabric_v1model133\"],\n \"base_default_next\" : \"node_97\",\n \"next_tables\" : {\n \"fabric_v1model133\" : \"node_97\"\n },\n \"default_entry\" : {\n \"action_id\" : 138,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_fabric_v1model136\",\n \"id\" : 61,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 136,\n \"column\" : 12,\n \"source_fragment\" : \"exit\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [137],\n \"actions\" : [\"fabric_v1model136\"],\n \"base_default_next\" : \"node_99\",\n \"next_tables\" : {\n \"fabric_v1model136\" : \"node_99\"\n },\n \"default_entry\" : {\n \"action_id\" : 137,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_int_tna_parser_emulator14\",\n \"id\" : 62,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [140],\n \"actions\" : [\"int_tna_parser_emulator14\"],\n \"base_default_next\" : \"node_101\",\n \"next_tables\" : {\n \"int_tna_parser_emulator14\" : \"node_101\"\n },\n \"default_entry\" : {\n \"action_id\" : 140,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_int_tna_parser_emulator148\",\n \"id\" : 63,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 148,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.ipv4.setInvalid(); ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [139],\n \"actions\" : [\"int_tna_parser_emulator148\"],\n \"base_default_next\" : \"node_103\",\n \"next_tables\" : {\n \"int_tna_parser_emulator148\" : \"node_103\"\n },\n \"default_entry\" : {\n \"action_id\" : 139,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_parser_emulator_parse_int_ingress_drop\",\n \"id\" : 64,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 165,\n \"column\" : 12,\n \"source_fragment\" : \"parse_int_ingress_drop()\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [124],\n \"actions\" : [\"FabricEgress.parser_emulator.parse_int_ingress_drop\"],\n \"base_default_next\" : \"tbl_int_tna_parser_emulator166\",\n \"next_tables\" : {\n \"FabricEgress.parser_emulator.parse_int_ingress_drop\" : \"tbl_int_tna_parser_emulator166\"\n },\n \"default_entry\" : {\n \"action_id\" : 124,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_int_tna_parser_emulator166\",\n \"id\" : 65,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 166,\n \"column\" : 12,\n \"source_fragment\" : \"recirculate_preserving_field_list(NO_PRESERVATION)\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [141],\n \"actions\" : [\"int_tna_parser_emulator166\"],\n \"base_default_next\" : \"tbl_int_tna_parser_emulator173\",\n \"next_tables\" : {\n \"int_tna_parser_emulator166\" : \"tbl_int_tna_parser_emulator173\"\n },\n \"default_entry\" : {\n \"action_id\" : 141,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_parser_emulator_parse_int_report_mirror\",\n \"id\" : 66,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 168,\n \"column\" : 12,\n \"source_fragment\" : \"parse_int_report_mirror()\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [126],\n \"actions\" : [\"FabricEgress.parser_emulator.parse_int_report_mirror\"],\n \"base_default_next\" : \"tbl_int_tna_parser_emulator169\",\n \"next_tables\" : {\n \"FabricEgress.parser_emulator.parse_int_report_mirror\" : \"tbl_int_tna_parser_emulator169\"\n },\n \"default_entry\" : {\n \"action_id\" : 126,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_int_tna_parser_emulator169\",\n \"id\" : 67,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 169,\n \"column\" : 12,\n \"source_fragment\" : \"recirculate_preserving_field_list(PRESERVE_INT_MD)\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [142],\n \"actions\" : [\"int_tna_parser_emulator169\"],\n \"base_default_next\" : \"tbl_int_tna_parser_emulator173\",\n \"next_tables\" : {\n \"int_tna_parser_emulator169\" : \"tbl_int_tna_parser_emulator173\"\n },\n \"default_entry\" : {\n \"action_id\" : 142,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_int_tna_parser_emulator173\",\n \"id\" : 68,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [143],\n \"actions\" : [\"int_tna_parser_emulator173\"],\n \"base_default_next\" : \"node_109\",\n \"next_tables\" : {\n \"int_tna_parser_emulator173\" : \"node_109\"\n },\n \"default_entry\" : {\n \"action_id\" : 143,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_int_tna_parser_emulator14_0\",\n \"id\" : 69,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 14,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [145],\n \"actions\" : [\"int_tna_parser_emulator14_0\"],\n \"base_default_next\" : \"node_111\",\n \"next_tables\" : {\n \"int_tna_parser_emulator14_0\" : \"node_111\"\n },\n \"default_entry\" : {\n \"action_id\" : 145,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_int_tna_parser_emulator148_0\",\n \"id\" : 70,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 148,\n \"column\" : 12,\n \"source_fragment\" : \"hdr_v1model.ingress.ipv4.setInvalid(); ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [144],\n \"actions\" : [\"int_tna_parser_emulator148_0\"],\n \"base_default_next\" : \"node_113\",\n \"next_tables\" : {\n \"int_tna_parser_emulator148_0\" : \"node_113\"\n },\n \"default_entry\" : {\n \"action_id\" : 144,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_parser_emulator_parse_int_ingress_drop_0\",\n \"id\" : 71,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 165,\n \"column\" : 12,\n \"source_fragment\" : \"parse_int_ingress_drop()\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [125],\n \"actions\" : [\"FabricEgress.parser_emulator.parse_int_ingress_drop\"],\n \"base_default_next\" : \"tbl_int_tna_parser_emulator166_0\",\n \"next_tables\" : {\n \"FabricEgress.parser_emulator.parse_int_ingress_drop\" : \"tbl_int_tna_parser_emulator166_0\"\n },\n \"default_entry\" : {\n \"action_id\" : 125,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_int_tna_parser_emulator166_0\",\n \"id\" : 72,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 166,\n \"column\" : 12,\n \"source_fragment\" : \"recirculate_preserving_field_list(NO_PRESERVATION)\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [146],\n \"actions\" : [\"int_tna_parser_emulator166_0\"],\n \"base_default_next\" : \"tbl_int_tna_parser_emulator173_0\",\n \"next_tables\" : {\n \"int_tna_parser_emulator166_0\" : \"tbl_int_tna_parser_emulator173_0\"\n },\n \"default_entry\" : {\n \"action_id\" : 146,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_parser_emulator_parse_int_report_mirror_0\",\n \"id\" : 73,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 168,\n \"column\" : 12,\n \"source_fragment\" : \"parse_int_report_mirror()\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [127],\n \"actions\" : [\"FabricEgress.parser_emulator.parse_int_report_mirror\"],\n \"base_default_next\" : \"tbl_int_tna_parser_emulator169_0\",\n \"next_tables\" : {\n \"FabricEgress.parser_emulator.parse_int_report_mirror\" : \"tbl_int_tna_parser_emulator169_0\"\n },\n \"default_entry\" : {\n \"action_id\" : 127,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_int_tna_parser_emulator169_0\",\n \"id\" : 74,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 169,\n \"column\" : 12,\n \"source_fragment\" : \"recirculate_preserving_field_list(PRESERVE_INT_MD)\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [147],\n \"actions\" : [\"int_tna_parser_emulator169_0\"],\n \"base_default_next\" : \"tbl_int_tna_parser_emulator173_0\",\n \"next_tables\" : {\n \"int_tna_parser_emulator169_0\" : \"tbl_int_tna_parser_emulator173_0\"\n },\n \"default_entry\" : {\n \"action_id\" : 147,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_int_tna_parser_emulator173_0\",\n \"id\" : 75,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 173,\n \"column\" : 27,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [148],\n \"actions\" : [\"int_tna_parser_emulator173_0\"],\n \"base_default_next\" : \"FabricEgress.pkt_io_egress.switch_info\",\n \"next_tables\" : {\n \"int_tna_parser_emulator173_0\" : \"FabricEgress.pkt_io_egress.switch_info\"\n },\n \"default_entry\" : {\n \"action_id\" : 148,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricEgress.pkt_io_egress.switch_info\",\n \"id\" : 76,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 39,\n \"column\" : 10,\n \"source_fragment\" : \"switch_info\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [113, 105],\n \"actions\" : [\"FabricEgress.pkt_io_egress.set_switch_info\", \"nop\"],\n \"base_default_next\" : \"node_120\",\n \"next_tables\" : {\n \"FabricEgress.pkt_io_egress.set_switch_info\" : \"node_120\",\n \"nop\" : \"node_120\"\n },\n \"default_entry\" : {\n \"action_id\" : 105,\n \"action_const\" : false,\n \"action_data\" : [],\n \"action_entry_const\" : false\n }\n },\n {\n \"name\" : \"tbl_packetio51\",\n \"id\" : 77,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 51,\n \"column\" : 12,\n \"source_fragment\" : \"hdr.packet_in.setValid(); ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [149],\n \"actions\" : [\"packetio51\"],\n \"base_default_next\" : \"node_122\",\n \"next_tables\" : {\n \"packetio51\" : \"node_122\"\n },\n \"default_entry\" : {\n \"action_id\" : 149,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_packetio60\",\n \"id\" : 78,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 60,\n \"column\" : 37,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [150],\n \"actions\" : [\"packetio60\"],\n \"base_default_next\" : \"node_124\",\n \"next_tables\" : {\n \"packetio60\" : \"node_124\"\n },\n \"default_entry\" : {\n \"action_id\" : 150,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricEgress.stats.flows\",\n \"id\" : 79,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/stats.p4\",\n \"line\" : 53,\n \"column\" : 10,\n \"source_fragment\" : \"flows\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"stats_flow_id\",\n \"target\" : [\"_egress_bridged36\", \"_base_stats_flow_id11\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"eg_port\",\n \"target\" : [\"standard_metadata\", \"egress_port\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [112],\n \"actions\" : [\"FabricEgress.stats.count\"],\n \"base_default_next\" : \"node_126\",\n \"next_tables\" : {\n \"FabricEgress.stats.count\" : \"node_126\"\n },\n \"default_entry\" : {\n \"action_id\" : 112,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_next283\",\n \"id\" : 80,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 283,\n \"column\" : 50,\n \"source_fragment\" : \"= INT_REPORT_TYPE_NO_REPORT; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [151],\n \"actions\" : [\"next283\"],\n \"base_default_next\" : \"node_128\",\n \"next_tables\" : {\n \"next283\" : \"node_128\"\n },\n \"default_entry\" : {\n \"action_id\" : 151,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_egress_next_pop_mpls_if_present\",\n \"id\" : 81,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 289,\n \"column\" : 36,\n \"source_fragment\" : \"pop_mpls_if_present()\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [114],\n \"actions\" : [\"FabricEgress.egress_next.pop_mpls_if_present\"],\n \"base_default_next\" : \"node_132\",\n \"next_tables\" : {\n \"FabricEgress.egress_next.pop_mpls_if_present\" : \"node_132\"\n },\n \"default_entry\" : {\n \"action_id\" : 114,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_egress_next_set_mpls\",\n \"id\" : 82,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 291,\n \"column\" : 12,\n \"source_fragment\" : \"set_mpls()\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [115],\n \"actions\" : [\"FabricEgress.egress_next.set_mpls\"],\n \"base_default_next\" : \"node_132\",\n \"next_tables\" : {\n \"FabricEgress.egress_next.set_mpls\" : \"node_132\"\n },\n \"default_entry\" : {\n \"action_id\" : 115,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricEgress.egress_next.egress_vlan\",\n \"id\" : 83,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 264,\n \"column\" : 10,\n \"source_fragment\" : \"egress_vlan\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"vlan_id\",\n \"target\" : [\"_egress_bridged36\", \"_base_vlan_id6\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"eg_port\",\n \"target\" : [\"standard_metadata\", \"egress_port\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [116, 117, 118],\n \"actions\" : [\"FabricEgress.egress_next.push_vlan\", \"FabricEgress.egress_next.pop_vlan\", \"FabricEgress.egress_next.drop\"],\n \"base_default_next\" : \"node_134\",\n \"next_tables\" : {\n \"FabricEgress.egress_next.push_vlan\" : \"node_134\",\n \"FabricEgress.egress_next.pop_vlan\" : \"node_134\",\n \"FabricEgress.egress_next.drop\" : \"node_134\"\n },\n \"default_entry\" : {\n \"action_id\" : 118,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_next323\",\n \"id\" : 84,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 323,\n \"column\" : 25,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [153],\n \"actions\" : [\"next323\"],\n \"base_default_next\" : \"node_136\",\n \"next_tables\" : {\n \"next323\" : \"node_136\"\n },\n \"default_entry\" : {\n \"action_id\" : 153,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_next325\",\n \"id\" : 85,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 325,\n \"column\" : 25,\n \"source_fragment\" : \"= 1; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [152],\n \"actions\" : [\"next325\"],\n \"base_default_next\" : \"node_148\",\n \"next_tables\" : {\n \"next325\" : \"node_148\"\n },\n \"default_entry\" : {\n \"action_id\" : 152,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_next333\",\n \"id\" : 86,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 333,\n \"column\" : 33,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [154],\n \"actions\" : [\"next333\"],\n \"base_default_next\" : \"node_141\",\n \"next_tables\" : {\n \"next333\" : \"node_141\"\n },\n \"default_entry\" : {\n \"action_id\" : 154,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_next336\",\n \"id\" : 87,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 336,\n \"column\" : 29,\n \"source_fragment\" : \"= 1; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [155],\n \"actions\" : [\"next336\"],\n \"base_default_next\" : \"node_148\",\n \"next_tables\" : {\n \"next336\" : \"node_148\"\n },\n \"default_entry\" : {\n \"action_id\" : 155,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_next343\",\n \"id\" : 88,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 343,\n \"column\" : 39,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [156],\n \"actions\" : [\"next343\"],\n \"base_default_next\" : \"node_146\",\n \"next_tables\" : {\n \"next343\" : \"node_146\"\n },\n \"default_entry\" : {\n \"action_id\" : 156,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_next346\",\n \"id\" : 89,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 346,\n \"column\" : 29,\n \"source_fragment\" : \"= 1; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [157],\n \"actions\" : [\"next346\"],\n \"base_default_next\" : \"node_148\",\n \"next_tables\" : {\n \"next346\" : \"node_148\"\n },\n \"default_entry\" : {\n \"action_id\" : 157,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_upf610\",\n \"id\" : 90,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 610,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.inner_udp.setValid(); ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [158],\n \"actions\" : [\"upf610\"],\n \"base_default_next\" : \"node_152\",\n \"next_tables\" : {\n \"upf610\" : \"node_152\"\n },\n \"default_entry\" : {\n \"action_id\" : 158,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_upf615\",\n \"id\" : 91,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 615,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.inner_tcp.setValid(); ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [159],\n \"actions\" : [\"upf615\"],\n \"base_default_next\" : \"node_154\",\n \"next_tables\" : {\n \"upf615\" : \"node_154\"\n },\n \"default_entry\" : {\n \"action_id\" : 159,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_upf620\",\n \"id\" : 92,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 620,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.inner_icmp.setValid(); ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [160],\n \"actions\" : [\"upf620\"],\n \"base_default_next\" : \"FabricEgress.upf.gtpu_encap\",\n \"next_tables\" : {\n \"upf620\" : \"FabricEgress.upf.gtpu_encap\"\n },\n \"default_entry\" : {\n \"action_id\" : 160,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricEgress.upf.gtpu_encap\",\n \"id\" : 93,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 597,\n \"column\" : 10,\n \"source_fragment\" : \"gtpu_encap\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [122, 123],\n \"actions\" : [\"FabricEgress.upf.gtpu_only\", \"FabricEgress.upf.gtpu_with_psc\"],\n \"base_default_next\" : \"FabricEgress.upf.eg_tunnel_peers\",\n \"next_tables\" : {\n \"FabricEgress.upf.gtpu_only\" : \"FabricEgress.upf.eg_tunnel_peers\",\n \"FabricEgress.upf.gtpu_with_psc\" : \"FabricEgress.upf.eg_tunnel_peers\"\n },\n \"default_entry\" : {\n \"action_id\" : 122,\n \"action_const\" : false,\n \"action_data\" : [],\n \"action_entry_const\" : false\n }\n },\n {\n \"name\" : \"FabricEgress.upf.eg_tunnel_peers\",\n \"id\" : 94,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 491,\n \"column\" : 10,\n \"source_fragment\" : \"eg_tunnel_peers\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"tun_peer_id\",\n \"target\" : [\"_egress_bridged36\", \"_upf_tun_peer_id13\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 256,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [121, 107],\n \"actions\" : [\"FabricEgress.upf.load_tunnel_params\", \"nop\"],\n \"base_default_next\" : \"node_158\",\n \"next_tables\" : {\n \"FabricEgress.upf.load_tunnel_params\" : \"node_158\",\n \"nop\" : \"node_158\"\n },\n \"default_entry\" : {\n \"action_id\" : 107,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_upf628\",\n \"id\" : 95,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 628,\n \"column\" : 16,\n \"source_fragment\" : \"terminations_counter.count((bit<32>)fabric_md.bridged.upf.upf_ctr_id)\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [161],\n \"actions\" : [\"upf628\"],\n \"base_default_next\" : \"tbl_int128\",\n \"next_tables\" : {\n \"upf628\" : \"tbl_int128\"\n },\n \"default_entry\" : {\n \"action_id\" : 161,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_int128\",\n \"id\" : 96,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 128,\n \"column\" : 4,\n \"source_fragment\" : \"egress_headers_t hdr = hdr_v1model.egress; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [162],\n \"actions\" : [\"int128\"],\n \"base_default_next\" : \"FabricEgress.int_egress.queue_latency_thresholds\",\n \"next_tables\" : {\n \"int128\" : \"FabricEgress.int_egress.queue_latency_thresholds\"\n },\n \"default_entry\" : {\n \"action_id\" : 162,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricEgress.int_egress.queue_latency_thresholds\",\n \"id\" : 97,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 159,\n \"column\" : 10,\n \"source_fragment\" : \"queue_latency_thresholds\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"egress_qid\",\n \"target\" : [\"scalars\", \"int_egress_egress_qid\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"range\",\n \"name\" : \"hop_latency_upper\",\n \"target\" : [\"scalars\", \"key_0\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"range\",\n \"name\" : \"hop_latency_lower\",\n \"target\" : [\"scalars\", \"key_1\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"range\",\n \"type\" : \"simple\",\n \"max_size\" : 128,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [128, 129, 108],\n \"actions\" : [\"FabricEgress.int_egress.check_quota\", \"FabricEgress.int_egress.reset_quota\", \"nop\"],\n \"base_default_next\" : \"FabricEgress.int_egress.config\",\n \"next_tables\" : {\n \"FabricEgress.int_egress.check_quota\" : \"FabricEgress.int_egress.config\",\n \"FabricEgress.int_egress.reset_quota\" : \"FabricEgress.int_egress.config\",\n \"nop\" : \"FabricEgress.int_egress.config\"\n },\n \"default_entry\" : {\n \"action_id\" : 108,\n \"action_const\" : false,\n \"action_data\" : [],\n \"action_entry_const\" : false\n }\n },\n {\n \"name\" : \"FabricEgress.int_egress.config\",\n \"id\" : 98,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 183,\n \"column\" : 10,\n \"source_fragment\" : \"config\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [130],\n \"actions\" : [\"FabricEgress.int_egress.set_config\"],\n \"base_default_next\" : \"tbl_int373\",\n \"next_tables\" : {\n \"FabricEgress.int_egress.set_config\" : \"tbl_int373\"\n },\n \"default_entry\" : {\n \"action_id\" : 130,\n \"action_const\" : false,\n \"action_data\" : [\"0xffffff00\", \"0xffffc0000000\"],\n \"action_entry_const\" : false\n }\n },\n {\n \"name\" : \"tbl_int373\",\n \"id\" : 99,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 373,\n \"column\" : 38,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [164],\n \"actions\" : [\"int373\"],\n \"base_default_next\" : \"node_164\",\n \"next_tables\" : {\n \"int373\" : \"node_164\"\n },\n \"default_entry\" : {\n \"action_id\" : 164,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricEgress.int_egress.report\",\n \"id\" : 100,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 260,\n \"column\" : 10,\n \"source_fragment\" : \"report\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"bmd_type\",\n \"target\" : [\"int_egress_fabric_md_int_report_md\", \"bmd_type\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"mirror_type\",\n \"target\" : [\"int_egress_fabric_md_int_report_md\", \"mirror_type\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"int_report_type\",\n \"target\" : [\"int_egress_fabric_md_int_report_md\", \"report_type\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 6,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [131, 132, 133, 134, 109],\n \"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\"],\n \"base_default_next\" : \"FabricEgress.int_egress.adjust_int_report_hdr_length\",\n \"next_tables\" : {\n \"FabricEgress.int_egress.do_local_report_encap\" : \"FabricEgress.int_egress.adjust_int_report_hdr_length\",\n \"FabricEgress.int_egress.do_local_report_encap_mpls\" : \"FabricEgress.int_egress.adjust_int_report_hdr_length\",\n \"FabricEgress.int_egress.do_drop_report_encap\" : \"FabricEgress.int_egress.adjust_int_report_hdr_length\",\n \"FabricEgress.int_egress.do_drop_report_encap_mpls\" : \"FabricEgress.int_egress.adjust_int_report_hdr_length\",\n \"nop\" : \"FabricEgress.int_egress.adjust_int_report_hdr_length\"\n },\n \"default_entry\" : {\n \"action_id\" : 109,\n \"action_const\" : false,\n \"action_data\" : [],\n \"action_entry_const\" : false\n }\n },\n {\n \"name\" : \"FabricEgress.int_egress.int_metadata\",\n \"id\" : 101,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 315,\n \"column\" : 10,\n \"source_fragment\" : \"int_metadata\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"int_report_type\",\n \"target\" : [\"_egress_bridged36\", \"_int_bmd_report_type21\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"drop_ctl\",\n \"target\" : [\"scalars\", \"userMetadata._drop_ctl2\"],\n \"mask\" : null\n },\n {\n \"match_type\" : \"exact\",\n \"name\" : \"queue_report\",\n \"target\" : [\"scalars\", \"userMetadata._egress_int_md_queue_report43\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 2,\n \"with_counters\" : true,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [135, 110],\n \"actions\" : [\"FabricEgress.int_egress.init_int_metadata\", \"nop\"],\n \"base_default_next\" : null,\n \"next_tables\" : {\n \"__HIT__\" : \"tbl_int383\",\n \"__MISS__\" : \"FabricEgress.int_egress.adjust_int_report_hdr_length\"\n },\n \"default_entry\" : {\n \"action_id\" : 110,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n },\n \"entries\" : [\n {\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 327,\n \"column\" : 12,\n \"source_fragment\" : \"(INT_REPORT_TYPE_FLOW, 0, false): init_int_metadata(INT_REPORT_TYPE_FLOW)\"\n },\n \"match_key\" : [\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x01\"\n },\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x00\"\n },\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x00\"\n }\n ],\n \"action_entry\" : {\n \"action_id\" : 135,\n \"action_data\" : [\"0x1\"]\n },\n \"priority\" : 1\n },\n {\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 329,\n \"column\" : 12,\n \"source_fragment\" : \"(INT_REPORT_TYPE_FLOW, 1, false): init_int_metadata(INT_REPORT_TYPE_DROP)\"\n },\n \"match_key\" : [\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x01\"\n },\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x01\"\n },\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x00\"\n }\n ],\n \"action_entry\" : {\n \"action_id\" : 135,\n \"action_data\" : [\"0x4\"]\n },\n \"priority\" : 2\n }\n ]\n },\n {\n \"name\" : \"tbl_int383\",\n \"id\" : 102,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 383,\n \"column\" : 16,\n \"source_fragment\" : \"clone_preserving_field_list(CloneType.E2E, ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [163],\n \"actions\" : [\"int383\"],\n \"base_default_next\" : \"FabricEgress.int_egress.adjust_int_report_hdr_length\",\n \"next_tables\" : {\n \"int383\" : \"FabricEgress.int_egress.adjust_int_report_hdr_length\"\n },\n \"default_entry\" : {\n \"action_id\" : 163,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricEgress.int_egress.adjust_int_report_hdr_length\",\n \"id\" : 103,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 347,\n \"column\" : 10,\n \"source_fragment\" : \"adjust_int_report_hdr_length\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"is_int_wip\",\n \"target\" : [\"int_egress_fabric_md_bridged\", \"_int_bmd_wip_type26\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 2,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [111, 136],\n \"actions\" : [\"nop\", \"FabricEgress.int_egress.adjust_ip_udp_len\"],\n \"base_default_next\" : \"tbl_slicing189\",\n \"next_tables\" : {\n \"nop\" : \"tbl_slicing189\",\n \"FabricEgress.int_egress.adjust_ip_udp_len\" : \"tbl_slicing189\"\n },\n \"default_entry\" : {\n \"action_id\" : 111,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n },\n \"entries\" : [\n {\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 358,\n \"column\" : 12,\n \"source_fragment\" : \"INT_IS_WIP: adjust_ip_udp_len(INT_WIP_ADJUST_IP_BYTES, INT_WIP_ADJUST_UDP_BYTES)\"\n },\n \"match_key\" : [\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x01\"\n }\n ],\n \"action_entry\" : {\n \"action_id\" : 136,\n \"action_data\" : [\"0xfff2\", \"0xffde\"]\n },\n \"priority\" : 1\n },\n {\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 359,\n \"column\" : 12,\n \"source_fragment\" : \"INT_IS_WIP_WITH_MPLS: adjust_ip_udp_len(INT_WIP_ADJUST_IP_MPLS_BYTES, INT_WIP_ADJUST_UDP_MPLS_BYTES)\"\n },\n \"match_key\" : [\n {\n \"match_type\" : \"exact\",\n \"key\" : \"0x02\"\n }\n ],\n \"action_entry\" : {\n \"action_id\" : 136,\n \"action_data\" : [\"0xffee\", \"0xffda\"]\n },\n \"priority\" : 2\n }\n ]\n },\n {\n \"name\" : \"tbl_slicing189\",\n \"id\" : 104,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 189,\n \"column\" : 4,\n \"source_fragment\" : \"bit<6> tmp_dscp = fabric_md.bridged.base.slice_tc; ...\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [166],\n \"actions\" : [\"slicing189\"],\n \"base_default_next\" : \"FabricEgress.dscp_rewriter.rewriter\",\n \"next_tables\" : {\n \"slicing189\" : \"FabricEgress.dscp_rewriter.rewriter\"\n },\n \"default_entry\" : {\n \"action_id\" : 166,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"FabricEgress.dscp_rewriter.rewriter\",\n \"id\" : 105,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 201,\n \"column\" : 10,\n \"source_fragment\" : \"rewriter\"\n },\n \"key\" : [\n {\n \"match_type\" : \"exact\",\n \"name\" : \"eg_port\",\n \"target\" : [\"standard_metadata\", \"egress_port\"],\n \"mask\" : null\n }\n ],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 512,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [119, 120, 106],\n \"actions\" : [\"FabricEgress.dscp_rewriter.rewrite\", \"FabricEgress.dscp_rewriter.clear\", \"nop\"],\n \"base_default_next\" : null,\n \"next_tables\" : {\n \"__HIT__\" : \"node_171\",\n \"__MISS__\" : \"node_173\"\n },\n \"default_entry\" : {\n \"action_id\" : 106,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_slicing217\",\n \"id\" : 106,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 217,\n \"column\" : 30,\n \"source_fragment\" : \"=\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [165],\n \"actions\" : [\"slicing217\"],\n \"base_default_next\" : \"node_173\",\n \"next_tables\" : {\n \"slicing217\" : \"node_173\"\n },\n \"default_entry\" : {\n \"action_id\" : 165,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_fabric_v1model170\",\n \"id\" : 107,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 170,\n \"column\" : 12,\n \"source_fragment\" : \"recirculate_preserving_field_list(NO_PRESERVATION)\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [167],\n \"actions\" : [\"fabric_v1model170\"],\n \"base_default_next\" : \"node_175\",\n \"next_tables\" : {\n \"fabric_v1model170\" : \"node_175\"\n },\n \"default_entry\" : {\n \"action_id\" : 167,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n },\n {\n \"name\" : \"tbl_fabric_v1model174\",\n \"id\" : 108,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 174,\n \"column\" : 12,\n \"source_fragment\" : \"mark_to_drop(standard_md)\"\n },\n \"key\" : [],\n \"match_type\" : \"exact\",\n \"type\" : \"simple\",\n \"max_size\" : 1024,\n \"with_counters\" : false,\n \"support_timeout\" : false,\n \"direct_meters\" : null,\n \"action_ids\" : [168],\n \"actions\" : [\"fabric_v1model174\"],\n \"base_default_next\" : null,\n \"next_tables\" : {\n \"fabric_v1model174\" : null\n },\n \"default_entry\" : {\n \"action_id\" : 168,\n \"action_const\" : true,\n \"action_data\" : [],\n \"action_entry_const\" : true\n }\n }\n ],\n \"action_profiles\" : [],\n \"conditionals\" : [\n {\n \"name\" : \"node_97\",\n \"id\" : 31,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 135,\n \"column\" : 12,\n \"source_fragment\" : \"fabric_md\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._skip_egress0\"]\n }\n }\n },\n \"true_next\" : \"tbl_fabric_v1model136\",\n \"false_next\" : \"node_99\"\n },\n {\n \"name\" : \"node_99\",\n \"id\" : 32,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 140,\n \"column\" : 13,\n \"source_fragment\" : \"standard_md.instance_type == 2\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"instance_type\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00000002\"\n }\n }\n },\n \"true_next\" : \"tbl_int_tna_parser_emulator14\",\n \"false_next\" : \"node_109\"\n },\n {\n \"name\" : \"node_101\",\n \"id\" : 33,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 145,\n \"column\" : 11,\n \"source_fragment\" : \"hdr_v1model.ingress.gtpu.isValid() || hdr_v1model.ingress.vxlan.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"or\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"$valid$\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_vxlan15\", \"$valid$\"]\n }\n }\n }\n }\n },\n \"true_next\" : \"tbl_int_tna_parser_emulator148\",\n \"false_next\" : \"node_103\"\n },\n {\n \"name\" : \"node_103\",\n \"id\" : 34,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 164,\n \"column\" : 12,\n \"source_fragment\" : \"(bit<8>)fabric_md.bridged.int_bmd.report_type == BridgedMdType_t.INT_INGRESS_DROP\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._recirc_preserved_report_type47\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n }\n },\n \"true_next\" : \"tbl_parser_emulator_parse_int_ingress_drop\",\n \"false_next\" : \"tbl_parser_emulator_parse_int_report_mirror\"\n },\n {\n \"name\" : \"node_109\",\n \"id\" : 35,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 150,\n \"column\" : 11,\n \"source_fragment\" : \"(bit<8>)fabric_md.egress.bridged.int_bmd.report_type == BridgedMdType_t.INT_INGRESS_DROP\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_int_bmd_report_type21\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n }\n },\n \"true_next\" : \"tbl_int_tna_parser_emulator14_0\",\n \"false_next\" : \"FabricEgress.pkt_io_egress.switch_info\"\n },\n {\n \"name\" : \"node_111\",\n \"id\" : 36,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 145,\n \"column\" : 11,\n \"source_fragment\" : \"hdr_v1model.ingress.gtpu.isValid() || hdr_v1model.ingress.vxlan.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"or\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_gtpu12\", \"$valid$\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_vxlan15\", \"$valid$\"]\n }\n }\n }\n }\n },\n \"true_next\" : \"tbl_int_tna_parser_emulator148_0\",\n \"false_next\" : \"node_113\"\n },\n {\n \"name\" : \"node_113\",\n \"id\" : 37,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int_tna_parser_emulator.p4\",\n \"line\" : 164,\n \"column\" : 12,\n \"source_fragment\" : \"(bit<8>)fabric_md.bridged.int_bmd.report_type == BridgedMdType_t.INT_INGRESS_DROP\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"&\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_int_bmd_report_type21\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xff\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n }\n },\n \"true_next\" : \"tbl_parser_emulator_parse_int_ingress_drop_0\",\n \"false_next\" : \"tbl_parser_emulator_parse_int_report_mirror_0\"\n },\n {\n \"name\" : \"node_120\",\n \"id\" : 38,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 50,\n \"column\" : 12,\n \"source_fragment\" : \"standard_md.egress_port == fabric_md.cpu_port\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_port\"]\n },\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_cpu_port37\"]\n }\n }\n },\n \"true_next\" : \"tbl_packetio51\",\n \"false_next\" : \"node_122\"\n },\n {\n \"name\" : \"node_122\",\n \"id\" : 39,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/packetio.p4\",\n \"line\" : 58,\n \"column\" : 12,\n \"source_fragment\" : \"hdr.fake_ethernet.isValid() && ...\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"and\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_fake_ethernet2\", \"$valid$\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_fake_ethernet2\", \"ether_type\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0xbf03\"\n }\n }\n }\n }\n },\n \"true_next\" : \"tbl_packetio60\",\n \"false_next\" : \"node_124\"\n },\n {\n \"name\" : \"node_124\",\n \"id\" : 40,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/stats.p4\",\n \"line\" : 67,\n \"column\" : 12,\n \"source_fragment\" : \"bmd_type == BridgedMdType_t.INGRESS_TO_EGRESS\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_bmd_type0\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n }\n },\n \"true_next\" : \"FabricEgress.stats.flows\",\n \"false_next\" : \"node_126\"\n },\n {\n \"name\" : \"node_126\",\n \"id\" : 41,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 280,\n \"column\" : 12,\n \"source_fragment\" : \"fabric_md.bridged.base.is_multicast ...\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"and\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_is_multicast4\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_ig_port3\"]\n },\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"standard_metadata\", \"egress_port\"]\n }\n }\n }\n }\n },\n \"true_next\" : \"tbl_next283\",\n \"false_next\" : \"node_128\"\n },\n {\n \"name\" : \"node_128\",\n \"id\" : 42,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 288,\n \"column\" : 12,\n \"source_fragment\" : \"fabric_md.bridged.base.mpls_label == 0\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_mpls_label2\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x000000\"\n }\n }\n },\n \"true_next\" : \"node_129\",\n \"false_next\" : \"tbl_egress_next_set_mpls\"\n },\n {\n \"name\" : \"node_129\",\n \"id\" : 43,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 289,\n \"column\" : 16,\n \"source_fragment\" : \"hdr.mpls.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_mpls6\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_egress_next_pop_mpls_if_present\",\n \"false_next\" : \"node_132\"\n },\n {\n \"name\" : \"node_132\",\n \"id\" : 44,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 159,\n \"column\" : 39,\n \"source_fragment\" : \"fabric_md\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._egress_is_int_recirc45\"]\n }\n }\n },\n \"false_next\" : \"FabricEgress.egress_next.egress_vlan\",\n \"true_next\" : \"node_134\"\n },\n {\n \"name\" : \"node_134\",\n \"id\" : 45,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 322,\n \"column\" : 12,\n \"source_fragment\" : \"hdr.mpls.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_mpls6\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_next323\",\n \"false_next\" : \"node_138\"\n },\n {\n \"name\" : \"node_136\",\n \"id\" : 46,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 324,\n \"column\" : 16,\n \"source_fragment\" : \"hdr.mpls.ttl == 0\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_mpls6\", \"ttl\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n }\n },\n \"true_next\" : \"tbl_next325\",\n \"false_next\" : \"node_148\"\n },\n {\n \"name\" : \"node_138\",\n \"id\" : 47,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 331,\n \"column\" : 16,\n \"source_fragment\" : \"hdr.ipv4.isValid() && fabric_md.bridged.base.fwd_type != FWD_BRIDGING\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"and\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"$valid$\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"!=\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_fwd_type5\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n }\n }\n }\n },\n \"true_next\" : \"node_139\",\n \"false_next\" : \"node_143\"\n },\n {\n \"name\" : \"node_139\",\n \"id\" : 48,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 319,\n \"column\" : 28,\n \"source_fragment\" : \"(fabric_md.bridged.bmd_type == BridgedMdType_t.INT_INGRESS_DROP) || ...\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"or\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_bmd_type0\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_bmd_type0\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n }\n }\n }\n },\n \"false_next\" : \"tbl_next333\",\n \"true_next\" : \"node_141\"\n },\n {\n \"name\" : \"node_141\",\n \"id\" : 49,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 335,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.ipv4.ttl == 0\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"ttl\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n }\n },\n \"true_next\" : \"tbl_next336\",\n \"false_next\" : \"node_148\"\n },\n {\n \"name\" : \"node_143\",\n \"id\" : 50,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 341,\n \"column\" : 23,\n \"source_fragment\" : \"hdr.ipv6.isValid() && fabric_md.bridged.base.fwd_type != FWD_BRIDGING\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"and\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv68\", \"$valid$\"]\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"!=\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_base_fwd_type5\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n }\n }\n }\n },\n \"true_next\" : \"node_144\",\n \"false_next\" : \"node_148\"\n },\n {\n \"name\" : \"node_144\",\n \"id\" : 51,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 319,\n \"column\" : 28,\n \"source_fragment\" : \"(fabric_md.bridged.bmd_type == BridgedMdType_t.INT_INGRESS_DROP) || ...\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"or\",\n \"left\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_bmd_type0\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x04\"\n }\n }\n },\n \"right\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_bmd_type0\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x02\"\n }\n }\n }\n }\n },\n \"false_next\" : \"tbl_next343\",\n \"true_next\" : \"node_146\"\n },\n {\n \"name\" : \"node_146\",\n \"id\" : 52,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/next.p4\",\n \"line\" : 345,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.ipv6.hop_limit == 0\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv68\", \"hop_limit\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x00\"\n }\n }\n },\n \"true_next\" : \"tbl_next346\",\n \"false_next\" : \"node_148\"\n },\n {\n \"name\" : \"node_148\",\n \"id\" : 53,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 607,\n \"column\" : 13,\n \"source_fragment\" : \"fabric_md.bridged\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_upf_skip_upf17\"]\n }\n }\n },\n \"false_next\" : \"node_149\",\n \"true_next\" : \"tbl_int128\"\n },\n {\n \"name\" : \"node_149\",\n \"id\" : 54,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 608,\n \"column\" : 16,\n \"source_fragment\" : \"fabric_md.bridged\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_upf_needs_gtpu_encap16\"]\n }\n }\n },\n \"true_next\" : \"node_150\",\n \"false_next\" : \"node_158\"\n },\n {\n \"name\" : \"node_150\",\n \"id\" : 55,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 609,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.udp.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_udp10\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_upf610\",\n \"false_next\" : \"node_152\"\n },\n {\n \"name\" : \"node_152\",\n \"id\" : 56,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 614,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.tcp.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_tcp9\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_upf615\",\n \"false_next\" : \"node_154\"\n },\n {\n \"name\" : \"node_154\",\n \"id\" : 57,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 619,\n \"column\" : 20,\n \"source_fragment\" : \"hdr.icmp.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_icmp11\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_upf620\",\n \"false_next\" : \"FabricEgress.upf.gtpu_encap\"\n },\n {\n \"name\" : \"node_158\",\n \"id\" : 58,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/upf.p4\",\n \"line\" : 627,\n \"column\" : 17,\n \"source_fragment\" : \"fabric_md.bridged\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_bridged36\", \"_upf_skip_egress_upf_ctr18\"]\n }\n }\n },\n \"false_next\" : \"tbl_upf628\",\n \"true_next\" : \"tbl_int128\"\n },\n {\n \"name\" : \"node_164\",\n \"id\" : 59,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/int.p4\",\n \"line\" : 375,\n \"column\" : 12,\n \"source_fragment\" : \"fabric_md.int_report_md.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"int_egress_fabric_md_int_report_md\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"FabricEgress.int_egress.report\",\n \"false_next\" : \"FabricEgress.int_egress.int_metadata\"\n },\n {\n \"name\" : \"node_171\",\n \"id\" : 60,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/slicing.p4\",\n \"line\" : 216,\n \"column\" : 16,\n \"source_fragment\" : \"hdr.ipv4.isValid()\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"$valid$\"]\n }\n }\n },\n \"true_next\" : \"tbl_slicing217\",\n \"false_next\" : \"node_173\"\n },\n {\n \"name\" : \"node_173\",\n \"id\" : 61,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 168,\n \"column\" : 12,\n \"source_fragment\" : \"fabric_md\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._do_upf_uplink_recirc1\"]\n }\n }\n },\n \"true_next\" : \"tbl_fabric_v1model170\",\n \"false_next\" : \"node_175\"\n },\n {\n \"name\" : \"node_175\",\n \"id\" : 62,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"line\" : 173,\n \"column\" : 12,\n \"source_fragment\" : \"fabric_md.drop_ctl == 1\"\n },\n \"expression\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"==\",\n \"left\" : {\n \"type\" : \"field\",\n \"value\" : [\"scalars\", \"userMetadata._drop_ctl2\"]\n },\n \"right\" : {\n \"type\" : \"hexstr\",\n \"value\" : \"0x01\"\n }\n }\n },\n \"false_next\" : null,\n \"true_next\" : \"tbl_fabric_v1model174\"\n }\n ]\n }\n ],\n \"checksums\" : [\n {\n \"name\" : \"cksum\",\n \"id\" : 0,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4\",\n \"line\" : 55,\n \"column\" : 8,\n \"source_fragment\" : \"update_checksum(hdr.ingress.ipv4.isValid(), ...\"\n },\n \"target\" : [\"_ingress_ipv47\", \"hdr_checksum\"],\n \"type\" : \"generic\",\n \"calculation\" : \"calc_3\",\n \"verify\" : false,\n \"update\" : true,\n \"if_cond\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"$valid$\"]\n }\n }\n }\n },\n {\n \"name\" : \"cksum_0\",\n \"id\" : 1,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4\",\n \"line\" : 73,\n \"column\" : 8,\n \"source_fragment\" : \"update_checksum(hdr.ingress.inner_ipv4.isValid(), ...\"\n },\n \"target\" : [\"_ingress_inner_ipv418\", \"hdr_checksum\"],\n \"type\" : \"generic\",\n \"calculation\" : \"calc_4\",\n \"verify\" : false,\n \"update\" : true,\n \"if_cond\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"$valid$\"]\n }\n }\n }\n },\n {\n \"name\" : \"cksum_1\",\n \"id\" : 2,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4\",\n \"line\" : 92,\n \"column\" : 8,\n \"source_fragment\" : \"update_checksum(hdr.egress.report_ipv4.isValid(), ...\"\n },\n \"target\" : [\"_egress_report_ipv427\", \"hdr_checksum\"],\n \"type\" : \"generic\",\n \"calculation\" : \"calc_5\",\n \"verify\" : false,\n \"update\" : true,\n \"if_cond\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_egress_report_ipv427\", \"$valid$\"]\n }\n }\n }\n },\n {\n \"name\" : \"cksum_2\",\n \"id\" : 3,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4\",\n \"line\" : 13,\n \"column\" : 8,\n \"source_fragment\" : \"verify_checksum(hdr.ingress.ipv4.isValid(), ...\"\n },\n \"target\" : [\"_ingress_ipv47\", \"hdr_checksum\"],\n \"type\" : \"generic\",\n \"calculation\" : \"calc_6\",\n \"verify\" : true,\n \"update\" : false,\n \"if_cond\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_ipv47\", \"$valid$\"]\n }\n }\n }\n },\n {\n \"name\" : \"cksum_3\",\n \"id\" : 4,\n \"source_info\" : {\n \"filename\" : \"/home/ubuntu/fabric-tna/p4src/v1model/../v1model/include/control/checksum.p4\",\n \"line\" : 31,\n \"column\" : 8,\n \"source_fragment\" : \"verify_checksum(hdr.ingress.inner_ipv4.isValid(), ...\"\n },\n \"target\" : [\"_ingress_inner_ipv418\", \"hdr_checksum\"],\n \"type\" : \"generic\",\n \"calculation\" : \"calc_7\",\n \"verify\" : true,\n \"update\" : false,\n \"if_cond\" : {\n \"type\" : \"expression\",\n \"value\" : {\n \"op\" : \"d2b\",\n \"left\" : null,\n \"right\" : {\n \"type\" : \"field\",\n \"value\" : [\"_ingress_inner_ipv418\", \"$valid$\"]\n }\n }\n }\n }\n ],\n \"force_arith\" : [],\n \"extern_instances\" : [],\n \"field_aliases\" : [\n [\n \"queueing_metadata.enq_timestamp\",\n [\"standard_metadata\", \"enq_timestamp\"]\n ],\n [\n \"queueing_metadata.enq_qdepth\",\n [\"standard_metadata\", \"enq_qdepth\"]\n ],\n [\n \"queueing_metadata.deq_timedelta\",\n [\"standard_metadata\", \"deq_timedelta\"]\n ],\n [\n \"queueing_metadata.deq_qdepth\",\n [\"standard_metadata\", \"deq_qdepth\"]\n ],\n [\n \"intrinsic_metadata.ingress_global_timestamp\",\n [\"standard_metadata\", \"ingress_global_timestamp\"]\n ],\n [\n \"intrinsic_metadata.egress_global_timestamp\",\n [\"standard_metadata\", \"egress_global_timestamp\"]\n ],\n [\n \"intrinsic_metadata.mcast_grp\",\n [\"standard_metadata\", \"mcast_grp\"]\n ],\n [\n \"intrinsic_metadata.egress_rid\",\n [\"standard_metadata\", \"egress_rid\"]\n ],\n [\n \"intrinsic_metadata.priority\",\n [\"standard_metadata\", \"priority\"]\n ]\n ],\n \"program\" : \"/home/ubuntu/fabric-tna/p4src/v1model/fabric_v1model.p4\",\n \"__meta__\" : {\n \"version\" : [2, 23],\n \"compiler\" : \"https://github.com/p4lang/p4c\"\n }\n}" + } +} diff --git a/src/tests/p4-sd-fabric-svc-upf/topology/run-stratum.sh b/src/tests/p4-sd-fabric-svc-upf/topology/run-stratum.sh new file mode 100644 index 0000000000000000000000000000000000000000..d9e1dd56a2f5f1b4226f0049bb1665c079cce149 --- /dev/null +++ b/src/tests/p4-sd-fabric-svc-upf/topology/run-stratum.sh @@ -0,0 +1,51 @@ +#!/bin/bash +# Copyright 2022-2026 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 ;} + +rm "${READ_LOGS_FILE_PATH}" +rm "${WRITE_LOGS_FILE_PATH}" + +touch "${READ_LOGS_FILE_PATH}" +touch "${WRITE_LOGS_FILE_PATH}" + +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} +# -forwarding_pipeline_configs_file="pipeline_config.pb.txt" # -forwarding_pipeline_configs_file="/etc/stratum/pipeline_cfg.pb.txt" + +exit 0 diff --git a/src/tests/p4-topologies/README.md b/src/tests/p4-topologies/README.md new file mode 100644 index 0000000000000000000000000000000000000000..22060db4e3c5be46d90045b018786f9bbc6ea366 --- /dev/null +++ b/src/tests/p4-topologies/README.md @@ -0,0 +1,45 @@ +# Emulated Network Topologies for Easy Experimentation + +This repository contains emulated network topology implementations either based on Mininet or native switches that reside in Linux namespaces. + +## Switches in Mininet + +To deploy a Mininet-based network topology, first checkout Mininet: + +```bash +git clone ssh://git@gitlab.ubitech.eu:41621/nsit/etsi-tfs/mininet.git +``` + +This is an extended version of upstream Mininet that also supports: +- Stratum-based P4 switches +- Stratum-based P4 switches with dedicated Inband Network Telemetry (INT) interface. + +Install Mininet as follows: + +```bash +cd mininet/ +PYTHON=python3 util/install.sh -fnv +``` + +**Disclaimer:** When this Mininet branch becomes part of TFS, a new URL will be shared in this file so as everone can checkout this Mininet version. +For now, this remains a closed-source repo in UBITECH's GitLab. + +### Deploy example Mininet topologies + +All of the topologies in the following table employ Stratum-based bmv2 P4 switches within Mininet. +In the topologies that support INT, Stratum bmv2 switch is extended with an additional network interface that dispatches in-band network telemetry packets towards an external collector (e.g., TFS). + +| Topology | File | Command to Deploy | +| -----------------------: | :------------------------------- | :------------------------------------------------------------------ | +| Single switch | topo-mininet/1switch1path.py | sudo python3 topo-mininet/1switch1path.py | +| Single switch with INT | topo-mininet/1switch1path-int.py | sudo python3 topo-mininet/1switch1path-int.py --host-int-iface=eth0 | +| Three switches with INT | topo-mininet/3switch1path-int.py | sudo python3 topo-mininet/3switch1path-int.py --host-int-iface=eth0 | +| Five switches with INT | topo-mininet/5switch3path-int.py | sudo python3 topo-mininet/5switch3path-int.py --host-int-iface=eth0 | + +### Undeploy example Mininet topologies + +Just press Ctrl-D and Mininet stops. + +## Switches in Linux namespaces + +Follow the instruction in `topo-linux-ns/README.md`. diff --git a/src/tests/p4-topologies/test-scripts/p4-upf/README.md b/src/tests/p4-topologies/test-scripts/p4-upf/README.md new file mode 100644 index 0000000000000000000000000000000000000000..577e5dc29e277b91ad56f717802468157eb0038b --- /dev/null +++ b/src/tests/p4-topologies/test-scripts/p4-upf/README.md @@ -0,0 +1,25 @@ +# UPF Test + +If you have already deployed your UPF following the instructions provided in `src/tests/p4-sd-fabric-svc-upf/` and you want to perform a quick test without deploying a fully-fledged 5G system, you may execute the script in this folder. +All you need is to tweak the script's initial variables to fit your setup. + +## Where to deploy the script + +On the network interface that connects the 5G gNB node with the UPF. +Mark this network interface and add its name as a value in variable `GNB_IFACE`. + +## What to configure in the script + +Apart from the `GNB_IFACE` variable, you need to provide: +- `GNB_IP` and `GNB_MAC` addresses that correspond to the interface `GNB_IFACE` +- `DNN_IP` and `DNN_IP` addresses that correspond to the destination of the packet after traversing the UPF. +- `UPF_IP_LEFT` and `UPF_MAC_LEFT` addresses that correspond to the interface of the UPF that talks to te gNB +- a `UE_IP` of your choice if the default value in the script is not what you want. The UE is emulated by this script so you may leave the default IP. + + +## How the script works + +The script employs a traffic sniffer on the `GNB_IFACE` with a timeout. +After the sniffer is employed, the script transmits a GTP-U packet towards the DNN, which encapsulates an ICMP echo request from the UE to the DNN host. +This packet has to pass through your UPF and get back once the kernel of the DNN host responds with an ICMP echo reply. +This reply is captured by the script and printed. diff --git a/src/tests/p4-topologies/test-scripts/p4-upf/packet-gen-5g-ue.py b/src/tests/p4-topologies/test-scripts/p4-upf/packet-gen-5g-ue.py new file mode 100644 index 0000000000000000000000000000000000000000..d6b1fb55459bff0beea485849fdb0ede0e2f7268 --- /dev/null +++ b/src/tests/p4-topologies/test-scripts/p4-upf/packet-gen-5g-ue.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python3 +# Copyright 2022-2026 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 +from scapy.all import * +from scapy.contrib.gtp import * + +# 5G gNB network interface towards the 5G UPF +GNB_IFACE = "dp-2" +GNB_IP = "10.10.1.2" +GNB_MAC = "50:3e:aa:85:89:09" + +DNN_IP = "10.10.2.2" # DNN IP address +DNN_MAC = "50:3e:aa:96:ba:dd" + +UPF_IP_LEFT = "10.10.1.1" +UPF_MAC_LEFT = "50:3e:aa:52:3e:38" + +UE_IP = "12.1.1.51" # 5G UE IP address +GTPU_PORT = 2152 + +def send_echo_request(): + # Outer IP + outer_ip = IP( + src=GNB_IP, # IP address of the GNB_IFACE above + dst=UPF_IP_LEFT, + ttl=63, + flags="DF", + id=0x2bae + ) + + # UDP + udp = UDP(sport=GTPU_PORT, dport=GTPU_PORT) + + # GTP PDU Session Container (UL, QFI=9) + pdu_sess = GTPPDUSessionContainer( + type=1, # UL PDU SESSION INFORMATION + QFI=9 + ) + + gtp = GTP_U_Header( + version=1, + PT=1, + E=1, + S=0, + PN=0, + teid=1 + ) / pdu_sess + + # Inner ICMP payload (exact bytes) + icmp_payload = bytes.fromhex( + "7c370600000000001011121314151617" + "18191a1b1c1d1e1f2021222324252627" + "28292a2b2c2d2e2f" + ) + + # ICMP + icmp = ICMP( + type=8, + code=0, + id=0x0035, + seq=1 + ) / Raw(load=icmp_payload) + + # Inner IP + inner_ip = IP( + src=UE_IP, + dst=DNN_IP, + ttl=64, + flags="DF", + id=0xa538 + ) + + # Full packet + pkt = ( + Ether(src=GNB_MAC, dst=DNN_MAC) / + outer_ip / + udp / + gtp / + inner_ip / + icmp + ) + + # Freeze computed fields + pkt = pkt.__class__(raw(pkt)) + + # pkt.show2() + sendp(pkt, iface=GNB_IFACE, verbose=True) + print("Packet sent...\n") + +def interface_capture(pkt): + if pkt[IP].src == GNB_IP: + print("\n=== Tx Packet ===") + print("Packet transmitted by the UE\n") + print(f"{pkt}") + return + + print("\n=== Rx Packet ===") + print(f"{pkt}") + if not pkt.haslayer(GTP_U_Header): + print("Packet received by the UPF is not GTP-U encapsulated\n") + return + + if pkt[IP].src != UPF_IP_LEFT: + print("Packet received by the UPF has incorrect source IP\n") + return + + gtp = pkt[GTP_U_Header] + inner = gtp.payload + + if not inner.haslayer(ICMP): + print("Packet received by the UPF is not ICMP\n") + return + + icmp = inner[ICMP] + + if icmp.type != 0: + return + + # print("\n=== Received Echo Reply ===") + # print("DL TEID:", gtp.teid) + # print(" From:", inner.src) + # print(" To:", inner.dst) + # print("ICMP ID:", icmp.id) + # print(" Seq:", icmp.seq) + # print("===========================\n") + + print("--------------> Your UPF works!") + +print("================================================") + +sniffer = AsyncSniffer( + iface=GNB_IFACE, + filter="udp port 2152", + prn=interface_capture +) + +sniffer.start() +print("Sniffer started") +time.sleep(1) + +# Send packet +send_echo_request() + +# Listen for reply +print("Waiting for reply...\n") + +time.sleep(10) +sniffer.stop() +print("Sniffer is torn down") +print("================================================") diff --git a/src/tests/p4-fabric-tna/topology/README.md b/src/tests/p4-topologies/topo-linux-ns/README.md similarity index 86% rename from src/tests/p4-fabric-tna/topology/README.md rename to src/tests/p4-topologies/topo-linux-ns/README.md index 30d4d84bcf2771bb9732e9686a680de0a643fa79..59c1eafef4678b06268b2d1b973cb06c65337470 100644 --- a/src/tests/p4-fabric-tna/topology/README.md +++ b/src/tests/p4-topologies/topo-linux-ns/README.md @@ -1,14 +1,14 @@ # P4 Topology -This directory contains scripts for deploying a single software-based Stratum switch on a VM or bare metal machine. +This directory contains scripts for deploying a single software-based Stratum switch on a Linux namespace. ## 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) +- a west data plane interface towards a certain subnet (we call it left subnet in this example) +- an east data plane interface towards another subnet (we call it right subnet in this example) Also, due to Stratum's restrictions, the desired OS of the machine shall be `Ubuntu server 20.04 LTS`. @@ -23,44 +23,42 @@ The two data plane interfaces of the VM need to be enclosed into this namespace, 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 +```bash 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) - -... +HOST_IFACE_EXT="ens3" # Interface towards the TFS controller (management) +SW_IFACE_DATA_LEFT="ens4" # Interface towards the left subnet (data plane) +SW_IFACE_DATA_RIGHT="ens5" # Interface towards the right subnet (data plane) ``` ### Step 1: Setup environment -Edit the `setup` script to modify the subnets' information according to your network setup: +Edit the `setup` script to modify the subnets information according to your network setup: -```shell +```bash 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 +DOMAIN_LEFT_IP="10.158.72.0/24" # Left-hand side subnet +DOMAIN_RIGHT_IP="172.16.10.0/24" # Right-hand side subnet ``` Once your network setup is applied, run the `setup` script as follows: -```shell +```bash sudo bash p4-switch-setup.sh ``` To verify that the switch namespace is in place, issue the following command: -```shell +```bash 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 +```bash sudo ip netns exec ns-switch ping 10.0.0.254 ``` @@ -76,7 +74,7 @@ First you need to configure the chassis configuration file with the correct netw 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 +```bash cat p4-switch-three-port-chassis-config-phy.pb.txt # Copyright 2018-present Open Networking Foundation @@ -132,13 +130,13 @@ singleton_ports { To deploy Stratum, do: -```shell +```bash sudo bash run-stratum.sh ``` To run Stratum will verbose logging, open the `run-stratum.sh` and change: -```shell +```bash LOG_LEVEL="debug" ``` @@ -161,6 +159,6 @@ To verify that Stratum has been correctly deployed, you should see the following When your tests with Stratum and TFS are over, you may want to restore your setup. To do so, execute the following script: -```shell +```bash sudo bash p4-switch-tear-down.sh ``` diff --git a/src/tests/p4-fabric-tna/topology/p4-switch-conf-common.sh b/src/tests/p4-topologies/topo-linux-ns/p4-switch-conf-common.sh similarity index 79% rename from src/tests/p4-fabric-tna/topology/p4-switch-conf-common.sh rename to src/tests/p4-topologies/topo-linux-ns/p4-switch-conf-common.sh index 25da8c4547aa94521fda416db99924d2fa5eb17b..177de3bd46963c9c1d8a2cef9a9086e413301232 100644 --- a/src/tests/p4-fabric-tna/topology/p4-switch-conf-common.sh +++ b/src/tests/p4-topologies/topo-linux-ns/p4-switch-conf-common.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -17,9 +17,9 @@ 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) +HOST_IFACE_EXT="ens3" # Interface towards TFS (management) +SW_IFACE_DATA_LEFT="ens4" # Interface towards the edge subnet (data plane) +SW_IFACE_DATA_RIGHT="ens5" # Interface towards the corporate subnet (data plane) # Virtual interfaces for INT SW_IFACE_INT="veth-int-sw" diff --git a/src/tests/p4-fabric-tna/topology/p4-switch-setup.sh b/src/tests/p4-topologies/topo-linux-ns/p4-switch-setup.sh similarity index 82% rename from src/tests/p4-fabric-tna/topology/p4-switch-setup.sh rename to src/tests/p4-topologies/topo-linux-ns/p4-switch-setup.sh index 402e54aebe613070f784a3d0eda51d5c6cfc9499..c472620feca3f0b3295f74b0e69ca99a2aef2480 100644 --- a/src/tests/p4-fabric-tna/topology/p4-switch-setup.sh +++ b/src/tests/p4-topologies/topo-linux-ns/p4-switch-setup.sh @@ -1,5 +1,5 @@ #!bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -33,8 +33,8 @@ 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 +DOMAIN_LEFT_IP="10.158.72.22/24" # Left domain's IP address range +DOMAIN_RIGHT_IP="172.16.10.4/24" # Rigth domain's IP address range # INT subnet MTU MTU_LEN=9000 @@ -52,8 +52,8 @@ create_virtual_interfaces() { } 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_DATA_LEFT} netns ${SWITCH_NS} + ip link set ${SW_IFACE_DATA_RIGHT} netns ${SWITCH_NS} ip link set ${SW_IFACE_INT} netns ${SWITCH_NS} } @@ -68,22 +68,22 @@ set_mtu() { } 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 ${DOMAIN_LEFT_IP} dev ${SW_IFACE_DATA_LEFT} + ip -n ${SWITCH_NS} addr add ${DOMAIN_RIGHT_IP} dev ${SW_IFACE_DATA_RIGHT} 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_DATA_LEFT} up + ip -n ${SWITCH_NS} link set ${SW_IFACE_DATA_RIGHT} 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 + ip netns exec ${SWITCH_NS} ethtool -K ${SW_IFACE_DATA_LEFT} rx off tx off + ip netns exec ${SWITCH_NS} ethtool -K ${SW_IFACE_DATA_RIGHT} rx off tx off } switch_default_gw() { diff --git a/src/tests/p4-fabric-tna/topology/p4-switch-tear-down.sh b/src/tests/p4-topologies/topo-linux-ns/p4-switch-tear-down.sh similarity index 94% rename from src/tests/p4-fabric-tna/topology/p4-switch-tear-down.sh rename to src/tests/p4-topologies/topo-linux-ns/p4-switch-tear-down.sh index 1d902319b09326aa9eb0c8c03c6b87ccc29dac65..e8325457696c310b88e71256ab3d479dcfabecf2 100644 --- a/src/tests/p4-fabric-tna/topology/p4-switch-tear-down.sh +++ b/src/tests/p4-topologies/topo-linux-ns/p4-switch-tear-down.sh @@ -1,5 +1,5 @@ #!bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -34,8 +34,8 @@ delete_namespaces() { } bring_interfaces_up() { - ifconfig ${SW_IFACE_DATA_EDGE} up - ifconfig ${SW_IFACE_DATA_CORP} up + ifconfig ${SW_IFACE_DATA_LEFT} up + ifconfig ${SW_IFACE_DATA_RIGHT} up } cleanup_iptables() { diff --git a/src/tests/p4-fabric-tna/topology/p4-switch-three-port-chassis-config-phy.pb.txt b/src/tests/p4-topologies/topo-linux-ns/p4-switch-three-port-chassis-config-phy.pb.txt similarity index 95% rename from src/tests/p4-fabric-tna/topology/p4-switch-three-port-chassis-config-phy.pb.txt rename to src/tests/p4-topologies/topo-linux-ns/p4-switch-three-port-chassis-config-phy.pb.txt index 0b0940813b663acf470c5ccf5ddc566699b9aea6..6b9b6eec3efea582ec41151d34198b76f59b5acc 100644 --- a/src/tests/p4-fabric-tna/topology/p4-switch-three-port-chassis-config-phy.pb.txt +++ b/src/tests/p4-topologies/topo-linux-ns/p4-switch-three-port-chassis-config-phy.pb.txt @@ -1,7 +1,7 @@ # Copyright 2018-present Open Networking Foundation # SPDX-License-Identifier: Apache-2.0 -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-fabric-tna/topology/run-stratum.sh b/src/tests/p4-topologies/topo-linux-ns/run-stratum.sh similarity index 95% rename from src/tests/p4-fabric-tna/topology/run-stratum.sh rename to src/tests/p4-topologies/topo-linux-ns/run-stratum.sh index 45a00da322828b1572a00fee5a39ca2e86f1df5e..50965ca599f58ee4c6822a136fb79c8169237528 100644 --- a/src/tests/p4-fabric-tna/topology/run-stratum.sh +++ b/src/tests/p4-topologies/topo-linux-ns/run-stratum.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/p4-topologies/topo-mininet/1switch1path-int.py b/src/tests/p4-topologies/topo-mininet/1switch1path-int.py new file mode 100755 index 0000000000000000000000000000000000000000..720f2cdd240193833f4294e07e0d6be17f810252 --- /dev/null +++ b/src/tests/p4-topologies/topo-mininet/1switch1path-int.py @@ -0,0 +1,92 @@ +# Copyright 2022-2026 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. + +### +# Option 1: Execute via mininet's binary +# > sudo mn --custom 1switch1path-int.py --switch stratum-bmv2-int --topo oneswitchtopoint --link tc --controller none +# In this case, set the correct value to the DEF_HOST_INT_IFACE variable, as this is passed to the Mininet topology as an input argument. + +# Option 2: Execute natively +# > sudo python3 1switch1path-int.py --host-int-iface=eth0 +# In this case, you may pass the variable as an argument +### + +import argparse + +from mininet.cli import CLI +from mininet.link import TCLink +from mininet.log import setLogLevel, info +from mininet.net import Mininet +from mininet.node import IPv4Host +from mininet.topo import Topo +from mininet.util import interfaceExists +from mininet.stratum import StratumBmv2SwitchINT + +CLIENT_NAME = "client" +SERVER_NAME = "server" + +SW_NAME = "sw1" +SW_PORT = 50001 + +CPU_PORT = 255 + +HOST_INT_IFACE = "" +DEF_HOST_INT_IFACE = "eth0" + +class OneSwitchTopoINT(Topo): + """1-switch topology with 2x IPv4 hosts and switch NB interface for INT""" + + def __init__(self, *args, **kwargs): + Topo.__init__(self, *args, **kwargs) + + iface = args[0] + assert iface, "INT-based Stratum topology requires a network interface name towards the collector" + assert interfaceExists(iface), "External host interface (towards collector) for INT does not exist" + + # Switches + info("*** Adding Stratum-based BMv2 switches\n") + sw1 = self.addSwitch(SW_NAME, cls=StratumBmv2SwitchINT, grpcPort=SW_PORT, cpuport=CPU_PORT, hostINTIfaceName=iface) + + # Hosts + info("*** Adding hosts\n") + client = self.addHost(CLIENT_NAME, cls=IPv4Host) + server = self.addHost(SERVER_NAME, cls=IPv4Host) + + # Host links + info("*** Creating links\n") + self.addLink(client, sw1, cls=TCLink) # Switch 1: port 1 + self.addLink(server, sw1, cls=TCLink) # Switch 1: port 2 + +def setup_topology(host_int_iface): + net = Mininet(topo=OneSwitchTopoINT(host_int_iface), link=TCLink, controller=None, autoSetMacs=True, autoStaticArp=True) + + info("*** Starting network\n") + net.start() + + CLI(net) + net.stop() + +if __name__ == "__main__": + setLogLevel('info') + + parser = argparse.ArgumentParser( + description='Mininet topology script for a 1-switch fabric with INT-enabled stratum_bmv2 and 2x IPv4 hosts') + parser.add_argument("--host-int-iface", type=str, default=DEF_HOST_INT_IFACE, help="Host network interface towards INT collector") + args = parser.parse_args() + + host_int_iface = args.host_int_iface + setup_topology(host_int_iface) + +# Required by mn to call this custom topology +topos = { 'oneswitchtopoint': ( lambda: OneSwitchTopoINT(DEF_HOST_INT_IFACE) ) } diff --git a/src/tests/p4-topologies/topo-mininet/1switch1path.py b/src/tests/p4-topologies/topo-mininet/1switch1path.py new file mode 100755 index 0000000000000000000000000000000000000000..f7475d80f993194153e58bc73f2c48d217f18954 --- /dev/null +++ b/src/tests/p4-topologies/topo-mininet/1switch1path.py @@ -0,0 +1,79 @@ +# Copyright 2022-2026 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. + +### +# Execute: sudo mn --custom 1switch1path.py --switch stratum-bmv2 --topo oneswitchtopo --link tc --controller none +# Execute: sudo python3 1switch1path.py +### + +import argparse + +from mininet.cli import CLI +from mininet.link import TCLink +from mininet.log import setLogLevel, info +from mininet.net import Mininet +from mininet.node import IPv4Host +from mininet.topo import Topo +from mininet.stratum import StratumBmv2Switch + +CLIENT_NAME = "client" +SERVER_NAME = "server" + +SW_NAME = "sw1" +SW_PORT = 50001 + +CPU_PORT = 255 + +HOST_INT_IFACE = "" + +class OneSwitchTopo(Topo): + """1-switch topology with 2x IPv4 hosts""" + + def __init__(self, *args, **kwargs): + Topo.__init__(self, *args, **kwargs) + + # Switches + info("*** Adding Stratum-based BMv2 switches\n") + sw1 = self.addSwitch(SW_NAME, cls=StratumBmv2Switch, grpcPort=SW_PORT, cpuport=CPU_PORT) + + # Hosts + info("*** Adding hosts\n") + client = self.addHost(CLIENT_NAME, cls=IPv4Host) + server = self.addHost(SERVER_NAME, cls=IPv4Host) + + # Host links + info("*** Creating links\n") + self.addLink(client, sw1, cls=TCLink) # Switch 1: port 1 + self.addLink(server, sw1, cls=TCLink) # Switch 1: port 2 + +def setup_topology(): + net = Mininet(topo=OneSwitchTopo(), link=TCLink, controller=None, autoSetMacs=True, autoStaticArp=True) + + info("*** Starting network\n") + net.start() + + CLI(net) + net.stop() + +if __name__ == "__main__": + setLogLevel('info') + + parser = argparse.ArgumentParser( + description='Mininet topology script for a 1-switch Stratum BMv2 fabric and 2x IPv4 hosts') + args = parser.parse_args() + + setup_topology() + +# Required by mn to call this custom topology +topos = { 'oneswitchtopo': ( lambda: OneSwitchTopo() ) } diff --git a/src/tests/p4-topologies/topo-mininet/3switch1path-int.py b/src/tests/p4-topologies/topo-mininet/3switch1path-int.py new file mode 100755 index 0000000000000000000000000000000000000000..06bf94213d229508ebecd192fcb8ac84140e81bd --- /dev/null +++ b/src/tests/p4-topologies/topo-mininet/3switch1path-int.py @@ -0,0 +1,103 @@ +# Copyright 2022-2026 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. + +### +# Option 1: Execute via mininet's binary +# > sudo mn --custom 3switch1path-int.py --switch stratum-bmv2-int --topo threeswitchtopoint --link tc --controller none +# In this case, set the correct value to the DEF_HOST_INT_IFACE variable, as this is passed to the Mininet topology as an input argument. + +# Option 2: Execute natively +# > sudo python3 3switch1path-int.py --host-int-iface=eth0 +# In this case, you may pass the variable as an argument +### + +import argparse + +from mininet.cli import CLI +from mininet.link import TCLink +from mininet.log import setLogLevel, info +from mininet.net import Mininet +from mininet.node import IPv4Host +from mininet.topo import Topo +from mininet.util import interfaceExists +from mininet.stratum import StratumBmv2SwitchINT + +CLIENT_NAME = "client" +SERVER_NAME = "server" + +SW1_NAME = "sw1" +SW1_PORT = 50001 + +SW2_NAME = "sw2" +SW2_PORT = 50002 + +SW3_NAME = "sw3" +SW3_PORT = 50003 + +CPU_PORT = 255 + +DEF_HOST_INT_IFACE = "eth0" + +class ThreeSwitchTopoINT(Topo): + """3-switch topology with 2x IPv4 hosts and switch NB interface for INT""" + + def __init__(self, *args, **kwargs): + Topo.__init__(self, *args, **kwargs) + + iface = args[0] + assert iface, "INT-based Stratum topology requires a network interface name towards the collector" + assert interfaceExists(iface), "External host interface (towards collector) for INT does not exist" + + # Switches + info("*** Adding Stratum-based BMv2 switches\n") + sw1 = self.addSwitch(SW1_NAME, cls=StratumBmv2SwitchINT, grpcPort=SW1_PORT, cpuport=CPU_PORT, hostINTIfaceName=iface) + sw2 = self.addSwitch(SW2_NAME, cls=StratumBmv2SwitchINT, grpcPort=SW2_PORT, cpuport=CPU_PORT, hostINTIfaceName=iface) + sw3 = self.addSwitch(SW3_NAME, cls=StratumBmv2SwitchINT, grpcPort=SW3_PORT, cpuport=CPU_PORT, hostINTIfaceName=iface) + + # Hosts + info("*** Adding hosts\n") + client = self.addHost(CLIENT_NAME, cls=IPv4Host) + server = self.addHost(SERVER_NAME, cls=IPv4Host) + + # Switch links + info("*** Creating links\n") + self.addLink(sw1, sw2, cls=TCLink) # Switch1:port 1, Switch2:port 1 + self.addLink(sw2, sw3, cls=TCLink) # Switch2:port 2, Switch3:port 1 + + # Host links + self.addLink(client, sw1, cls=TCLink) # Switch 1: port 2 + self.addLink(server, sw3, cls=TCLink) # Switch 3: port 2 + +def setup_topology(host_int_iface): + net = Mininet(topo=ThreeSwitchTopoINT(host_int_iface), link=TCLink, controller=None, autoSetMacs=True, autoStaticArp=True) + + info("*** Starting network\n") + net.start() + + CLI(net) + net.stop() + +if __name__ == "__main__": + setLogLevel('info') + + parser = argparse.ArgumentParser( + description='Mininet topology script for a 1-switch fabric with INT-enabled stratum_bmv2 and 2x IPv4 hosts') + parser.add_argument("--host-int-iface", type=str, default=DEF_HOST_INT_IFACE, help="Host network interface towards INT collector") + args = parser.parse_args() + + host_int_iface = args.host_int_iface + setup_topology(host_int_iface) + +# Required by mn to call this custom topology +topos = { 'threeswitchtopoint': ( lambda: ThreeSwitchTopoINT(DEF_HOST_INT_IFACE) ) } diff --git a/src/tests/p4-topologies/topo-mininet/5switch3path-int.py b/src/tests/p4-topologies/topo-mininet/5switch3path-int.py new file mode 100755 index 0000000000000000000000000000000000000000..4fb35bd55883470a661b4f9a3fba74197b52f556 --- /dev/null +++ b/src/tests/p4-topologies/topo-mininet/5switch3path-int.py @@ -0,0 +1,116 @@ +# Copyright 2022-2026 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. + +### +# Option 1: Execute via mininet's binary +# > sudo mn --custom 5switch3path-int.py --switch stratum-bmv2-int --topo fiveswitchtopoint --link tc --controller none +# In this case, set the correct value to the DEF_HOST_INT_IFACE variable, as this is passed to the Mininet topology as an input argument. + +# Option 2: Execute natively +# > sudo python3 5switch3path-int.py --host-int-iface=eth0 +# In this case, you may pass the variable as an argument +### + +import argparse + +from mininet.cli import CLI +from mininet.link import TCLink +from mininet.log import setLogLevel, info +from mininet.net import Mininet +from mininet.node import IPv4Host +from mininet.topo import Topo +from mininet.util import interfaceExists +from mininet.stratum import StratumBmv2SwitchINT + +CLIENT_NAME = "client" +SERVER_NAME = "server" + +SW1_NAME = "sw1" +SW1_PORT = 50001 + +SW2_NAME = "sw2" +SW2_PORT = 50002 + +SW3_NAME = "sw3" +SW3_PORT = 50003 + +SW4_NAME = "sw4" +SW4_PORT = 50004 + +SW5_NAME = "sw5" +SW5_PORT = 50005 + +CPU_PORT = 255 + +DEF_HOST_INT_IFACE = "eth0" + +class FiveSwitchTopoINT(Topo): + """5-switch topology with 2x IPv4 hosts and switch NB interface for INT""" + + def __init__(self, *args, **kwargs): + Topo.__init__(self, *args, **kwargs) + + iface = args[0] + assert iface, "INT-based Stratum topology requires a network interface name towards the collector" + assert interfaceExists(iface), "External host interface (towards collector) for INT does not exist" + + # Switches + info("*** Adding Stratum-based BMv2 switches\n") + sw1 = self.addSwitch(SW1_NAME, cls=StratumBmv2SwitchINT, grpcPort=SW1_PORT, cpuport=CPU_PORT, hostINTIfaceName=iface) + sw2 = self.addSwitch(SW2_NAME, cls=StratumBmv2SwitchINT, grpcPort=SW2_PORT, cpuport=CPU_PORT, hostINTIfaceName=iface) + sw3 = self.addSwitch(SW3_NAME, cls=StratumBmv2SwitchINT, grpcPort=SW3_PORT, cpuport=CPU_PORT, hostINTIfaceName=iface) + sw4 = self.addSwitch(SW4_NAME, cls=StratumBmv2SwitchINT, grpcPort=SW4_PORT, cpuport=CPU_PORT, hostINTIfaceName=iface) + sw5 = self.addSwitch(SW5_NAME, cls=StratumBmv2SwitchINT, grpcPort=SW5_PORT, cpuport=CPU_PORT, hostINTIfaceName=iface) + + # Hosts + info("*** Adding hosts\n") + client = self.addHost(CLIENT_NAME, cls=IPv4Host) + server = self.addHost(SERVER_NAME, cls=IPv4Host) + + # Switch links + info("*** Creating links\n") + self.addLink(sw1, sw2, cls=TCLink) # Switch1:port 1, Switch2:port 1 + self.addLink(sw1, sw3, cls=TCLink) # Switch1:port 2, Switch3:port 1 + self.addLink(sw1, sw4, cls=TCLink) # Switch1:port 3, Switch4:port 1 + + self.addLink(sw2, sw5, cls=TCLink) # Switch2:port 2, Switch5:port 1 + self.addLink(sw3, sw5, cls=TCLink) # Switch3:port 2, Switch5:port 2 + self.addLink(sw4, sw5, cls=TCLink) # Switch4:port 2, Switch5:port 3 + + # Host links + self.addLink(client, sw1, cls=TCLink) # Switch 1: port 4 + self.addLink(server, sw5, cls=TCLink) # Switch 5: port 4 + +def setup_topology(host_int_iface): + net = Mininet(topo=FiveSwitchTopoINT(host_int_iface), link=TCLink, controller=None, autoSetMacs=True, autoStaticArp=True) + + info("*** Starting network\n") + net.start() + + CLI(net) + net.stop() + +if __name__ == "__main__": + setLogLevel('info') + + parser = argparse.ArgumentParser( + description='Mininet topology script for a 1-switch fabric with INT-enabled stratum_bmv2 and 2x IPv4 hosts') + parser.add_argument("--host-int-iface", type=str, default=DEF_HOST_INT_IFACE, help="Host network interface towards INT collector") + args = parser.parse_args() + + host_int_iface = args.host_int_iface + setup_topology(host_int_iface) + +# Required by mn to call this custom topology +topos = { 'fiveswitchtopoint': ( lambda: FiveSwitchTopoINT(DEF_HOST_INT_IFACE) ) } diff --git a/src/tests/qkd_end2end/.gitignore b/src/tests/qkd_end2end/.gitignore index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/qkd_end2end/.gitignore +++ b/src/tests/qkd_end2end/.gitignore @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/.gitlab-ci.yml b/src/tests/qkd_end2end/.gitlab-ci.yml index 7fff37aaad5aab45bd305ee9a8acd9c5dd5e7135..becf525a88b805f2b8ae1491b69e2223b761427e 100644 --- a/src/tests/qkd_end2end/.gitlab-ci.yml +++ b/src/tests/qkd_end2end/.gitlab-ci.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -121,20 +121,24 @@ end2end_test qkd_end2end: ${CI_REGISTRY_IMAGE}/mock-qkd-node:test - docker ps -a + - docker logs qkd-node-01 + - docker logs qkd-node-02 + - docker logs qkd-node-03 - echo "Waiting for QKD Nodes to initialize..." + - sleep 10 - > - while ! docker logs qkd-node-01 2>&1 | grep -q "All log messages before absl::InitializeLog() is called are written to STDERR"; do + while ! docker logs qkd-node-01 2>&1 | grep -q "Other threads are currently calling into gRPC, skipping fork() handlers"; do printf "%c" "." sleep 1 done - > - while ! docker logs qkd-node-02 2>&1 | grep -q "All log messages before absl::InitializeLog() is called are written to STDERR"; do + while ! docker logs qkd-node-02 2>&1 | grep -q "Other threads are currently calling into gRPC, skipping fork() handlers"; do printf "%c" "." sleep 1 done - > - while ! docker logs qkd-node-03 2>&1 | grep -q "All log messages before absl::InitializeLog() is called are written to STDERR"; do + while ! docker logs qkd-node-03 2>&1 | grep -q "Other threads are currently calling into gRPC, skipping fork() handlers"; do printf "%c" "." sleep 1 done diff --git a/src/tests/qkd_end2end/Dockerfile b/src/tests/qkd_end2end/Dockerfile index 89b0a2fd106b622569d85f7a47d883f7be217875..1a7b4b78f7c811c6c189aeeacd21c3fd9cc33603 100644 --- a/src/tests/qkd_end2end/Dockerfile +++ b/src/tests/qkd_end2end/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/__init__.py b/src/tests/qkd_end2end/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/qkd_end2end/__init__.py +++ b/src/tests/qkd_end2end/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/deploy_specs.sh b/src/tests/qkd_end2end/deploy_specs.sh index 9a487d83afe47abce0f58cec1e04e8923770b213..9ca60342e88c59575a41d1367dbe1623ea9a4a83 100755 --- a/src/tests/qkd_end2end/deploy_specs.sh +++ b/src/tests/qkd_end2end/deploy_specs.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/dump_logs.sh b/src/tests/qkd_end2end/dump_logs.sh index 9abc47d7317fa4923311df0c543326c5db989b94..05b1e71d88b57d2414dcba2f0aea5f798834a5cd 100755 --- a/src/tests/qkd_end2end/dump_logs.sh +++ b/src/tests/qkd_end2end/dump_logs.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/redeploy-all.sh b/src/tests/qkd_end2end/redeploy-all.sh index 95fb27c4200615ade3229229025e8c76e3721239..93601d79f4b755d5ffb8073ebcad9491178c9cfa 100755 --- a/src/tests/qkd_end2end/redeploy-all.sh +++ b/src/tests/qkd_end2end/redeploy-all.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/redeploy-qkd-nodes.sh b/src/tests/qkd_end2end/redeploy-qkd-nodes.sh index 23ac3d7f13ee058f32f8f7e7d3a9a1db9050eaa6..1a16e11a17aaae06ba4a13088e598c532dd2df89 100755 --- a/src/tests/qkd_end2end/redeploy-qkd-nodes.sh +++ b/src/tests/qkd_end2end/redeploy-qkd-nodes.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/redeploy-tfs.sh b/src/tests/qkd_end2end/redeploy-tfs.sh index 81b0ac5976390501496121b3502f1864f46b07f0..aedc4c6b8091943e6f5043837f92f0d7618c781d 100755 --- a/src/tests/qkd_end2end/redeploy-tfs.sh +++ b/src/tests/qkd_end2end/redeploy-tfs.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/requirements.in b/src/tests/qkd_end2end/requirements.in index 5c92783a232a5bbe18b4dd6d0e6735e3ce8414c2..2d92213be0e0816c9b9be9fbdae81263f65e8fee 100644 --- a/src/tests/qkd_end2end/requirements.in +++ b/src/tests/qkd_end2end/requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/scripts/run-01-onboarding.sh b/src/tests/qkd_end2end/scripts/run-01-onboarding.sh index df918620426d43ee38483f3298b2cdf73c707f16..76173612a53fb9bffb4b4a342ddb47346f9a7262 100755 --- a/src/tests/qkd_end2end/scripts/run-01-onboarding.sh +++ b/src/tests/qkd_end2end/scripts/run-01-onboarding.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/scripts/run-02-create-links.sh b/src/tests/qkd_end2end/scripts/run-02-create-links.sh index 806d2ff1189e7bf3e8edd65ed30f89e349ab878d..37a351a42be54e1cb61382c1430cb41061256986 100755 --- a/src/tests/qkd_end2end/scripts/run-02-create-links.sh +++ b/src/tests/qkd_end2end/scripts/run-02-create-links.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/scripts/run-03-create-external-app.sh b/src/tests/qkd_end2end/scripts/run-03-create-external-app.sh index 45dcaf27e74a830756d7b1a897fb5f128b9d3103..386d0bef5785ae2d4844b3e573ff606e01f5bc0c 100755 --- a/src/tests/qkd_end2end/scripts/run-03-create-external-app.sh +++ b/src/tests/qkd_end2end/scripts/run-03-create-external-app.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/scripts/run-04-delete-external-app.sh b/src/tests/qkd_end2end/scripts/run-04-delete-external-app.sh index e988042a55443751cf5c56fa8ea21740332559a4..e21d858d4c5a5ba854a4e9ff6392b20730639cc1 100755 --- a/src/tests/qkd_end2end/scripts/run-04-delete-external-app.sh +++ b/src/tests/qkd_end2end/scripts/run-04-delete-external-app.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/scripts/run-05-delete-links.sh b/src/tests/qkd_end2end/scripts/run-05-delete-links.sh index 8975759ce3f40c94a16e5439692c5d23b7667bc4..99ab10a52b141e19763d1e74573629a2a815d430 100755 --- a/src/tests/qkd_end2end/scripts/run-05-delete-links.sh +++ b/src/tests/qkd_end2end/scripts/run-05-delete-links.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/scripts/run-06-cleanup.sh b/src/tests/qkd_end2end/scripts/run-06-cleanup.sh index 991a5325eb365989e4735df8e93e4f5c77925a49..c5604c5b748591e89e3634e8e95fe9fee672233b 100755 --- a/src/tests/qkd_end2end/scripts/run-06-cleanup.sh +++ b/src/tests/qkd_end2end/scripts/run-06-cleanup.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/tests/Fixtures.py b/src/tests/qkd_end2end/tests/Fixtures.py index 788e29d5975d9f74c61fc2cdf3f73ebf6cfc346a..2eb8108fd7bb4330ca3702fbaf20a4ef34ab3a2b 100644 --- a/src/tests/qkd_end2end/tests/Fixtures.py +++ b/src/tests/qkd_end2end/tests/Fixtures.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/tests/Tools.py b/src/tests/qkd_end2end/tests/Tools.py index bbee845cd57f8dcb57e19f1f8ecc71940e99df30..6b5ca953427f04d358f667f1cd42d1b85b752b47 100644 --- a/src/tests/qkd_end2end/tests/Tools.py +++ b/src/tests/qkd_end2end/tests/Tools.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/tests/__init__.py b/src/tests/qkd_end2end/tests/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/qkd_end2end/tests/__init__.py +++ b/src/tests/qkd_end2end/tests/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/qkd_end2end/tests/test_01_onboarding.py b/src/tests/qkd_end2end/tests/test_01_onboarding.py index e609856e72fdc8e391b15be5d99319aaece2b98f..bfa527457816adb448a3459a8880ae33ae230cd0 100644 --- a/src/tests/qkd_end2end/tests/test_01_onboarding.py +++ b/src/tests/qkd_end2end/tests/test_01_onboarding.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,13 +13,21 @@ # limitations under the License. import logging, os, time + from common.Constants import DEFAULT_CONTEXT_NAME -from common.proto.context_pb2 import ContextId, DeviceOperationalStatusEnum, Empty -from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results, validate_empty_scenario +from common.proto.context_pb2 import ( + ContextId, DeviceOperationalStatusEnum, Empty, +) +from common.tools.descriptor.Loader import ( + DescriptorLoader, check_descriptor_load_results, validate_empty_scenario, +) from common.tools.object_factory.Context import json_context_id from context.client.ContextClient import ContextClient from device.client.DeviceClient import DeviceClient -from .Fixtures import context_client, device_client # pylint: disable=unused-import + +from .Fixtures import ( + context_client, device_client, +) # pylint: disable=unused-import LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/qkd_end2end/tests/test_02_create_links.py b/src/tests/qkd_end2end/tests/test_02_create_links.py index 4d7587cf3bfd4026b14f7814f0e52b11df1fa019..dd3903cb677780f7974a99584f878cb191106a1e 100644 --- a/src/tests/qkd_end2end/tests/test_02_create_links.py +++ b/src/tests/qkd_end2end/tests/test_02_create_links.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,20 +13,25 @@ # limitations under the License. import logging, os + from common.Constants import DEFAULT_CONTEXT_NAME -from common.proto.context_pb2 import ContextId, Empty, ServiceStatusEnum, ServiceTypeEnum +from common.proto.context_pb2 import ( + ContextId, Empty, ServiceStatusEnum, ServiceTypeEnum, +) from common.proto.qkd_app_pb2 import QKDAppStatusEnum, QKDAppTypesEnum -from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results +from common.tools.descriptor.Loader import ( + DescriptorLoader, check_descriptor_load_results, +) from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.Context import json_context_id from context.client.ContextClient import ContextClient from device.client.DeviceClient import DeviceClient from qkd_app.client.QKDAppClient import QKDAppClient from service.client.ServiceClient import ServiceClient -from .Fixtures import ( # pylint: disable=unused-import - context_client, device_client, service_client, qkd_app_client -) +from .Fixtures import ( + context_client, device_client, qkd_app_client, service_client, +) # pylint: disable=unused-import LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/qkd_end2end/tests/test_03_create_external_app.py b/src/tests/qkd_end2end/tests/test_03_create_external_app.py index f9efd8aba71057c7b99288afb9821dc11f0d74fa..2d1a073af5d5c52172b976e07c48f05dd0cf02dc 100644 --- a/src/tests/qkd_end2end/tests/test_03_create_external_app.py +++ b/src/tests/qkd_end2end/tests/test_03_create_external_app.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,6 +14,7 @@ import json, logging, os + from common.Constants import DEFAULT_CONTEXT_NAME from common.proto.context_pb2 import ContextId from common.proto.qkd_app_pb2 import QKDAppStatusEnum, QKDAppTypesEnum @@ -21,9 +22,11 @@ from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.Context import json_context_id from context.client.ContextClient import ContextClient from qkd_app.client.QKDAppClient import QKDAppClient -from .Fixtures import context_client, qkd_app_client # pylint: disable=unused-import -from .Tools import do_rest_post_request +from .Fixtures import ( + context_client, qkd_app_client, +) # pylint: disable=unused-import +from .Tools import do_rest_post_request LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/qkd_end2end/tests/test_04_delete_external_app.py b/src/tests/qkd_end2end/tests/test_04_delete_external_app.py index f352498a8e52bc8a321cae0f3a0b15986a50550f..7f37d89fdf50b71914b006173febb4e6f3add4df 100644 --- a/src/tests/qkd_end2end/tests/test_04_delete_external_app.py +++ b/src/tests/qkd_end2end/tests/test_04_delete_external_app.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,6 +14,7 @@ import logging from typing import Set + from common.Constants import DEFAULT_CONTEXT_NAME from common.proto.context_pb2 import ContextId from common.proto.qkd_app_pb2 import AppId, QKDAppStatusEnum, QKDAppTypesEnum @@ -21,8 +22,10 @@ from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.Context import json_context_id from context.client.ContextClient import ContextClient from qkd_app.client.QKDAppClient import QKDAppClient -from .Fixtures import context_client, qkd_app_client # pylint: disable=unused-import +from .Fixtures import ( + context_client, qkd_app_client, +) # pylint: disable=unused-import LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/qkd_end2end/tests/test_05_delete_links.py b/src/tests/qkd_end2end/tests/test_05_delete_links.py index 07a85963d11ba2e9d6f6b641942ff3d08258dad3..9bfab6f659971867d5b69cd29b37361b8d7b278c 100644 --- a/src/tests/qkd_end2end/tests/test_05_delete_links.py +++ b/src/tests/qkd_end2end/tests/test_05_delete_links.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,6 +14,7 @@ import logging from typing import Set + from common.Constants import DEFAULT_CONTEXT_NAME from common.proto.context_pb2 import ContextId, ServiceId from common.proto.qkd_app_pb2 import AppId, QKDAppStatusEnum, QKDAppTypesEnum @@ -22,11 +23,10 @@ from common.tools.object_factory.Context import json_context_id from context.client.ContextClient import ContextClient from qkd_app.client.QKDAppClient import QKDAppClient from service.client.ServiceClient import ServiceClient -from .Fixtures import ( - # pylint: disable=unused-import - context_client, qkd_app_client, service_client -) +from .Fixtures import ( + context_client, qkd_app_client, service_client, +) # pylint: disable=unused-import LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/qkd_end2end/tests/test_06_cleanup.py b/src/tests/qkd_end2end/tests/test_06_cleanup.py index e3c770e7a5e6be012e3311135b6346992eba9939..0bbf9a8180cbac539a9a30175066812b073b3c83 100644 --- a/src/tests/qkd_end2end/tests/test_06_cleanup.py +++ b/src/tests/qkd_end2end/tests/test_06_cleanup.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,13 +13,19 @@ # 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 common.tools.descriptor.Loader import ( + DescriptorLoader, validate_empty_scenario, +) from common.tools.object_factory.Context import json_context_id from context.client.ContextClient import ContextClient from device.client.DeviceClient import DeviceClient -from .Fixtures import context_client, device_client # pylint: disable=unused-import + +from .Fixtures import ( + context_client, device_client, +) # pylint: disable=unused-import LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/ryu-openflow/.gitignore b/src/tests/ryu-openflow/.gitignore index 7363515f07a52d996229bcbd72932ce1423258d7..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 100644 --- a/src/tests/ryu-openflow/.gitignore +++ b/src/tests/ryu-openflow/.gitignore @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ryu-openflow/.gitlab-ci.yml b/src/tests/ryu-openflow/.gitlab-ci.yml index 42d59538446edd47c1ea16bd202e183d9d8c4c14..e8803e5b15b103dfe0228f5ea148baaf36b43aee 100644 --- a/src/tests/ryu-openflow/.gitlab-ci.yml +++ b/src/tests/ryu-openflow/.gitlab-ci.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,6 +14,7 @@ # Build, tag, and push the Docker image to the GitLab Docker registry build ryu-openflow: + timeout: 20m variables: TEST_NAME: 'ryu-openflow' IMAGE_TAG: 'mr$CI_MERGE_REQUEST_IID' @@ -21,258 +22,448 @@ build ryu-openflow: before_script: - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY - docker ps -aq | xargs -r docker rm -f - - containerlab destroy --all --cleanup || true script: - - echo "CI_PIPELINE_SOURCE = $CI_PIPELINE_SOURCE" - - echo "CI_MERGE_REQUEST_ID = $CI_MERGE_REQUEST_ID" - - echo "CI_MERGE_REQUEST_IID = $CI_MERGE_REQUEST_IID" + # Build Ryu container - docker buildx build -t "$CI_REGISTRY_IMAGE/${TEST_NAME}-ryu:${IMAGE_TAG}" -f ./src/tests/${TEST_NAME}/Ryu.Dockerfile . - docker push "$CI_REGISTRY_IMAGE/${TEST_NAME}-ryu:${IMAGE_TAG}" + + # Build Mininet container + - docker buildx build -t "$CI_REGISTRY_IMAGE/${TEST_NAME}-mininet:${IMAGE_TAG}" -f ./src/tests/${TEST_NAME}/mininet/Mininet.Dockerfile . + - docker push "$CI_REGISTRY_IMAGE/${TEST_NAME}-mininet:${IMAGE_TAG}" + + # Build test container - docker buildx build -t "$CI_REGISTRY_IMAGE/${TEST_NAME}-test:${IMAGE_TAG}" -f ./src/tests/${TEST_NAME}/Test.Dockerfile . - docker push "$CI_REGISTRY_IMAGE/${TEST_NAME}-test:${IMAGE_TAG}" after_script: - - docker images --filter="dangling=true" --quiet | xargs -r docker rmi + - docker image prune --force rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)' - - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' + #- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' - changes: - src/common/**/*.py - proto/*.proto - src/tests/${TEST_NAME}/**/*.{py,in,sh,yml} - - src/tests/${TEST_NAME}/Dockerfile + - src/tests/${TEST_NAME}/*.Dockerfile - .gitlab-ci.yml +# Deploy TeraFlowSDN and Execute end-2-end test +end2end_test ryu-openflow: + timeout: 45m + variables: + TEST_NAME: 'ryu-openflow' + IMAGE_TAG: 'mr$CI_MERGE_REQUEST_IID' + stage: end2end_test + # Disable to force running it after all other tasks + #needs: + # - build ryu-openflow + before_script: + # Do Docker cleanup + - docker ps --all --quiet | xargs --no-run-if-empty docker stop + - docker container prune --force + - docker ps --all --quiet | xargs --no-run-if-empty docker rm --force + - docker image prune --force + - docker network prune --force + - docker volume prune --all --force + - docker buildx prune --force -# - docker rm -f na-t1 na-t2 na-r1 na-r2 -# - docker network rm -f na-br -# -# - > -# docker network create -d bridge --subnet=172.254.253.0/24 --gateway=172.254.253.254 -# --ip-range=172.254.253.0/24 na-br -# - > -# docker run -dit --init --name na-t1 --network=na-br --ip 172.254.253.101 -# --volume "$PWD/src/tests/${TEST_NAME}/node-agents-config/startNetconfAgent-tp.sh:/confd/examples.confd/OC23/startNetconfAgent.sh" -# --volume "$PWD/src/tests/${TEST_NAME}/node-agents-config/platform_t1.xml:/confd/examples.confd/OC23/platform.xml" -# asgamb1/oc23bgp.img:latest /confd/examples.confd/OC23/startNetconfAgent.sh - - -## Deploy TeraFlowSDN and Execute end-2-end test -#end2end_test ryu-openflow: -# timeout: 90m -# variables: -# TEST_NAME: 'ryu-openflow' -# stage: end2end_test -# # Disable to force running it after all other tasks -# #needs: -# # - build ryu-openflow -# before_script: -# - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY -# - docker ps -aq | xargs -r docker rm -f -# - containerlab destroy --all --cleanup || true -# script: -# # Download Docker image to run the test -# - docker pull "${CI_REGISTRY_IMAGE}/${TEST_NAME}:latest" -# -# # Check MicroK8s is ready -# - microk8s status --wait-ready -# - kubectl get pods --all-namespaces -# -# # Deploy ContainerLab Scenario -# - RUNNER_PATH=`pwd` -# #- cd $PWD/src/tests/${TEST_NAME} -# - mkdir -p /tmp/clab/${TEST_NAME} -# - cp -R src/tests/${TEST_NAME}/clab/* /tmp/clab/${TEST_NAME} -# - tree -la /tmp/clab/${TEST_NAME} -# - cd /tmp/clab/${TEST_NAME} -# - containerlab deploy --reconfigure --topo ryu-openflow.clab.yml -# - cd $RUNNER_PATH -# -# # Wait for initialization of Device NOSes -# - sleep 3 -# - docker ps -a -# -# # Dump configuration of the routers (before any configuration) -# - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" -# - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" -# - containerlab exec --name ryu-openflow --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 -# #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/deviceservice.yaml -# #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="frontend").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/pathcompservice.yaml -# #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/serviceservice.yaml -# #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/nbiservice.yaml -# #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/monitoringservice.yaml -# -# - source src/tests/${TEST_NAME}/deploy_specs.sh -# #- export TFS_REGISTRY_IMAGES="${CI_REGISTRY_IMAGE}" -# #- export TFS_SKIP_BUILD="YES" -# #- export TFS_IMAGE_TAG="latest" -# #- echo "TFS_REGISTRY_IMAGES=${CI_REGISTRY_IMAGE}" -# -# # Deploy TeraFlowSDN -# - ./deploy/crdb.sh -# - ./deploy/nats.sh -# - ./deploy/kafka.sh -# - ./deploy/qdb.sh -# - ./deploy/tfs.sh -# - ./deploy/show.sh -# -# ## Wait for Context to be subscribed to NATS -# ## WARNING: this loop is infinite if there is no subscriber (such as monitoring). -# ## Investigate if we can use a counter to limit the number of iterations. -# ## For now, keep it commented out. -# #- LOOP_MAX_ATTEMPTS=180 -# #- LOOP_COUNTER=0 -# #- > -# # while ! kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server 2>&1 | grep -q 'Subscriber is Ready? True'; do -# # echo "Attempt: $LOOP_COUNTER" -# # kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server 2>&1; -# # sleep 1; -# # LOOP_COUNTER=$((LOOP_COUNTER + 1)) -# # if [ "$LOOP_COUNTER" -ge "$LOOP_MAX_ATTEMPTS" ]; then -# # echo "Max attempts reached, exiting the loop." -# # break -# # fi -# # done -# - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server -# -# # Run end-to-end test: onboard scenario -# - > -# docker run -t --rm --name ${TEST_NAME} --network=host -# --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" -# --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" -# $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-onboarding.sh -# -# # Run end-to-end test: configure service TFS -# - > -# docker run -t --rm --name ${TEST_NAME} --network=host -# --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" -# --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) -# - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" -# - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" -# - containerlab exec --name ryu-openflow --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" -# -# # Run end-to-end test: test connectivity with ping -# - export TEST1_10=$(containerlab exec --name ryu-openflow --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=$(containerlab exec --name ryu-openflow --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=$(containerlab exec --name ryu-openflow --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=$(containerlab exec --name ryu-openflow --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=$(containerlab exec --name ryu-openflow --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=$(containerlab exec --name ryu-openflow --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 -# - > -# docker run -t --rm --name ${TEST_NAME} --network=host -# --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" -# --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) -# - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" -# - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" -# - containerlab exec --name ryu-openflow --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 -# --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" -# --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) -# - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" -# - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" -# - containerlab exec --name ryu-openflow --label clab-node-name=r3 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" -# -# # Run end-to-end test: test connectivity with ping -# - export TEST1_10=$(containerlab exec --name ryu-openflow --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=$(containerlab exec --name ryu-openflow --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=$(containerlab exec --name ryu-openflow --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=$(containerlab exec --name ryu-openflow --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=$(containerlab exec --name ryu-openflow --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=$(containerlab exec --name ryu-openflow --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 -# - > -# docker run -t --rm --name ${TEST_NAME} --network=host -# --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" -# --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) -# - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" -# - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" -# - containerlab exec --name ryu-openflow --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 -# --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" -# --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" -# $CI_REGISTRY_IMAGE/${TEST_NAME}:latest /var/teraflow/run-cleanup.sh -# -# after_script: -# # Dump configuration of the routers (on after_script) -# - containerlab exec --name ryu-openflow --label clab-node-name=r1 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" -# - containerlab exec --name ryu-openflow --label clab-node-name=r2 --cmd "Cli --command \"enable"$'\n'$"show running-config\"" -# - containerlab exec --name ryu-openflow --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 -# - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/deviceservice -c server -# - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/pathcompservice -c frontend -# - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/serviceservice -c server -# - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/nbiservice -c server -# #- kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/monitoringservice -c server -# -# # Destroy Scenario -# - docker rm -f ${TEST_NAME} || true -# - RUNNER_PATH=`pwd` -# #- cd $PWD/src/tests/${TEST_NAME} -# - cd /tmp/clab/${TEST_NAME} -# - containerlab destroy --topo ryu-openflow.clab.yml --cleanup || true -# - sudo rm -rf clab-ryu-openflow/ .ryu-openflow.clab.yml.bak || true -# - cd $RUNNER_PATH -# - kubectl delete namespaces tfs || true -# -# # Clean old docker images -# - docker images --filter="dangling=true" --quiet | xargs -r docker rmi -# -# #coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/' -# rules: -# - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)' -# - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' -# artifacts: -# when: always -# reports: -# junit: ./src/tests/${TEST_NAME}/report_*.xml + # Check MicroK8s is ready + - microk8s status --wait-ready + - LOOP_MAX_ATTEMPTS=10 + - LOOP_COUNTER=0 + - > + while ! kubectl get pods --all-namespaces &> /dev/null; do + printf "%c" "." + sleep 1 + LOOP_COUNTER=$((LOOP_COUNTER + 1)) + if [ "$LOOP_COUNTER" -ge "$LOOP_MAX_ATTEMPTS" ]; then + echo "Max attempts reached, exiting the loop." + exit 1 + fi + done + - kubectl get pods --all-namespaces + + # Always delete Kubernetes namespaces + - export K8S_NAMESPACES=$(kubectl get namespace -o jsonpath='{.items[*].metadata.name}') + - echo "K8S_NAMESPACES=${K8S_NAMESPACES}" + + - export OLD_NATS_NAMESPACES=$(echo "${K8S_NAMESPACES}" | tr ' ' '\n' | grep -E '^nats') + - echo "OLD_NATS_NAMESPACES=${OLD_NATS_NAMESPACES}" + - > + for ns in ${OLD_NATS_NAMESPACES}; do + if [[ "$ns" == nats* ]]; then + if helm3 status "$ns" &>/dev/null; then + helm3 uninstall "$ns" -n "$ns" + else + echo "Release '$ns' not found, skipping..." + fi + fi + done + - export OLD_NAMESPACES=$(echo "${K8S_NAMESPACES}" | tr ' ' '\n' | grep -E '^(tfs|crdb|qdb|kafka|nats)') + - echo "OLD_NAMESPACES=${OLD_NAMESPACES}" + - kubectl delete namespace ${OLD_NAMESPACES} || true + + # Clean-up Kubernetes Failed pods + - > + kubectl get pods --all-namespaces --no-headers --field-selector=status.phase=Failed + -o custom-columns=NAMESPACE:.metadata.namespace,NAME:.metadata.name | + xargs --no-run-if-empty --max-args=2 kubectl delete pod --namespace + + # Login Docker repository + - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY + + script: + # Download Docker images to run the test + - docker pull "${CI_REGISTRY_IMAGE}/${TEST_NAME}-ryu:${IMAGE_TAG}" + - docker pull "${CI_REGISTRY_IMAGE}/${TEST_NAME}-mininet:${IMAGE_TAG}" + - docker pull "${CI_REGISTRY_IMAGE}/${TEST_NAME}-test:${IMAGE_TAG}" + + # Check MicroK8s is ready + - microk8s status --wait-ready + - LOOP_MAX_ATTEMPTS=10 + - LOOP_COUNTER=0 + - > + while ! kubectl get pods --all-namespaces &> /dev/null; do + printf "%c" "." + sleep 1 + LOOP_COUNTER=$((LOOP_COUNTER + 1)) + if [ "$LOOP_COUNTER" -ge "$LOOP_MAX_ATTEMPTS" ]; then + echo "Max attempts reached, exiting the loop." + exit 1 + fi + done + - kubectl get pods --all-namespaces + + # Deploy Docker network + - > + docker network create --driver bridge --subnet=172.254.252.0/24 --gateway=172.254.252.254 + --ip-range=172.254.252.0/24 ryu-of-br + + # Deploy Ryu + - > + docker run --detach --name ryu --network ryu-of-br --ip 172.254.252.10 --publish 8080 + "${CI_REGISTRY_IMAGE}/${TEST_NAME}-ryu:${IMAGE_TAG}" + + # Wait for Ryu to get initialized + - sleep 3 + - docker ps -a +# - docker logs ryu + - LOOP_MAX_ATTEMPTS=180 + - LOOP_COUNTER=0 + - echo "Waiting for Ryu to be ready..." + - > + until curl -s 'http://172.254.252.10:8080/'; do + echo "Attempt: $LOOP_COUNTER" + sleep 5; + LOOP_COUNTER=$((LOOP_COUNTER + 1)) + if [ "$LOOP_COUNTER" -ge "$LOOP_MAX_ATTEMPTS" ]; then + echo "Max attempts reached, exiting the loop." + break + fi + done + - echo "Ryu is ready!" +# - docker logs ryu + + # Deploy Mininet + # --ulimit memlock=-1:-1 --ulimit nofile=65536:65536 --ulimit nproc=65536:65536 + - > + docker run --detach --name mininet --network ryu-of-br --ip 172.254.252.11 --publish 5000 + --privileged --volume /lib/modules:/lib/modules + "${CI_REGISTRY_IMAGE}/${TEST_NAME}-mininet:${IMAGE_TAG}" + + # Wait for initialization of Mininet + - sleep 10 + - docker ps -a +# - docker logs mininet + - LOOP_MAX_ATTEMPTS=180 + - LOOP_COUNTER=0 + - echo "Waiting for Mininet to be ready..." + - > + until docker logs mininet 2>&1 | grep -q 'Enabling remote OVSDB managers'; do + echo "Attempt: $LOOP_COUNTER" + docker logs mininet 2>&1; + sleep 1; + LOOP_COUNTER=$((LOOP_COUNTER + 1)) + if [ "$LOOP_COUNTER" -ge "$LOOP_MAX_ATTEMPTS" ]; then + echo "Max attempts reached, exiting the loop." + break + fi + done + - echo "Mininet is ready!" +# - docker logs mininet + + # Wait for initialization of OVS switches + - > + while true; do + echo "Attempt: $LOOP_COUNTER" + echo "Waiting for OVS bridges s1-s5..." + sleep 1; + OVS_OUTPUT="$(docker exec mininet bash -c "ovs-vsctl show")" + if echo "$OVS_OUTPUT" | grep -q "Bridge s1" && + echo "$OVS_OUTPUT" | grep -q "Bridge s2" && + echo "$OVS_OUTPUT" | grep -q "Bridge s3" && + echo "$OVS_OUTPUT" | grep -q "Bridge s4" && + echo "$OVS_OUTPUT" | grep -q "Bridge s5"; then + echo "All OVS bridges are ready!" + break + fi + LOOP_COUNTER=$((LOOP_COUNTER + 1)) + if [ "$LOOP_COUNTER" -ge "$LOOP_MAX_ATTEMPTS" ]; then + echo "Max attempts reached, exiting the loop." + break + fi + done + + # Dump configuration of the switches (OpenFlow rules configured) (after starting Mininet) + - docker exec mininet bash -c "ovs-vsctl show" + - docker exec mininet bash -c "ovs-ofctl dump-flows s1" + - docker exec mininet bash -c "ovs-ofctl dump-flows s2" + - docker exec mininet bash -c "ovs-ofctl dump-flows s3" + - docker exec mininet bash -c "ovs-ofctl dump-flows s4" + - docker exec mininet bash -c "ovs-ofctl dump-flows s5" + + # 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 + #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/deviceservice.yaml + #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="frontend").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/pathcompservice.yaml + #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/serviceservice.yaml + #- yq -i '((select(.kind=="Deployment").spec.template.spec.containers.[] | select(.name=="server").env.[]) | select(.name=="LOG_LEVEL").value) |= "DEBUG"' manifests/nbiservice.yaml + + - source src/tests/${TEST_NAME}/deploy_specs.sh + #- export TFS_REGISTRY_IMAGES="${CI_REGISTRY_IMAGE}" + #- export TFS_SKIP_BUILD="YES" + #- export TFS_IMAGE_TAG="latest" + #- echo "TFS_REGISTRY_IMAGES=${CI_REGISTRY_IMAGE}" + + # Deploy TeraFlowSDN + - ./deploy/crdb.sh + - ./deploy/nats.sh + - ./deploy/kafka.sh + #- ./deploy/qdb.sh + - ./deploy/tfs.sh + - ./deploy/show.sh + + ## Wait for Context to be subscribed to NATS + ## WARNING: this loop is infinite if there is no subscriber (such as monitoring). + ## Investigate if we can use a counter to limit the number of iterations. + ## For now, keep it commented out. + #- LOOP_MAX_ATTEMPTS=180 + #- LOOP_COUNTER=0 + #- > + # while ! kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server 2>&1 | grep -q 'Subscriber is Ready? True'; do + # echo "Attempt: $LOOP_COUNTER" + # kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server 2>&1; + # sleep 1; + # LOOP_COUNTER=$((LOOP_COUNTER + 1)) + # if [ "$LOOP_COUNTER" -ge "$LOOP_MAX_ATTEMPTS" ]; then + # echo "Max attempts reached, exiting the loop." + # break + # fi + # done + #- kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server + + # Run end-to-end test: onboard scenario + - > + docker run -t --rm --name ${TEST_NAME} --network=host + --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" + --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" + "${CI_REGISTRY_IMAGE}/${TEST_NAME}-test:${IMAGE_TAG}" /var/teraflow/run-onboarding.sh + + # Dump configuration of the switches (OpenFlow rules configured) (before configure IETF L3VPN services) + - docker exec mininet bash -c "ovs-vsctl show" + - docker exec mininet ovs-ofctl dump-flows s1 + - docker exec mininet ovs-ofctl dump-flows s2 + - docker exec mininet ovs-ofctl dump-flows s3 + - docker exec mininet ovs-ofctl dump-flows s4 + - docker exec mininet ovs-ofctl dump-flows s5 + + - | + ping_check() { + local src=$1 dst=$2 pattern=$3 + local output + output=$(curl -s "http://172.254.252.11:5000/ping?source=${src}&target=${dst}&count=3") + echo "$output" + if echo "$output" | grep -E "$pattern" >/dev/null; then + echo "PASSED ${src}->${dst} + else + echo "FAILED ${src}->${dst} + fi + echo "$output" | grep -E "$pattern" + } + + # Run end-to-end test: test no connectivity with ping + - ping_check h1 h2 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h1 h3 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h1 h4 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h1 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h3 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h4 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h3 h1 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h3 h2 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h3 h4 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h4 h1 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h4 h2 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h4 h3 '3 packets transmitted, 0 received, 100% packet loss' + + # Run end-to-end test: configure IETF L3VPN service between h1-h3 + - > + docker run -t --rm --name ${TEST_NAME} --network=host + --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" + --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" + "${CI_REGISTRY_IMAGE}/${TEST_NAME}-test:${IMAGE_TAG}" /var/teraflow/run-service-ietf-create-h1-h3.sh + + # Dump configuration of the switches (OpenFlow rules configured) (after configure IETF L3VPN service between h1-h3) + - docker exec mininet bash -c "ovs-vsctl show" + - docker exec mininet ovs-ofctl dump-flows s1 + - docker exec mininet ovs-ofctl dump-flows s2 + - docker exec mininet ovs-ofctl dump-flows s3 + - docker exec mininet ovs-ofctl dump-flows s4 + - docker exec mininet ovs-ofctl dump-flows s5 + + # Run end-to-end test: test connectivity with ping (h1-h3 should work, rest should not work) + - ping_check h1 h2 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h1 h3 '3 packets transmitted, 3 received, 0% packet loss' + - ping_check h1 h4 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h1 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h3 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h4 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h3 h1 '3 packets transmitted, 3 received, 0% packet loss' + - ping_check h3 h2 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h3 h4 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h4 h1 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h4 h2 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h4 h3 '3 packets transmitted, 0 received, 100% packet loss' + + # Run end-to-end test: configure IETF L3VPN service between h2-h4 + - > + docker run -t --rm --name ${TEST_NAME} --network=host + --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" + --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" + "${CI_REGISTRY_IMAGE}/${TEST_NAME}-test:${IMAGE_TAG}" /var/teraflow/run-service-ietf-create-h2-h4.sh + + # Dump configuration of the switches (OpenFlow rules configured) (after configure IETF L3VPN service between h2-h4) + - docker exec mininet bash -c "ovs-vsctl show" + - docker exec mininet ovs-ofctl dump-flows s1 + - docker exec mininet ovs-ofctl dump-flows s2 + - docker exec mininet ovs-ofctl dump-flows s3 + - docker exec mininet ovs-ofctl dump-flows s4 + - docker exec mininet ovs-ofctl dump-flows s5 + + # Run end-to-end test: test connectivity with ping (h1-h3 should work, h2-h4 should work, rest should not work) + - ping_check h1 h2 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h1 h3 '3 packets transmitted, 3 received, 0% packet loss' + - ping_check h1 h4 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h1 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h3 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h4 '3 packets transmitted, 3 received, 0% packet loss' + - ping_check h3 h1 '3 packets transmitted, 3 received, 0% packet loss' + - ping_check h3 h2 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h3 h4 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h4 h1 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h4 h2 '3 packets transmitted, 3 received, 0% packet loss' + - ping_check h4 h3 '3 packets transmitted, 0 received, 100% packet loss' + + # Run end-to-end test: deconfigure IETF L3VPN service h1-h3 + - > + docker run -t --rm --name ${TEST_NAME} --network=host + --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" + --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" + "${CI_REGISTRY_IMAGE}/${TEST_NAME}-test:${IMAGE_TAG}" /var/teraflow/run-service-ietf-remove-h1-h3.sh + + # Dump configuration of the switches (OpenFlow rules configured) (after deconfigure IETF L3VPN service between h1-h3) + - docker exec mininet bash -c "ovs-vsctl show" + - docker exec mininet ovs-ofctl dump-flows s1 + - docker exec mininet ovs-ofctl dump-flows s2 + - docker exec mininet ovs-ofctl dump-flows s3 + - docker exec mininet ovs-ofctl dump-flows s4 + - docker exec mininet ovs-ofctl dump-flows s5 + + # Run end-to-end test: test connectivity with ping (h2-h4 should work, rest should not work) + - ping_check h1 h2 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h1 h3 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h1 h4 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h1 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h3 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h4 '3 packets transmitted, 3 received, 0% packet loss' + - ping_check h3 h1 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h3 h2 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h3 h4 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h4 h1 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h4 h2 '3 packets transmitted, 3 received, 0% packet loss' + - ping_check h4 h3 '3 packets transmitted, 0 received, 100% packet loss' + + # Run end-to-end test: deconfigure IETF L3VPN service h2-h4 + - > + docker run -t --rm --name ${TEST_NAME} --network=host + --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" + --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" + "${CI_REGISTRY_IMAGE}/${TEST_NAME}-test:${IMAGE_TAG}" /var/teraflow/run-service-ietf-remove-h2-h4.sh + + # Dump configuration of the switches (OpenFlow rules configured) (after deconfigure IETF L3VPN service between h2-h4) + - docker exec mininet bash -c "ovs-vsctl show" + - docker exec mininet ovs-ofctl dump-flows s1 + - docker exec mininet ovs-ofctl dump-flows s2 + - docker exec mininet ovs-ofctl dump-flows s3 + - docker exec mininet ovs-ofctl dump-flows s4 + - docker exec mininet ovs-ofctl dump-flows s5 + + # Run end-to-end test: test no connectivity with ping + - ping_check h1 h2 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h1 h3 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h1 h4 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h1 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h3 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h2 h4 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h3 h1 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h3 h2 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h3 h4 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h4 h1 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h4 h2 '3 packets transmitted, 0 received, 100% packet loss' + - ping_check h4 h3 '3 packets transmitted, 0 received, 100% packet loss' + + # Run end-to-end test: cleanup scenario + - > + docker run -t --rm --name ${TEST_NAME} --network=host + --volume "$PWD/tfs_runtime_env_vars.sh:/var/teraflow/tfs_runtime_env_vars.sh" + --volume "$PWD/src/tests/${TEST_NAME}:/opt/results" + "${CI_REGISTRY_IMAGE}/${TEST_NAME}-test:${IMAGE_TAG}" /var/teraflow/run-cleanup.sh + + after_script: + # Dump configuration of the switches (OpenFlow rules configured) (on after_script) + - docker exec mininet bash -c "ovs-vsctl show" || true + - docker exec mininet ovs-ofctl dump-flows s1 || true + - docker exec mininet ovs-ofctl dump-flows s2 || true + - docker exec mininet ovs-ofctl dump-flows s3 || true + - docker exec mininet ovs-ofctl dump-flows s4 || true + - docker exec mininet ovs-ofctl dump-flows s5 || true + + # Dump Ryu and Mininet logs (on after_script) + - docker ps -a + #- docker logs mininet + - docker logs ryu + + # Dump TeraFlowSDN component logs + - source src/tests/${TEST_NAME}/deploy_specs.sh + - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/contextservice -c server || true + - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/deviceservice -c server || true + - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/pathcompservice -c frontend || true + - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/serviceservice -c server || true + - kubectl --namespace $TFS_K8S_NAMESPACE logs deployment/nbiservice -c server || true + + # Clean up + - kubectl delete namespaces tfs || true + - docker ps --all --quiet | xargs --no-run-if-empty docker stop + - docker container prune --force + - docker ps --all --quiet | xargs --no-run-if-empty docker rm --force + - docker network prune --force + - docker volume prune --all --force + - docker image prune --force + + #coverage: '/TOTAL\s+\d+\s+\d+\s+(\d+%)/' + rules: + - if: '$CI_PIPELINE_SOURCE == "merge_request_event" && ($CI_MERGE_REQUEST_TARGET_BRANCH_NAME == "develop" || $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH)' + #- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "develop"' + artifacts: + when: always + reports: + junit: ./src/tests/${TEST_NAME}/report_*.xml diff --git a/src/tests/ryu-openflow/Mininet.Dockerfile b/src/tests/ryu-openflow/Mininet.Dockerfile deleted file mode 100644 index a465297e42eb87a4f19cc1b5c07f111feed4fccd..0000000000000000000000000000000000000000 --- a/src/tests/ryu-openflow/Mininet.Dockerfile +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright 2022-2025 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 ubuntu:22.04 - -ENV DEBIAN_FRONTEND=noninteractive -RUN apt-get update && \ - apt-get install -y --no-install-recommends iproute2 net-tools openvswitch-switch ca-certificates && \ - apt-get install -y --no-install-recommends mininet=2.3.0-1ubuntu1 && \ - apt-get autoremove -y && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* - -COPY custom_pentagon_topology.py /opt/custom_pentagon_topology.py - -CMD ["python3", "/opt/custom_pentagon_topology.py"] diff --git a/src/tests/ryu-openflow/Ryu.Dockerfile b/src/tests/ryu-openflow/Ryu.Dockerfile index 38df9d9117cfe8a9e548283bd18b6222b8b758c9..ca9005775cecad81f0f2d2a9920fe8c1a2a3edcf 100644 --- a/src/tests/ryu-openflow/Ryu.Dockerfile +++ b/src/tests/ryu-openflow/Ryu.Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,14 +14,24 @@ FROM python:3.9-slim -RUN apt-get update && apt-get install -y --no-install-recommends git iproute2 && rm -rf /var/lib/apt/lists/* +# Install dependencies +RUN apt-get --yes --quiet --quiet update && \ + apt-get --yes --quiet --quiet install --no-install-recommends git iproute2 && \ + rm -rf /var/lib/apt/lists/* + +# Set Python to show logs as they occur +ENV PYTHONUNBUFFERED=0 + +# Get generic Python packages +RUN python3 -m pip install --upgrade 'pip==25.2' +RUN python3 -m pip install --upgrade 'setuptools==67.6.1' 'wheel==0.45.1' -RUN pip install --no-cache-dir --upgrade pip # NOTE: Ryu 4.34 expects eventlet.wsgi.ALREADY_HANDLED, which disappears in Eventlet ≥ 0.30.3. -RUN pip install --no-cache-dir "setuptools" "wheel" "git+https://github.com/faucetsdn/ryu.git@v4.34" "eventlet<0.30.3" +RUN pip install --no-build-isolation \ + "git+https://github.com/faucetsdn/ryu.git@v4.34" "eventlet<0.30.3" #COPY apps/ /opt/ryu-apps/ # Copy Ryu Apps, if any -WORKDIR /opt/ryu-apps +#WORKDIR /opt/ryu-apps # --- OpenFlow & Ryu REST API ports --- EXPOSE 6653/tcp 8080/tcp diff --git a/src/tests/ryu-openflow/Test.Dockerfile b/src/tests/ryu-openflow/Test.Dockerfile index ea3d4bec3ea99f5f3d007095171da895ef9ceb1c..40e404e4271148b25335f4f67b81a8859288ea34 100644 --- a/src/tests/ryu-openflow/Test.Dockerfile +++ b/src/tests/ryu-openflow/Test.Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -16,7 +16,7 @@ FROM python:3.9-slim # Install dependencies RUN apt-get --yes --quiet --quiet update && \ - apt-get --yes --quiet --quiet install wget g++ git && \ + apt-get --yes --quiet --quiet install --no-install-recommends wget g++ git && \ rm -rf /var/lib/apt/lists/* # Set Python to show logs as they occur diff --git a/src/tests/ryu-openflow/__init__.py b/src/tests/ryu-openflow/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/ryu-openflow/__init__.py +++ b/src/tests/ryu-openflow/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ryu-openflow/custom_pentagon_topology.py b/src/tests/ryu-openflow/custom_pentagon_topology.py deleted file mode 100644 index 03605f24a50c81fc2313c329acb3674487270f67..0000000000000000000000000000000000000000 --- a/src/tests/ryu-openflow/custom_pentagon_topology.py +++ /dev/null @@ -1,55 +0,0 @@ -# Copyright 2022-2025 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 mininet.topo import Topo -from mininet.net import Mininet -from mininet.node import RemoteController -from mininet.cli import CLI -from mininet.link import TCLink - -class PentagonTopo(Topo): - def build(self): - sw1 = self.addSwitch('s1') - sw2 = self.addSwitch('s2') - sw3 = self.addSwitch('s3') - sw4 = self.addSwitch('s4') - sw5 = self.addSwitch('s5') - - h1 = self.addHost('h1', ip='10.0.0.1', mac='00:00:00:00:00:01') - h2 = self.addHost('h2', ip='10.0.0.2', mac='00:00:00:00:00:02') - h3 = self.addHost('h3', ip='10.0.0.3', mac='00:00:00:00:00:03') - h4 = self.addHost('h4', ip='10.0.0.4', mac='00:00:00:00:00:04') - - self.addLink(sw1, sw2) - self.addLink(sw2, sw3) - self.addLink(sw3, sw4) - self.addLink(sw4, sw5) - self.addLink(sw5, sw1) - - self.addLink(h1, sw2) - self.addLink(h2, sw2) - self.addLink(h3, sw5) - self.addLink(h4, sw5) - -if __name__ == '__main__': - topo = PentagonTopo() - net = Mininet(topo=topo, controller=lambda name: RemoteController(name, ip='127.0.0.1'), link=TCLink) - - net.start() - net.staticArp() - - print('Custom Pentagon Topology is up with static ARP.') - CLI(net) - net.stop() diff --git a/src/tests/ryu-openflow/data/ietf-l3vpn-service.json b/src/tests/ryu-openflow/data/ietf-l3vpn-service-h1-h3.json similarity index 91% rename from src/tests/ryu-openflow/data/ietf-l3vpn-service.json rename to src/tests/ryu-openflow/data/ietf-l3vpn-service-h1-h3.json index eb86c359bbab1feeba0f570be165f5f18349d2b8..ceafe66c893bc116a5196f1cd603d32305e8727a 100644 --- a/src/tests/ryu-openflow/data/ietf-l3vpn-service.json +++ b/src/tests/ryu-openflow/data/ietf-l3vpn-service-h1-h3.json @@ -2,7 +2,7 @@ "ietf-l3vpn-svc:l3vpn-svc": { "vpn-services": { "vpn-service": [ - {"vpn-id": "ietf-l3vpn-svc"} + {"vpn-id": "svc-h1-h3"} ] }, "sites": { @@ -18,7 +18,7 @@ "site-network-access-id": "h1-eth0", "site-network-access-type": "ietf-l3vpn-svc:multipoint", "device-reference": "h1", - "vpn-attachment": {"vpn-id": "ietf-l3vpn-svc", "site-role": "ietf-l3vpn-svc:spoke-role"}, + "vpn-attachment": {"vpn-id": "svc-h1-h3", "site-role": "ietf-l3vpn-svc:spoke-role"}, "ip-connection": { "ipv4": { "address-allocation-type": "ietf-l3vpn-svc:static-address", @@ -53,22 +53,22 @@ } }, { - "site-id": "site_DC2", + "site-id": "site_DC3", "management": {"type": "ietf-l3vpn-svc:provider-managed"}, - "locations": {"location": [{"location-id": "DC2"}]}, - "devices": {"device": [{"device-id": "h3", "location": "DC2"}]}, + "locations": {"location": [{"location-id": "DC3"}]}, + "devices": {"device": [{"device-id": "h3", "location": "DC3"}]}, "site-network-accesses": { "site-network-access": [ { "site-network-access-id": "h3-eth0", "site-network-access-type": "ietf-l3vpn-svc:multipoint", "device-reference": "h3", - "vpn-attachment": {"vpn-id": "ietf-l3vpn-svc", "site-role": "ietf-l3vpn-svc:hub-role"}, + "vpn-attachment": {"vpn-id": "svc-h1-h3", "site-role": "ietf-l3vpn-svc:hub-role"}, "ip-connection": { "ipv4": { "address-allocation-type": "ietf-l3vpn-svc:static-address", "addresses": { - "provider-address": "10.0.0.1", + "provider-address": "10.0.0.3", "customer-address": "10.0.0.3", "prefix-length": 8 } diff --git a/src/tests/ryu-openflow/data/ietf-l3vpn-service-h2-h4.json b/src/tests/ryu-openflow/data/ietf-l3vpn-service-h2-h4.json new file mode 100644 index 0000000000000000000000000000000000000000..3f38ce5d24682ccca3d4df900f28c1e9f55a53a6 --- /dev/null +++ b/src/tests/ryu-openflow/data/ietf-l3vpn-service-h2-h4.json @@ -0,0 +1,103 @@ +{ + "ietf-l3vpn-svc:l3vpn-svc": { + "vpn-services": { + "vpn-service": [ + {"vpn-id": "svc-h2-h4"} + ] + }, + "sites": { + "site": [ + { + "site-id": "site_DC2", + "management": {"type": "ietf-l3vpn-svc:provider-managed"}, + "locations": {"location": [{"location-id": "DC2"}]}, + "devices": {"device": [{"device-id": "h2","location": "DC2"}]}, + "site-network-accesses": { + "site-network-access": [ + { + "site-network-access-id": "h2-eth0", + "site-network-access-type": "ietf-l3vpn-svc:multipoint", + "device-reference": "h2", + "vpn-attachment": {"vpn-id": "svc-h2-h4", "site-role": "ietf-l3vpn-svc:spoke-role"}, + "ip-connection": { + "ipv4": { + "address-allocation-type": "ietf-l3vpn-svc:static-address", + "addresses": { + "provider-address": "10.0.0.2", + "customer-address": "10.0.0.2", + "prefix-length": 8 + } + } + }, + "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_DC4", + "management": {"type": "ietf-l3vpn-svc:provider-managed"}, + "locations": {"location": [{"location-id": "DC4"}]}, + "devices": {"device": [{"device-id": "h4", "location": "DC4"}]}, + "site-network-accesses": { + "site-network-access": [ + { + "site-network-access-id": "h4-eth0", + "site-network-access-type": "ietf-l3vpn-svc:multipoint", + "device-reference": "h4", + "vpn-attachment": {"vpn-id": "svc-h2-h4", "site-role": "ietf-l3vpn-svc:hub-role"}, + "ip-connection": { + "ipv4": { + "address-allocation-type": "ietf-l3vpn-svc:static-address", + "addresses": { + "provider-address": "10.0.0.4", + "customer-address": "10.0.0.4", + "prefix-length": 8 + } + } + }, + "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/src/tests/ryu-openflow/data/tfs-topology.json b/src/tests/ryu-openflow/data/tfs-topology.json index e427f16ea95833a1480a84c4fe83d7539c2707ac..b6cea1e9a60051e0054fd5065ce681a860b1b97e 100644 --- a/src/tests/ryu-openflow/data/tfs-topology.json +++ b/src/tests/ryu-openflow/data/tfs-topology.json @@ -14,7 +14,7 @@ { "device_id": {"device_uuid": {"uuid": "RYU"}}, "device_type": "openflow-ryu-controller", "device_drivers": ["DEVICEDRIVER_RYU"], "device_config": {"config_rules": [ - {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "10.0.2.10"}}, + {"action": 1, "custom": {"resource_key": "_connect/address", "resource_value": "172.254.252.10"}}, {"action": 1, "custom": {"resource_key": "_connect/port", "resource_value": "8080"}}, {"action": 1, "custom": {"resource_key": "_connect/settings", "resource_value": {"timeout": 120}}} ]} diff --git a/src/tests/ryu-openflow/deploy_specs.sh b/src/tests/ryu-openflow/deploy_specs.sh index 2c6f5a7363e3ddeeeb080e478955f64848036549..daae0b6d241b786e8d2c8ea7ea3451a3ef7ee91c 100755 --- a/src/tests/ryu-openflow/deploy_specs.sh +++ b/src/tests/ryu-openflow/deploy_specs.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ryu-openflow/docker-compose.yml b/src/tests/ryu-openflow/docker-compose.yml index 6111295927313296370894d39b7ff02dc8533f54..41d913cb5d76a450fea6dc40c8fd07925241ff93 100644 --- a/src/tests/ryu-openflow/docker-compose.yml +++ b/src/tests/ryu-openflow/docker-compose.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ryu-openflow/mininet/Mininet.Dockerfile b/src/tests/ryu-openflow/mininet/Mininet.Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..2923e4df12e055db6853c8a2e372aed6ee131a50 --- /dev/null +++ b/src/tests/ryu-openflow/mininet/Mininet.Dockerfile @@ -0,0 +1,42 @@ +# Copyright 2022-2026 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. + +# Based on: https://github.com/iwaseyusuke/docker-mininet + +FROM ubuntu:22.04 + +USER root +WORKDIR /root + +# Install dependencies +ENV DEBIAN_FRONTEND=noninteractive +RUN apt-get --yes --quiet --quiet update && \ + apt-get install --yes --no-install-recommends iproute2 net-tools openvswitch-switch ca-certificates && \ + apt-get install --yes --no-install-recommends mininet=2.3.0-1ubuntu1 && \ + apt-get autoremove --yes && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +RUN apt-get --yes --quiet --quiet update && \ + apt-get install --yes --no-install-recommends iputils-ping && \ + apt-get autoremove --yes && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +COPY src/tests/ryu-openflow/mininet/custom_pentagon_topology.py /opt/custom_pentagon_topology.py +COPY src/tests/ryu-openflow/mininet/mininet-entrypoint.sh /mininet-entrypoint.sh + +EXPOSE 6633 6653 6640 5000 + +ENTRYPOINT ["/mininet-entrypoint.sh"] diff --git a/src/tests/ryu-openflow/mininet/README.md b/src/tests/ryu-openflow/mininet/README.md new file mode 100644 index 0000000000000000000000000000000000000000..8cc1065555929700dc266561c4c91daec048a645 --- /dev/null +++ b/src/tests/ryu-openflow/mininet/README.md @@ -0,0 +1,3 @@ +# Docker-containerized Mininet environment + +- Based on: https://github.com/iwaseyusuke/docker-mininet diff --git a/src/tests/ryu-openflow/mininet/custom_pentagon_topology.py b/src/tests/ryu-openflow/mininet/custom_pentagon_topology.py new file mode 100644 index 0000000000000000000000000000000000000000..86d3915455eff17d3d1a1b3fcfbe35b119ea6cb9 --- /dev/null +++ b/src/tests/ryu-openflow/mininet/custom_pentagon_topology.py @@ -0,0 +1,156 @@ +# Copyright 2022-2026 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, logging, socketserver, threading, time +from http.server import BaseHTTPRequestHandler, HTTPServer +from urllib.parse import parse_qs, urlparse +from mininet.topo import Topo +from mininet.net import Mininet +from mininet.node import RemoteController +#from mininet.cli import CLI +from mininet.link import TCLink + +logging.basicConfig(level=logging.INFO) +LOGGER = logging.getLogger(__name__) + +class PentagonTopo(Topo): + def build(self): + sw1 = self.addSwitch('s1') + sw2 = self.addSwitch('s2') + sw3 = self.addSwitch('s3') + sw4 = self.addSwitch('s4') + sw5 = self.addSwitch('s5') + + h1 = self.addHost('h1', ip='10.0.0.1', mac='00:00:00:00:00:01') + h2 = self.addHost('h2', ip='10.0.0.2', mac='00:00:00:00:00:02') + h3 = self.addHost('h3', ip='10.0.0.3', mac='00:00:00:00:00:03') + h4 = self.addHost('h4', ip='10.0.0.4', mac='00:00:00:00:00:04') + + self.addLink(sw1, sw2) + self.addLink(sw2, sw3) + self.addLink(sw3, sw4) + self.addLink(sw4, sw5) + self.addLink(sw5, sw1) + + self.addLink(h1, sw2) + self.addLink(h2, sw2) + self.addLink(h3, sw5) + self.addLink(h4, sw5) + + +def build_ping_handler(net: Mininet): + """ + Create a HTTP request handler that performs pings between hosts. + """ + class PingHandler(BaseHTTPRequestHandler): + #def log_message(self, *args, **kwargs): + # # Silence default stdout logging. + # return + + def _send_json(self, status: int, payload: dict): + body = json.dumps(payload).encode() + self.send_response(status) + self.send_header('Content-Type', 'application/json') + self.send_header('Content-Length', str(len(body))) + self.end_headers() + self.wfile.write(body) + + def do_GET(self): + parsed = urlparse(self.path) + if parsed.path != '/ping': + self._send_json(404, {'error': 'not found'}) + return + + params = parse_qs(parsed.query) + source = params.get('source', [None])[0] + target = params.get('target', [None])[0] + count_val = params.get('count', ['3'])[0] + + if not source or not target: + self._send_json(400, { + 'error': 'source and target query parameters are required', + 'params': str(params), + }) + return + + count = None + try: + count = int(count_val) + if count <= 0: + raise ValueError() + except ValueError: + self._send_json(400, { + 'error': 'count must be a positive integer', + 'params': str(params), + }) + return + + src_host = None + dst_host = None + try: + src_host = net.get(source) + dst_host = net.get(target) + except KeyError as exc: + self._send_json(404, { + 'error': f'Unknown host: {exc}', + 'params': str(params), + }) + return + + destination_ip = dst_host.IP() + output = src_host.cmd(f'ping -c {count} {destination_ip}') + + self._send_json(200, { + 'source': source, + 'target': target, + 'destination_ip': destination_ip, + 'count': count, + 'output': output, + }) + + return PingHandler + + +class ThreadingHTTPServer(socketserver.ThreadingMixIn, HTTPServer): + daemon_threads = True + +if __name__ == '__main__': + topo = PentagonTopo() + ctrl = RemoteController('ryu', ip='172.254.252.10', port=6653) + net = Mininet( + topo=topo, + controller=ctrl, + link=TCLink + ) + + net.start() + net.staticArp() + + ping_handler = build_ping_handler(net) + http_server = ThreadingHTTPServer(('0.0.0.0', 5000), ping_handler) + server_thread = threading.Thread(target=http_server.serve_forever, daemon=True) + server_thread.start() + + print('Custom Pentagon Topology is up with static ARP.') + print('HTTP ping server running at http://0.0.0.0:5000/ping?source=h1&target=h2&count=3') + + try: + while True: + time.sleep(60) + except KeyboardInterrupt: + print('Stopping Mininet...') + http_server.shutdown() + http_server.server_close() + net.stop() diff --git a/src/tests/ryu-openflow/mininet/mininet-entrypoint.sh b/src/tests/ryu-openflow/mininet/mininet-entrypoint.sh new file mode 100755 index 0000000000000000000000000000000000000000..8288eb74d9f1f87ab3f85b85f4d8da4f779b5eda --- /dev/null +++ b/src/tests/ryu-openflow/mininet/mininet-entrypoint.sh @@ -0,0 +1,23 @@ +#!/bin/bash +# Copyright 2022-2026 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. + +# Based on: https://github.com/iwaseyusuke/docker-mininet + +service openvswitch-switch start +ovs-vsctl set-manager ptcp:6640 + +python3 /opt/custom_pentagon_topology.py + +service openvswitch-switch stop diff --git a/src/tests/ryu-openflow/redeploy-tfs.sh b/src/tests/ryu-openflow/redeploy-tfs.sh index 64bf43b7e6b66e63610d42ad6f5364b816fd6b18..4608f7cd98f26ce6176d7768f542f934c052af08 100755 --- a/src/tests/ryu-openflow/redeploy-tfs.sh +++ b/src/tests/ryu-openflow/redeploy-tfs.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ryu-openflow/requirements.in b/src/tests/ryu-openflow/requirements.in index 5c92783a232a5bbe18b4dd6d0e6735e3ce8414c2..2d92213be0e0816c9b9be9fbdae81263f65e8fee 100644 --- a/src/tests/ryu-openflow/requirements.in +++ b/src/tests/ryu-openflow/requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ryu-openflow/scripts/run-cleanup.sh b/src/tests/ryu-openflow/scripts/run-cleanup.sh index e6c3fcd330e22910759afd97b301b254150a7ddf..a8e43afca0cefcbd7d18300c9ea5bdc0d828530c 100755 --- a/src/tests/ryu-openflow/scripts/run-cleanup.sh +++ b/src/tests/ryu-openflow/scripts/run-cleanup.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ryu-openflow/scripts/run-onboarding.sh b/src/tests/ryu-openflow/scripts/run-onboarding.sh index be77cf3bd2f35c231330f7d245a4fd8637fcec97..b9d1d965e8be97dbae81f05b5252a03da882eeb7 100755 --- a/src/tests/ryu-openflow/scripts/run-onboarding.sh +++ b/src/tests/ryu-openflow/scripts/run-onboarding.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ryu-openflow/scripts/run-service-ietf-create-h1-h3.sh b/src/tests/ryu-openflow/scripts/run-service-ietf-create-h1-h3.sh new file mode 100755 index 0000000000000000000000000000000000000000..4c4cd6646cd1b55df0c505a992e4aef2b82bf244 --- /dev/null +++ b/src/tests/ryu-openflow/scripts/run-service-ietf-create-h1-h3.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Copyright 2022-2026 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 /var/teraflow/tfs_runtime_env_vars.sh +export PYTHONPATH=/var/teraflow +pytest --verbose --log-level=INFO \ + --junitxml=/opt/results/report_service_ietf_create_h1_h3.xml \ + /var/teraflow/tests/ryu-openflow/tests/test_service_ietf_create_h1_h3.py diff --git a/src/tests/ryu-openflow/scripts/run-service-ietf-create-h2-h4.sh b/src/tests/ryu-openflow/scripts/run-service-ietf-create-h2-h4.sh new file mode 100755 index 0000000000000000000000000000000000000000..d9f9a13c401c4e35fe215c9e364eedf34eb1139a --- /dev/null +++ b/src/tests/ryu-openflow/scripts/run-service-ietf-create-h2-h4.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Copyright 2022-2026 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 /var/teraflow/tfs_runtime_env_vars.sh +export PYTHONPATH=/var/teraflow +pytest --verbose --log-level=INFO \ + --junitxml=/opt/results/report_service_ietf_create_h2_h4.xml \ + /var/teraflow/tests/ryu-openflow/tests/test_service_ietf_create_h2_h4.py diff --git a/src/tests/ryu-openflow/scripts/run-service-ietf-remove-h1-h3.sh b/src/tests/ryu-openflow/scripts/run-service-ietf-remove-h1-h3.sh new file mode 100755 index 0000000000000000000000000000000000000000..656032318dfdd34e796cc2399661a06138baff0a --- /dev/null +++ b/src/tests/ryu-openflow/scripts/run-service-ietf-remove-h1-h3.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Copyright 2022-2026 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 /var/teraflow/tfs_runtime_env_vars.sh +export PYTHONPATH=/var/teraflow +pytest --verbose --log-level=INFO \ + --junitxml=/opt/results/report_service_ietf_remove_h1_h3.xml \ + /var/teraflow/tests/ryu-openflow/tests/test_service_ietf_remove_h1_h3.py diff --git a/src/tests/ryu-openflow/scripts/run-service-ietf-remove-h2-h4.sh b/src/tests/ryu-openflow/scripts/run-service-ietf-remove-h2-h4.sh new file mode 100755 index 0000000000000000000000000000000000000000..1d2e5715780cf0a10d0a25675f09002aeb9dcb45 --- /dev/null +++ b/src/tests/ryu-openflow/scripts/run-service-ietf-remove-h2-h4.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Copyright 2022-2026 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 /var/teraflow/tfs_runtime_env_vars.sh +export PYTHONPATH=/var/teraflow +pytest --verbose --log-level=INFO \ + --junitxml=/opt/results/report_service_ietf_remove_h2_h4.xml \ + /var/teraflow/tests/ryu-openflow/tests/test_service_ietf_remove_h2_h4.py diff --git a/src/tests/ryu-openflow/tests/Fixtures.py b/src/tests/ryu-openflow/tests/Fixtures.py index 5997e58c8100d8b89f2d9287fc57b9b3d1434ac4..dde4676ae9e82e99b690668f086003a18dd1c3dc 100644 --- a/src/tests/ryu-openflow/tests/Fixtures.py +++ b/src/tests/ryu-openflow/tests/Fixtures.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ryu-openflow/tests/Tools.py b/src/tests/ryu-openflow/tests/Tools.py index bbee845cd57f8dcb57e19f1f8ecc71940e99df30..6b5ca953427f04d358f667f1cd42d1b85b752b47 100644 --- a/src/tests/ryu-openflow/tests/Tools.py +++ b/src/tests/ryu-openflow/tests/Tools.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ryu-openflow/tests/__init__.py b/src/tests/ryu-openflow/tests/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/ryu-openflow/tests/__init__.py +++ b/src/tests/ryu-openflow/tests/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/ryu-openflow/tests/test_cleanup.py b/src/tests/ryu-openflow/tests/test_cleanup.py index 20afb5fe02d63f64de45fe87830e8996302c4395..f5e82527a9d18ebe47e18d5740771a840068cdbe 100644 --- a/src/tests/ryu-openflow/tests/test_cleanup.py +++ b/src/tests/ryu-openflow/tests/test_cleanup.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -12,14 +12,20 @@ # See the License for the specific language governing permissions and # limitations under the License. -import logging, os +import graphlib, logging, os +from typing import Dict, List, Tuple + 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 common.proto.context_pb2 import ContextId, DeviceId, Empty +from common.tools.descriptor.Loader import validate_empty_scenario +from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.Context import json_context_id from context.client.ContextClient import ContextClient from device.client.DeviceClient import DeviceClient -from .Fixtures import context_client, device_client # pylint: disable=unused-import + +from .Fixtures import ( + context_client, device_client, +) # pylint: disable=unused-import LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) @@ -36,9 +42,56 @@ def test_scenario_cleanup( assert len(response.service_ids) == 0 assert len(response.slice_ids) == 0 - # Load descriptors and validate the base scenario - descriptor_loader = DescriptorLoader( - descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client) - descriptor_loader.validate() - descriptor_loader.unload() + # Automatic scenario cleanup does not work due to addition of virtual devices. + # Doing it manually... + + link_ids = context_client.ListLinkIds(Empty()) + LOGGER.info('Link Ids: {:s}'.format(grpc_message_to_json_string(link_ids))) + for link_id in link_ids.link_ids: + context_client.RemoveLink(link_id) + + devices = context_client.ListDevices(Empty()) + LOGGER.info('Devices: {:s}'.format(grpc_message_to_json_string(devices))) + + dag_device_uuids = graphlib.TopologicalSorter() + device_uuid_to_data : Dict[str, Tuple[DeviceId, str]] = dict() + + for device in devices.devices: + device_id = device.device_id + device_uuid = device_id.device_uuid.uuid + dag_device_uuids.add(device_uuid) + + device_uuid_to_data[device_uuid] = (device_id, device.name) + + controller_uuid = device.controller_id.device_uuid.uuid + if len(controller_uuid) == 0: continue + dag_device_uuids.add(controller_uuid, device_uuid) + + sorted_device_uuids = list(dag_device_uuids.static_order()) + + LOGGER.info('device_uuid_to_data: {:s}'.format(str(device_uuid_to_data))) + LOGGER.info('sorted_device_uuids: {:s}'.format(str(sorted_device_uuids))) + + for device_uuid in sorted_device_uuids: + device_id = device_uuid_to_data[device_uuid][0] + context_client.RemoveDevice(device_id) + + context_ids = context_client.ListContextIds(Empty()) + LOGGER.info('Context Ids: {:s}'.format(grpc_message_to_json_string(context_ids))) + for context_id in context_ids.context_ids: + topology_ids = context_client.ListTopologyIds(context_id) + LOGGER.info('Topology Ids: {:s}'.format(grpc_message_to_json_string(topology_ids))) + for topology_id in topology_ids.topology_ids: + context_client.RemoveTopology(topology_id) + context_client.RemoveContext(context_id) + + response = context_client.ListLinks(Empty()) + LOGGER.info('Links: {:s}'.format(grpc_message_to_json_string(response))) + + response = context_client.ListDevices(Empty()) + LOGGER.info('Devices: {:s}'.format(grpc_message_to_json_string(response))) + + response = context_client.ListContexts(Empty()) + LOGGER.info('Contexts: {:s}'.format(grpc_message_to_json_string(response))) + validate_empty_scenario(context_client) diff --git a/src/tests/ryu-openflow/tests/test_onboarding.py b/src/tests/ryu-openflow/tests/test_onboarding.py index 763d7da171c99b781a6d25fc01e3c10c340bfb43..48ca87979a4e155e4e1d7285550d5280ad1b27cb 100644 --- a/src/tests/ryu-openflow/tests/test_onboarding.py +++ b/src/tests/ryu-openflow/tests/test_onboarding.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,13 +13,22 @@ # limitations under the License. import logging, os, time + from common.Constants import DEFAULT_CONTEXT_NAME -from common.proto.context_pb2 import ContextId, DeviceOperationalStatusEnum, Empty -from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results, validate_empty_scenario +from common.proto.context_pb2 import ( + ContextId, DeviceOperationalStatusEnum, Empty, +) +from common.tools.descriptor.Loader import ( + DescriptorLoader, check_descriptor_load_results, validate_empty_scenario, +) +#from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.Context import json_context_id from context.client.ContextClient import ContextClient from device.client.DeviceClient import DeviceClient -from .Fixtures import context_client, device_client # pylint: disable=unused-import + +from .Fixtures import ( + context_client, device_client, +) # pylint: disable=unused-import LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) @@ -32,12 +41,26 @@ def test_scenario_onboarding( device_client : DeviceClient, # pylint: disable=redefined-outer-name ) -> None: validate_empty_scenario(context_client) - descriptor_loader = DescriptorLoader( - descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client) + descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client + ) results = descriptor_loader.process() check_descriptor_load_results(results, descriptor_loader) - descriptor_loader.validate() + + # Requires manual validation as number of onboarded devices is higher than those in descriptor; + # the controller exposes underlying devices that are imported on the topology. + #descriptor_loader.validate() + + response = context_client.ListDevices(Empty()) + #LOGGER.debug('Devices: {:s}'.format(grpc_message_to_json_string(response))) + num_openvswitches = 5 # OpenVSwitch in Mininet + assert len(response.devices) == descriptor_loader.num_devices + num_openvswitches + + response = context_client.ListLinks(Empty()) + #LOGGER.debug('Links: {:s}'.format(grpc_message_to_json_string(response))) + num_mgmt_links = num_openvswitches + num_ovs_2_ovs_links = 2*num_openvswitches # pentagon with bidirectional links + assert len(response.links) == descriptor_loader.num_links + num_mgmt_links + num_ovs_2_ovs_links # Verify the scenario has no services/slices response = context_client.GetContext(ADMIN_CONTEXT_ID) diff --git a/src/tests/ryu-openflow/tests/test_service_ietf_create_h1_h3.py b/src/tests/ryu-openflow/tests/test_service_ietf_create_h1_h3.py new file mode 100644 index 0000000000000000000000000000000000000000..f52a8e4cc90237ae31047e61d81fb79fb39428db --- /dev/null +++ b/src/tests/ryu-openflow/tests/test_service_ietf_create_h1_h3.py @@ -0,0 +1,80 @@ +# Copyright 2022-2026 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, logging, os +from typing import Dict, Set + +from common.Constants import DEFAULT_CONTEXT_NAME +from common.proto.context_pb2 import ( + ContextId, ServiceStatusEnum, ServiceTypeEnum, +) +from common.tools.grpc.Tools import grpc_message_to_json_string +from common.tools.object_factory.Context import json_context_id +from context.client.ContextClient import ContextClient + +from .Fixtures import context_client # pylint: disable=unused-import +from .Tools import do_rest_get_request, do_rest_post_request + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +REQUEST_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'data', 'ietf-l3vpn-service-h1-h3.json') +ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)) + + +# pylint: disable=redefined-outer-name, unused-argument +def test_service_ietf_creation( + context_client : ContextClient, +): + # Issue service creation request + with open(REQUEST_FILE, 'r', encoding='UTF-8') as f: + svc1_data = json.load(f) + URL = '/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services' + do_rest_post_request(URL, body=svc1_data, logger=LOGGER, expected_status_codes={201}) + vpn_id = svc1_data['ietf-l3vpn-svc:l3vpn-svc']['vpn-services']['vpn-service'][0]['vpn-id'] + + URL = '/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services/vpn-service={:s}/'.format(vpn_id) + service_data = do_rest_get_request(URL, logger=LOGGER, expected_status_codes={200}) + service_uuid = service_data['service-id'] + + # Verify service was created + response = context_client.GetContext(ADMIN_CONTEXT_ID) + assert len(response.service_ids) == 1 + assert len(response.slice_ids) == 0 + + # Check there is 1 service + response = context_client.ListServices(ADMIN_CONTEXT_ID) + LOGGER.info('Services[{:d}] = {:s}'.format( + len(response.services), grpc_message_to_json_string(response) + )) + assert len(response.services) == 1 + + service_uuids : Set[str] = set() + for service in response.services: + if 'h1-h3' not in service.name: continue + service_id = service.service_id + assert service_id.service_uuid.uuid == service_uuid + assert service.service_status.service_status == ServiceStatusEnum.SERVICESTATUS_ACTIVE + assert service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM + + response = context_client.ListConnections(service_id) + LOGGER.info(' ServiceId[{:s}] => Connections[{:d}] = {:s}'.format( + grpc_message_to_json_string(service_id), len(response.connections), + grpc_message_to_json_string(response) + )) + assert len(response.connections) == 1 + + service_uuids.add(service_id.service_uuid.uuid) + + assert len(service_uuids) == 1 diff --git a/src/tests/ryu-openflow/tests/test_service_ietf_create_h2_h4.py b/src/tests/ryu-openflow/tests/test_service_ietf_create_h2_h4.py new file mode 100644 index 0000000000000000000000000000000000000000..80ad643a6d74f6a6170f07a7d13d6ad6734d01aa --- /dev/null +++ b/src/tests/ryu-openflow/tests/test_service_ietf_create_h2_h4.py @@ -0,0 +1,80 @@ +# Copyright 2022-2026 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, logging, os +from typing import Dict, Set + +from common.Constants import DEFAULT_CONTEXT_NAME +from common.proto.context_pb2 import ( + ContextId, ServiceStatusEnum, ServiceTypeEnum, +) +from common.tools.grpc.Tools import grpc_message_to_json_string +from common.tools.object_factory.Context import json_context_id +from context.client.ContextClient import ContextClient + +from .Fixtures import context_client # pylint: disable=unused-import +from .Tools import do_rest_get_request, do_rest_post_request + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +REQUEST_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'data', 'ietf-l3vpn-service-h2-h4.json') +ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)) + + +# pylint: disable=redefined-outer-name, unused-argument +def test_service_ietf_creation( + context_client : ContextClient, +): + # Issue service creation request + with open(REQUEST_FILE, 'r', encoding='UTF-8') as f: + svc1_data = json.load(f) + URL = '/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services' + do_rest_post_request(URL, body=svc1_data, logger=LOGGER, expected_status_codes={201}) + vpn_id = svc1_data['ietf-l3vpn-svc:l3vpn-svc']['vpn-services']['vpn-service'][0]['vpn-id'] + + URL = '/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services/vpn-service={:s}/'.format(vpn_id) + service_data = do_rest_get_request(URL, logger=LOGGER, expected_status_codes={200}) + service_uuid = service_data['service-id'] + + # Verify service was created + response = context_client.GetContext(ADMIN_CONTEXT_ID) + assert len(response.service_ids) == 2 + assert len(response.slice_ids) == 0 + + # Check there are 2 services + response = context_client.ListServices(ADMIN_CONTEXT_ID) + LOGGER.info('Services[{:d}] = {:s}'.format( + len(response.services), grpc_message_to_json_string(response) + )) + assert len(response.services) == 2 + + service_uuids : Set[str] = set() + for service in response.services: + if 'h2-h4' not in service.name: continue + service_id = service.service_id + assert service_id.service_uuid.uuid == service_uuid + assert service.service_status.service_status == ServiceStatusEnum.SERVICESTATUS_ACTIVE + assert service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM + + response = context_client.ListConnections(service_id) + LOGGER.info(' ServiceId[{:s}] => Connections[{:d}] = {:s}'.format( + grpc_message_to_json_string(service_id), len(response.connections), + grpc_message_to_json_string(response) + )) + assert len(response.connections) == 1 + + service_uuids.add(service_id.service_uuid.uuid) + + assert len(service_uuids) == 1 diff --git a/src/tests/ryu-openflow/tests/test_service_ietf_remove_h1_h3.py b/src/tests/ryu-openflow/tests/test_service_ietf_remove_h1_h3.py new file mode 100644 index 0000000000000000000000000000000000000000..d2ce914d1b809c53effc2d024bed6b04191e7e0e --- /dev/null +++ b/src/tests/ryu-openflow/tests/test_service_ietf_remove_h1_h3.py @@ -0,0 +1,84 @@ +# Copyright 2022-2026 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 typing import Dict, Set, Tuple + +from common.Constants import DEFAULT_CONTEXT_NAME +from common.proto.context_pb2 import ( + ContextId, ServiceStatusEnum, ServiceTypeEnum, +) +from common.tools.grpc.Tools import grpc_message_to_json_string +from common.tools.object_factory.Context import json_context_id +from context.client.ContextClient import ContextClient + +from .Fixtures import context_client # pylint: disable=unused-import +from .Tools import do_rest_delete_request + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)) + + +# pylint: disable=redefined-outer-name, unused-argument +def test_service_ietf_removal( + context_client : ContextClient, # pylint: disable=redefined-outer-name +): + # Verify the scenario has 2 services and 0 slices + response = context_client.GetContext(ADMIN_CONTEXT_ID) + assert len(response.service_ids) == 2 + assert len(response.slice_ids) == 0 + + # Check there are no slices + response = context_client.ListSlices(ADMIN_CONTEXT_ID) + LOGGER.info('Slices[{:d}] = {:s}'.format( + len(response.slices), grpc_message_to_json_string(response) + )) + assert len(response.slices) == 0 + + # Check there are 2 services + response = context_client.ListServices(ADMIN_CONTEXT_ID) + LOGGER.info('Services[{:d}] = {:s}'.format( + len(response.services), grpc_message_to_json_string(response) + )) + assert len(response.services) == 2 + + service_uuids : Set[str] = set() + for service in response.services: + if 'h1-h3' not in service.name: continue + service_id = service.service_id + assert service.service_status.service_status == ServiceStatusEnum.SERVICESTATUS_ACTIVE + assert service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM + + response = context_client.ListConnections(service_id) + LOGGER.info(' ServiceId[{:s}] => Connections[{:d}] = {:s}'.format( + grpc_message_to_json_string(service_id), len(response.connections), + grpc_message_to_json_string(response) + )) + assert len(response.connections) == 1 + + service_uuids.add(service_id.service_uuid.uuid) + + # Identify service to delete + assert len(service_uuids) == 1 + service_uuid = set(service_uuids).pop() + + URL = '/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services/vpn-service={:s}/'.format(service_uuid) + do_rest_delete_request(URL, logger=LOGGER, expected_status_codes={204}) + + # Verify the scenario has 1 service and 0 slices + response = context_client.GetContext(ADMIN_CONTEXT_ID) + assert len(response.service_ids) == 1 + assert len(response.slice_ids) == 0 diff --git a/src/tests/ryu-openflow/tests/test_service_ietf_remove_h2_h4.py b/src/tests/ryu-openflow/tests/test_service_ietf_remove_h2_h4.py new file mode 100644 index 0000000000000000000000000000000000000000..472d9d248c736a2165976418be1f786a620b4901 --- /dev/null +++ b/src/tests/ryu-openflow/tests/test_service_ietf_remove_h2_h4.py @@ -0,0 +1,84 @@ +# Copyright 2022-2026 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 typing import Dict, Set, Tuple + +from common.Constants import DEFAULT_CONTEXT_NAME +from common.proto.context_pb2 import ( + ContextId, ServiceStatusEnum, ServiceTypeEnum, +) +from common.tools.grpc.Tools import grpc_message_to_json_string +from common.tools.object_factory.Context import json_context_id +from context.client.ContextClient import ContextClient + +from .Fixtures import context_client # pylint: disable=unused-import +from .Tools import do_rest_delete_request + +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)) + + +# pylint: disable=redefined-outer-name, unused-argument +def test_service_ietf_removal( + context_client : ContextClient, # pylint: disable=redefined-outer-name +): + # Verify the scenario has 1 service and 0 slices + response = context_client.GetContext(ADMIN_CONTEXT_ID) + assert len(response.service_ids) == 1 + assert len(response.slice_ids) == 0 + + # Check there are no slices + response = context_client.ListSlices(ADMIN_CONTEXT_ID) + LOGGER.info('Slices[{:d}] = {:s}'.format( + len(response.slices), grpc_message_to_json_string(response) + )) + assert len(response.slices) == 0 + + # Check there is 1 service + response = context_client.ListServices(ADMIN_CONTEXT_ID) + LOGGER.info('Services[{:d}] = {:s}'.format( + len(response.services), grpc_message_to_json_string(response) + )) + assert len(response.services) == 1 + + service_uuids : Set[str] = set() + for service in response.services: + if 'h2-h4' not in service.name: continue + service_id = service.service_id + assert service.service_status.service_status == ServiceStatusEnum.SERVICESTATUS_ACTIVE + assert service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM + + response = context_client.ListConnections(service_id) + LOGGER.info(' ServiceId[{:s}] => Connections[{:d}] = {:s}'.format( + grpc_message_to_json_string(service_id), len(response.connections), + grpc_message_to_json_string(response) + )) + assert len(response.connections) == 1 + + service_uuids.add(service_id.service_uuid.uuid) + + # Identify service to delete + assert len(service_uuids) == 1 + service_uuid = set(service_uuids).pop() + + URL = '/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services/vpn-service={:s}/'.format(service_uuid) + do_rest_delete_request(URL, logger=LOGGER, expected_status_codes={204}) + + # 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 diff --git a/src/tests/scenario2/.gitignore b/src/tests/scenario2/.gitignore index 884c3b4cf6308c4c595604cba026ffe18cb63325..ef26596271095f72e3d9ddc56ee1f43f3e281e5b 100644 --- a/src/tests/scenario2/.gitignore +++ b/src/tests/scenario2/.gitignore @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/__init__.py b/src/tests/scenario2/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/scenario2/__init__.py +++ b/src/tests/scenario2/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/delete_all.sh b/src/tests/scenario2/delete_all.sh index de9cf7fc32e93040de9cf4e1b161f13208ed743c..da5ea0dcc8297e638443f654d863e60dd8c661f3 100755 --- a/src/tests/scenario2/delete_all.sh +++ b/src/tests/scenario2/delete_all.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/deploy_all.sh b/src/tests/scenario2/deploy_all.sh index 8cb181e2a3b560307d9a636404f49a5a51906643..e12200a19bb6cf5acd8ea2738364446917bb2bed 100755 --- a/src/tests/scenario2/deploy_all.sh +++ b/src/tests/scenario2/deploy_all.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/deploy_specs_dom1.sh b/src/tests/scenario2/deploy_specs_dom1.sh index 58efdbe6f6dd0334cad2d1644aeda6448b33679a..51952d7df8cc8c169bb0777103cbba1c8664ddc7 100755 --- a/src/tests/scenario2/deploy_specs_dom1.sh +++ b/src/tests/scenario2/deploy_specs_dom1.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/deploy_specs_dom2.sh b/src/tests/scenario2/deploy_specs_dom2.sh index bb053b050f7661b38b5aa3539e5ca850239401f0..885109217e0d439ce452d1b742355dd9d6fbb4fc 100755 --- a/src/tests/scenario2/deploy_specs_dom2.sh +++ b/src/tests/scenario2/deploy_specs_dom2.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/deploy_specs_dom3.sh b/src/tests/scenario2/deploy_specs_dom3.sh index 3b9353d0ae1dc7097bfa45b6179ebe709e06bca3..5a290634812b3ea1ab6c517fd08abb82d6f4758c 100755 --- a/src/tests/scenario2/deploy_specs_dom3.sh +++ b/src/tests/scenario2/deploy_specs_dom3.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/deploy_specs_dom4.sh b/src/tests/scenario2/deploy_specs_dom4.sh index 0da6aeb3d4db9a98b389fcedb847bb3703e7c112..74e5140462e83b2c3e4ccd3b87a30c0c11310c2f 100755 --- a/src/tests/scenario2/deploy_specs_dom4.sh +++ b/src/tests/scenario2/deploy_specs_dom4.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/dump_logs.sh b/src/tests/scenario2/dump_logs.sh index f352cf1303fdb6bbe2819a8568b989c7b200d887..0033f4f7e3b50164888028917d38d1b58ed1f6b1 100755 --- a/src/tests/scenario2/dump_logs.sh +++ b/src/tests/scenario2/dump_logs.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/fast_redeploy.sh b/src/tests/scenario2/fast_redeploy.sh index 72de8f10716abdde16c8a5e9bc01e54736f1b227..2c65b6add155fba6067a45064bacee429173cc8b 100755 --- a/src/tests/scenario2/fast_redeploy.sh +++ b/src/tests/scenario2/fast_redeploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/nginx-ingress-controller-dom1.yaml b/src/tests/scenario2/nginx-ingress-controller-dom1.yaml index ca472f9558ebbe0224f98ec266dddd0e0fe475c5..4aa394e28195cacd092d5b41433d857dc783e96a 100644 --- a/src/tests/scenario2/nginx-ingress-controller-dom1.yaml +++ b/src/tests/scenario2/nginx-ingress-controller-dom1.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/nginx-ingress-controller-dom2.yaml b/src/tests/scenario2/nginx-ingress-controller-dom2.yaml index b15898412a57c5573b01510e286559db9b2ef31e..7bef9bf04362e6617bbf37590332882c1e588a5e 100644 --- a/src/tests/scenario2/nginx-ingress-controller-dom2.yaml +++ b/src/tests/scenario2/nginx-ingress-controller-dom2.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/nginx-ingress-controller-dom3.yaml b/src/tests/scenario2/nginx-ingress-controller-dom3.yaml index f648ea0d2a8b9e5e8752abaacaf952543ffaad3e..9a0b9b272a05fc60fce93ccb8db3534ed2d70d66 100644 --- a/src/tests/scenario2/nginx-ingress-controller-dom3.yaml +++ b/src/tests/scenario2/nginx-ingress-controller-dom3.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/nginx-ingress-controller-dom4.yaml b/src/tests/scenario2/nginx-ingress-controller-dom4.yaml index 1b3e0841320b56d4856ecf07439bbd4c32cd24ac..aaaadc04444c939708700a26c6d0665781a44735 100644 --- a/src/tests/scenario2/nginx-ingress-controller-dom4.yaml +++ b/src/tests/scenario2/nginx-ingress-controller-dom4.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/old_tests/run_test_01_bootstrap.sh b/src/tests/scenario2/old_tests/run_test_01_bootstrap.sh index 604138100a61b29fbb30c9b6b615b171b933c91c..da87b565dcb3c2cbee6733ff42d2a6edb119f53d 100755 --- a/src/tests/scenario2/old_tests/run_test_01_bootstrap.sh +++ b/src/tests/scenario2/old_tests/run_test_01_bootstrap.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/old_tests/run_test_02_create_service.sh b/src/tests/scenario2/old_tests/run_test_02_create_service.sh index 7de9a590ba0d608c00a6a2760798484ffa6cb5f9..45d57b2c616de9bf00e10a46aadc52258de4ce17 100755 --- a/src/tests/scenario2/old_tests/run_test_02_create_service.sh +++ b/src/tests/scenario2/old_tests/run_test_02_create_service.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/old_tests/run_test_03_delete_service.sh b/src/tests/scenario2/old_tests/run_test_03_delete_service.sh index b32c7ecc96d11b52a84360dd11eded6baf33769d..c202963237be11c8c684a2c1986abdf7a305d48f 100755 --- a/src/tests/scenario2/old_tests/run_test_03_delete_service.sh +++ b/src/tests/scenario2/old_tests/run_test_03_delete_service.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/old_tests/run_test_04_cleanup.sh b/src/tests/scenario2/old_tests/run_test_04_cleanup.sh index 29657a10140ba41a696404503286c0f9907b5f3d..e4f825ffd7bb9f22bfa2b79850a67ebdeb9177b3 100755 --- a/src/tests/scenario2/old_tests/run_test_04_cleanup.sh +++ b/src/tests/scenario2/old_tests/run_test_04_cleanup.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/old_tests/run_tests_and_coverage.sh b/src/tests/scenario2/old_tests/run_tests_and_coverage.sh index c26bf2c4eb5f12a6796c525fc5b7aad4f81863b6..fb067c5e6ceb878b7df36319a36b19c00fe3f5a2 100755 --- a/src/tests/scenario2/old_tests/run_tests_and_coverage.sh +++ b/src/tests/scenario2/old_tests/run_tests_and_coverage.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/old_tests/tests/.gitignore b/src/tests/scenario2/old_tests/tests/.gitignore index 4b05005568d977ff4d65fd7c102a2a0af186e004..6154d41d2a176cb17bba367db08be61f41c040d4 100644 --- a/src/tests/scenario2/old_tests/tests/.gitignore +++ b/src/tests/scenario2/old_tests/tests/.gitignore @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/old_tests/tests/BuildDescriptors.py b/src/tests/scenario2/old_tests/tests/BuildDescriptors.py index 1dfe9edb73d76097e42a8d464944d9f70304c5c9..0d3dcc68c870ea68f04e1cdd3a10c1d0965c4d89 100644 --- a/src/tests/scenario2/old_tests/tests/BuildDescriptors.py +++ b/src/tests/scenario2/old_tests/tests/BuildDescriptors.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/old_tests/tests/Fixtures.py b/src/tests/scenario2/old_tests/tests/Fixtures.py index d2220db5c516843e930e0cab3294ae2fbca12ee6..2e9cbcef4be851443e80788584baade3b854111f 100644 --- a/src/tests/scenario2/old_tests/tests/Fixtures.py +++ b/src/tests/scenario2/old_tests/tests/Fixtures.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -15,37 +15,61 @@ import pytest from common.Settings import get_setting from common.proto.monitoring_pb2 import AlarmDescriptor, AlarmSubscription +from context.client.ContextClient import ContextClient +from device.client.DeviceClient import DeviceClient +from monitoring.client.MonitoringClient import MonitoringClient from nbi.tests.mock_osm.MockOSM import MockOSM from .Objects import WIM_MAPPING, WIM_PASSWORD, WIM_USERNAME +@pytest.fixture(scope='session') +def context_client(): + _client = ContextClient() + yield _client + _client.close() + + +@pytest.fixture(scope='session') +def device_client(): + _client = DeviceClient() + yield _client + _client.close() + + +@pytest.fixture(scope='session') +def monitoring_client(): + _client = MonitoringClient() + yield _client + _client.close() + + @pytest.fixture(scope='session') def osm_wim(): wim_url = 'http://{:s}:{:s}'.format( get_setting('NBISERVICE_SERVICE_HOST'), str(get_setting('NBISERVICE_SERVICE_PORT_HTTP'))) return MockOSM(wim_url, WIM_MAPPING, WIM_USERNAME, WIM_PASSWORD) + @pytest.fixture(scope='session') def alarm_descriptor(): - alarm_descriptor = AlarmDescriptor() - alarm_descriptor.alarm_description = "Default Alarm Description" - alarm_descriptor.name = "Default Alarm Name" - alarm_descriptor.kpi_value_range.kpiMinValue.floatVal = 0.0 - alarm_descriptor.kpi_value_range.kpiMaxValue.floatVal = 250.0 - alarm_descriptor.kpi_value_range.inRange = True - alarm_descriptor.kpi_value_range.includeMinValue = False - alarm_descriptor.kpi_value_range.includeMaxValue = True + alarm_descriptor.alarm_description = 'Default Alarm Description' + alarm_descriptor.name = 'Default Alarm Name' + alarm_descriptor.kpi_value_range.kpiMinValue.floatVal = 0.0 + alarm_descriptor.kpi_value_range.kpiMaxValue.floatVal = 250.0 + alarm_descriptor.kpi_value_range.inRange = True + alarm_descriptor.kpi_value_range.includeMinValue = False + alarm_descriptor.kpi_value_range.includeMaxValue = True return alarm_descriptor + @pytest.fixture(scope='session') def alarm_subscription(): - alarm_subscription = AlarmSubscription() - alarm_subscription.subscription_timeout_s = 10 - alarm_subscription.subscription_frequency_ms = 2000 + alarm_subscription.subscription_timeout_s = 10 + alarm_subscription.subscription_frequency_ms = 2000 - return alarm_subscription \ No newline at end of file + return alarm_subscription diff --git a/src/tests/scenario2/old_tests/tests/LoadDescriptors.py b/src/tests/scenario2/old_tests/tests/LoadDescriptors.py index 76c7967d13c8635ef7fbc53ae207f6fac1dc0271..7fb9a552cfcbeb8859c5a750bde80b674a3bd96c 100644 --- a/src/tests/scenario2/old_tests/tests/LoadDescriptors.py +++ b/src/tests/scenario2/old_tests/tests/LoadDescriptors.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/old_tests/tests/Objects.py b/src/tests/scenario2/old_tests/tests/Objects.py index eb98e42e6464156f82daecd989ddb6c47eb381dd..824a2f5bc5b575099fd6f43ef0dc5eee21b73bcc 100644 --- a/src/tests/scenario2/old_tests/tests/Objects.py +++ b/src/tests/scenario2/old_tests/tests/Objects.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/old_tests/tests/__init__.py b/src/tests/scenario2/old_tests/tests/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/scenario2/old_tests/tests/__init__.py +++ b/src/tests/scenario2/old_tests/tests/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/old_tests/tests/test_functional_bootstrap.py b/src/tests/scenario2/old_tests/tests/test_functional_bootstrap.py index 6d9f5f53a05bf7240287b38a9e323479c6bb9eaf..6503d80db89b9d8c71b30ac39ee689e3385b726c 100644 --- a/src/tests/scenario2/old_tests/tests/test_functional_bootstrap.py +++ b/src/tests/scenario2/old_tests/tests/test_functional_bootstrap.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,22 +13,28 @@ # limitations under the License. import copy, logging, pytest + +from common.proto.context_pb2 import ( + Context, ContextId, Device, Empty, Link, Topology, +) +from common.proto.monitoring_pb2 import ( + AlarmDescriptor, AlarmList, KpiDescriptorList, +) from common.Settings import get_setting -from common.proto.monitoring_pb2 import KpiDescriptorList 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 monitoring.client.MonitoringClient import MonitoringClient from context.client.EventsCollector import EventsCollector -from common.proto.context_pb2 import Context, ContextId, Device, Empty, Link, Topology -from common.proto.monitoring_pb2 import AlarmDescriptor, AlarmList from device.client.DeviceClient import DeviceClient +from monitoring.client.MonitoringClient import MonitoringClient + +from .Fixtures import ( + alarm_descriptor, context_client, device_client, monitoring_client, +) # pylint: disable=unused-import from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES -from tests.Fixtures import context_client, device_client, monitoring_client -from .Fixtures import alarm_descriptor LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/scenario2/old_tests/tests/test_functional_cleanup.py b/src/tests/scenario2/old_tests/tests/test_functional_cleanup.py index 6b157cefa288f3084c6b908235535e89942367af..1b9b1847f9340c22c8e1ef147c901b3b496c1c72 100644 --- a/src/tests/scenario2/old_tests/tests/test_functional_cleanup.py +++ b/src/tests/scenario2/old_tests/tests/test_functional_cleanup.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,6 +13,13 @@ # limitations under the License. import logging, pytest + +from common.proto.context_pb2 import ( + ContextId, DeviceId, Empty, LinkId, TopologyId, +) +from common.proto.monitoring_pb2 import ( + AlarmID, AlarmList, KpiDescriptorList, KpiId, +) 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 @@ -21,11 +28,12 @@ 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 ContextId, DeviceId, Empty, LinkId, TopologyId -from common.proto.monitoring_pb2 import KpiId, KpiDescriptorList, AlarmList, AlarmID from device.client.DeviceClient import DeviceClient from monitoring.client.MonitoringClient import MonitoringClient -from tests.Fixtures import context_client, device_client, monitoring_client + +from .Fixtures import ( + context_client, device_client, monitoring_client, +) # pylint: disable=unused-import from .Objects import CONTEXT_ID, CONTEXTS, DEVICES, LINKS, TOPOLOGIES LOGGER = logging.getLogger(__name__) diff --git a/src/tests/scenario2/old_tests/tests/test_functional_create_service.py b/src/tests/scenario2/old_tests/tests/test_functional_create_service.py index 4485ce3ed1b5321bd538e62ed326326d7894899e..15abfa7f15476709c6b9dda6b85cf172f86f5aaa 100644 --- a/src/tests/scenario2/old_tests/tests/test_functional_create_service.py +++ b/src/tests/scenario2/old_tests/tests/test_functional_create_service.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,25 +13,30 @@ # limitations under the License. import logging, pytest, random, time + from grpc._channel import _MultiThreadedRendezvous + from common.DeviceTypes import DeviceTypeEnum +from common.proto.context_pb2 import ContextId, Empty +from common.proto.monitoring_pb2 import AlarmList, AlarmSubscription from common.Settings import get_setting from common.tests.EventTools import EVENT_CREATE, EVENT_UPDATE, check_events +from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.Connection import json_connection_id from common.tools.object_factory.Device import json_device_id from common.tools.object_factory.Service import json_service_id -from common.tools.grpc.Tools import grpc_message_to_json_string -from nbi.tests.mock_osm.MockOSM import MockOSM from context.client.ContextClient import ContextClient -from monitoring.client.MonitoringClient import MonitoringClient from context.client.EventsCollector import EventsCollector -from common.proto.context_pb2 import ContextId, Empty -from common.proto.monitoring_pb2 import AlarmList, AlarmSubscription -from tests.Fixtures import context_client, monitoring_client -from .Fixtures import osm_wim, alarm_subscription +from monitoring.client.MonitoringClient import MonitoringClient +from nbi.tests.mock_osm.MockOSM import MockOSM + +from .Fixtures import ( + alarm_subscription, context_client, monitoring_client, osm_wim, +) # pylint: disable=unused-import from .Objects import ( - CONTEXT_ID, CONTEXTS, DEVICE_O1_UUID, DEVICE_R1_UUID, DEVICE_R3_UUID, DEVICES, LINKS, TOPOLOGIES, - WIM_SERVICE_CONNECTION_POINTS, WIM_SERVICE_TYPE) + CONTEXT_ID, CONTEXTS, DEVICE_O1_UUID, DEVICE_R1_UUID, DEVICE_R3_UUID, + DEVICES, LINKS, TOPOLOGIES, WIM_SERVICE_CONNECTION_POINTS, WIM_SERVICE_TYPE, +) LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/scenario2/old_tests/tests/test_functional_delete_service.py b/src/tests/scenario2/old_tests/tests/test_functional_delete_service.py index 42a9456e09b5b426e7f09df8432497c44058cf82..7ff81e74b84af532afc9052dfc19e6ca75135828 100644 --- a/src/tests/scenario2/old_tests/tests/test_functional_delete_service.py +++ b/src/tests/scenario2/old_tests/tests/test_functional_delete_service.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,23 +13,24 @@ # limitations under the License. import logging, pytest + from common.DeviceTypes import DeviceTypeEnum +from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum from common.Settings import get_setting from common.tests.EventTools import EVENT_REMOVE, EVENT_UPDATE, check_events +from common.tools.grpc.Tools import grpc_message_to_json_string from common.tools.object_factory.Connection import json_connection_id from common.tools.object_factory.Device import json_device_id from common.tools.object_factory.Service import json_service_id -from common.tools.grpc.Tools import grpc_message_to_json_string -from nbi.tests.mock_osm.MockOSM import MockOSM from context.client.ContextClient import ContextClient from context.client.EventsCollector import EventsCollector -from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum -from tests.Fixtures import context_client -from .Fixtures import osm_wim -from .Objects import ( - CONTEXT_ID, CONTEXTS, DEVICE_O1_UUID, DEVICE_R1_UUID, DEVICE_R3_UUID, DEVICES, LINKS, TOPOLOGIES, WIM_MAPPING, - WIM_PASSWORD, WIM_USERNAME) +from nbi.tests.mock_osm.MockOSM import MockOSM +from .Fixtures import context_client, osm_wim # pylint: disable=unused-import +from .Objects import ( + CONTEXT_ID, CONTEXTS, DEVICE_O1_UUID, DEVICE_R1_UUID, DEVICE_R3_UUID, + DEVICES, LINKS, TOPOLOGIES, WIM_MAPPING, WIM_PASSWORD, WIM_USERNAME, +) LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) diff --git a/src/tests/scenario2/reset.sh b/src/tests/scenario2/reset.sh index 794f19f3b346227e8dece566fc841b320f2f2423..3bf6cc064badd18bc51bc781394a0fefd992ceb9 100755 --- a/src/tests/scenario2/reset.sh +++ b/src/tests/scenario2/reset.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/show_deploy.sh b/src/tests/scenario2/show_deploy.sh index 1ed0ed901fc9958b7b0a1e40427013506fbe44f8..b158f1d99bd44566b933b1f56700f8fd52611673 100755 --- a/src/tests/scenario2/show_deploy.sh +++ b/src/tests/scenario2/show_deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario2/tfs-ingress-dom1.yaml b/src/tests/scenario2/tfs-ingress-dom1.yaml index c497d2e73d02ecaf99f783b27be386322fa3a45e..3d691afdf4f6c3ae239177e04f7ea457df222b12 100644 --- a/src/tests/scenario2/tfs-ingress-dom1.yaml +++ b/src/tests/scenario2/tfs-ingress-dom1.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -15,43 +15,122 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: tfs-ingress-dom1 + name: tfs-ingress-dom1-web annotations: - nginx.ingress.kubernetes.io/rewrite-target: /$2 + nginx.ingress.kubernetes.io/rewrite-target: "/$2" + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/limit-rps: "50" # max requests per second per source IP + nginx.ingress.kubernetes.io/limit-connections: "50" # max concurrent connections per source IP + nginx.ingress.kubernetes.io/proxy-connect-timeout: "60" # max timeout for connecting to server + nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # max timeout between two successive read operations + nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" # max timeout between two successive write operations spec: ingressClassName: tfs-ingress-class-dom1 rules: - http: paths: - path: /webui(/|$)(.*) - pathType: Prefix + pathType: ImplementationSpecific backend: service: name: webuiservice port: number: 8004 - path: /grafana(/|$)(.*) - pathType: Prefix + pathType: ImplementationSpecific backend: service: name: webuiservice port: number: 3000 - - path: /()(restconf/.*) +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: tfs-ingress-dom1-nbi + annotations: + # Enable websocket services and configure sticky cookies (seems not to work) + #nginx.org/websocket-services: "nbiservice" + #nginx.org/sticky-cookie-services: "serviceName=nbiservice tfs-nbi-session expires=1h path=/socket.io" + + # Enable sticky sessions (use same backend for all connections + # originated by a specific client, identified through its cookie) + nginx.ingress.kubernetes.io/affinity: "cookie" + nginx.ingress.kubernetes.io/affinity-mode: "persistent" + nginx.ingress.kubernetes.io/session-cookie-name: "tfs-nbi-session" + nginx.ingress.kubernetes.io/session-cookie-path: "/socket.io" + nginx.ingress.kubernetes.io/session-cookie-expires: "3600" + nginx.ingress.kubernetes.io/session-cookie-change-on-failure: "true" + + nginx.ingress.kubernetes.io/limit-rps: "50" # max requests per second per source IP + nginx.ingress.kubernetes.io/limit-connections: "50" # max concurrent connections per source IP + nginx.ingress.kubernetes.io/proxy-connect-timeout: "60" # max timeout for connecting to server + + # Enable long-lived connections, required for websocket/socket.io streams + nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # max timeout between two successive read operations + nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" # max timeout between two successive write operations +spec: + ingressClassName: tfs-ingress-class-dom1 + rules: + - http: + paths: + - path: /.well-known + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /restconf + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /socket.io + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /tfs-api + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /bmw + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /qkd_app + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /camara pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(tfs-api/.*) + - path: /agent-probes pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(bmw/.*) + - path: /osm-api pathType: Prefix backend: service: diff --git a/src/tests/scenario2/tfs-ingress-dom2.yaml b/src/tests/scenario2/tfs-ingress-dom2.yaml index 985a1be9e8699701819471cc8e5b175eb78afe66..c34b312795757301106c9608997c20a3f6a76208 100644 --- a/src/tests/scenario2/tfs-ingress-dom2.yaml +++ b/src/tests/scenario2/tfs-ingress-dom2.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -15,43 +15,122 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: tfs-ingress-dom2 + name: tfs-ingress-dom2-web annotations: - nginx.ingress.kubernetes.io/rewrite-target: /$2 + nginx.ingress.kubernetes.io/rewrite-target: "/$2" + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/limit-rps: "50" # max requests per second per source IP + nginx.ingress.kubernetes.io/limit-connections: "50" # max concurrent connections per source IP + nginx.ingress.kubernetes.io/proxy-connect-timeout: "60" # max timeout for connecting to server + nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # max timeout between two successive read operations + nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" # max timeout between two successive write operations spec: ingressClassName: tfs-ingress-class-dom2 rules: - http: paths: - path: /webui(/|$)(.*) - pathType: Prefix + pathType: ImplementationSpecific backend: service: name: webuiservice port: number: 8004 - path: /grafana(/|$)(.*) - pathType: Prefix + pathType: ImplementationSpecific backend: service: name: webuiservice port: number: 3000 - - path: /()(restconf/.*) +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: tfs-ingress-dom2-nbi + annotations: + # Enable websocket services and configure sticky cookies (seems not to work) + #nginx.org/websocket-services: "nbiservice" + #nginx.org/sticky-cookie-services: "serviceName=nbiservice tfs-nbi-session expires=1h path=/socket.io" + + # Enable sticky sessions (use same backend for all connections + # originated by a specific client, identified through its cookie) + nginx.ingress.kubernetes.io/affinity: "cookie" + nginx.ingress.kubernetes.io/affinity-mode: "persistent" + nginx.ingress.kubernetes.io/session-cookie-name: "tfs-nbi-session" + nginx.ingress.kubernetes.io/session-cookie-path: "/socket.io" + nginx.ingress.kubernetes.io/session-cookie-expires: "3600" + nginx.ingress.kubernetes.io/session-cookie-change-on-failure: "true" + + nginx.ingress.kubernetes.io/limit-rps: "50" # max requests per second per source IP + nginx.ingress.kubernetes.io/limit-connections: "50" # max concurrent connections per source IP + nginx.ingress.kubernetes.io/proxy-connect-timeout: "60" # max timeout for connecting to server + + # Enable long-lived connections, required for websocket/socket.io streams + nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # max timeout between two successive read operations + nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" # max timeout between two successive write operations +spec: + ingressClassName: tfs-ingress-class-dom2 + rules: + - http: + paths: + - path: /.well-known + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /restconf + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /socket.io + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /tfs-api + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /bmw + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /qkd_app + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /camara pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(tfs-api/.*) + - path: /agent-probes pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(bmw/.*) + - path: /osm-api pathType: Prefix backend: service: diff --git a/src/tests/scenario2/tfs-ingress-dom3.yaml b/src/tests/scenario2/tfs-ingress-dom3.yaml index e882f59fda98338b9292ab49953ea5b78937f202..500ea931e54b7f41039bdb9e594f6a7fd3d44fc2 100644 --- a/src/tests/scenario2/tfs-ingress-dom3.yaml +++ b/src/tests/scenario2/tfs-ingress-dom3.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -15,43 +15,122 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: tfs-ingress-dom3 + name: tfs-ingress-dom3-web annotations: - nginx.ingress.kubernetes.io/rewrite-target: /$2 + nginx.ingress.kubernetes.io/rewrite-target: "/$2" + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/limit-rps: "50" # max requests per second per source IP + nginx.ingress.kubernetes.io/limit-connections: "50" # max concurrent connections per source IP + nginx.ingress.kubernetes.io/proxy-connect-timeout: "60" # max timeout for connecting to server + nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # max timeout between two successive read operations + nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" # max timeout between two successive write operations spec: ingressClassName: tfs-ingress-class-dom3 rules: - http: paths: - path: /webui(/|$)(.*) - pathType: Prefix + pathType: ImplementationSpecific backend: service: name: webuiservice port: number: 8004 - path: /grafana(/|$)(.*) - pathType: Prefix + pathType: ImplementationSpecific backend: service: name: webuiservice port: number: 3000 - - path: /()(restconf/.*) +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: tfs-ingress-dom3-nbi + annotations: + # Enable websocket services and configure sticky cookies (seems not to work) + #nginx.org/websocket-services: "nbiservice" + #nginx.org/sticky-cookie-services: "serviceName=nbiservice tfs-nbi-session expires=1h path=/socket.io" + + # Enable sticky sessions (use same backend for all connections + # originated by a specific client, identified through its cookie) + nginx.ingress.kubernetes.io/affinity: "cookie" + nginx.ingress.kubernetes.io/affinity-mode: "persistent" + nginx.ingress.kubernetes.io/session-cookie-name: "tfs-nbi-session" + nginx.ingress.kubernetes.io/session-cookie-path: "/socket.io" + nginx.ingress.kubernetes.io/session-cookie-expires: "3600" + nginx.ingress.kubernetes.io/session-cookie-change-on-failure: "true" + + nginx.ingress.kubernetes.io/limit-rps: "50" # max requests per second per source IP + nginx.ingress.kubernetes.io/limit-connections: "50" # max concurrent connections per source IP + nginx.ingress.kubernetes.io/proxy-connect-timeout: "60" # max timeout for connecting to server + + # Enable long-lived connections, required for websocket/socket.io streams + nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # max timeout between two successive read operations + nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" # max timeout between two successive write operations +spec: + ingressClassName: tfs-ingress-class-dom3 + rules: + - http: + paths: + - path: /.well-known + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /restconf + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /socket.io + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /tfs-api + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /bmw + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /qkd_app + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /camara pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(tfs-api/.*) + - path: /agent-probes pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(bmw/.*) + - path: /osm-api pathType: Prefix backend: service: diff --git a/src/tests/scenario2/tfs-ingress-dom4.yaml b/src/tests/scenario2/tfs-ingress-dom4.yaml index 1f7b98f9a5c761da7e38847688a0153e48efe5c4..32995078002f3bc250c37499d5d40d5433cb4892 100644 --- a/src/tests/scenario2/tfs-ingress-dom4.yaml +++ b/src/tests/scenario2/tfs-ingress-dom4.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -15,43 +15,122 @@ apiVersion: networking.k8s.io/v1 kind: Ingress metadata: - name: tfs-ingress-dom4 + name: tfs-ingress-dom4-web annotations: - nginx.ingress.kubernetes.io/rewrite-target: /$2 + nginx.ingress.kubernetes.io/rewrite-target: "/$2" + nginx.ingress.kubernetes.io/use-regex: "true" + nginx.ingress.kubernetes.io/limit-rps: "50" # max requests per second per source IP + nginx.ingress.kubernetes.io/limit-connections: "50" # max concurrent connections per source IP + nginx.ingress.kubernetes.io/proxy-connect-timeout: "60" # max timeout for connecting to server + nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # max timeout between two successive read operations + nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" # max timeout between two successive write operations spec: ingressClassName: tfs-ingress-class-dom4 rules: - http: paths: - path: /webui(/|$)(.*) - pathType: Prefix + pathType: ImplementationSpecific backend: service: name: webuiservice port: number: 8004 - path: /grafana(/|$)(.*) - pathType: Prefix + pathType: ImplementationSpecific backend: service: name: webuiservice port: number: 3000 - - path: /()(restconf/.*) +--- +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: tfs-ingress-dom4-nbi + annotations: + # Enable websocket services and configure sticky cookies (seems not to work) + #nginx.org/websocket-services: "nbiservice" + #nginx.org/sticky-cookie-services: "serviceName=nbiservice tfs-nbi-session expires=1h path=/socket.io" + + # Enable sticky sessions (use same backend for all connections + # originated by a specific client, identified through its cookie) + nginx.ingress.kubernetes.io/affinity: "cookie" + nginx.ingress.kubernetes.io/affinity-mode: "persistent" + nginx.ingress.kubernetes.io/session-cookie-name: "tfs-nbi-session" + nginx.ingress.kubernetes.io/session-cookie-path: "/socket.io" + nginx.ingress.kubernetes.io/session-cookie-expires: "3600" + nginx.ingress.kubernetes.io/session-cookie-change-on-failure: "true" + + nginx.ingress.kubernetes.io/limit-rps: "50" # max requests per second per source IP + nginx.ingress.kubernetes.io/limit-connections: "50" # max concurrent connections per source IP + nginx.ingress.kubernetes.io/proxy-connect-timeout: "60" # max timeout for connecting to server + + # Enable long-lived connections, required for websocket/socket.io streams + nginx.ingress.kubernetes.io/proxy-send-timeout: "3600" # max timeout between two successive read operations + nginx.ingress.kubernetes.io/proxy-read-timeout: "3600" # max timeout between two successive write operations +spec: + ingressClassName: tfs-ingress-class-dom4 + rules: + - http: + paths: + - path: /.well-known + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /restconf + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /socket.io + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /tfs-api + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /bmw + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /qkd_app + pathType: Prefix + backend: + service: + name: nbiservice + port: + number: 8080 + - path: /camara pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(tfs-api/.*) + - path: /agent-probes pathType: Prefix backend: service: name: nbiservice port: number: 8080 - - path: /()(bmw/.*) + - path: /osm-api pathType: Prefix backend: service: diff --git a/src/tests/scenario3/l3/deploy.sh b/src/tests/scenario3/l3/deploy.sh index 60d4efe3c7c83ee1f4d5316f26357c9125f00f62..0c46571754352bb2ca986e66e3a02e1914655e33 100755 --- a/src/tests/scenario3/l3/deploy.sh +++ b/src/tests/scenario3/l3/deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario3/l3/deploy_specs.sh b/src/tests/scenario3/l3/deploy_specs.sh index a16f5e464aad6b625b3dd40159e0a7b9d3bf6ab0..32c596fc8039db99e6031a398d68b32269ceba0d 100644 --- a/src/tests/scenario3/l3/deploy_specs.sh +++ b/src/tests/scenario3/l3/deploy_specs.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario3/l3/run.sh b/src/tests/scenario3/l3/run.sh index 5d12c093dc0fb22a74806f79a9ecc8e27393247c..29878c726d410d0cf126a3e70c205ed6e11e9fe4 100644 --- a/src/tests/scenario3/l3/run.sh +++ b/src/tests/scenario3/l3/run.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario3/optical/deploy_specs.sh b/src/tests/scenario3/optical/deploy_specs.sh index 2aae28baab19705ba4b76d0831ffe15b5e133a66..8bd0d29a2f09e0c5835295c21f1664ed5a3eb0db 100644 --- a/src/tests/scenario3/optical/deploy_specs.sh +++ b/src/tests/scenario3/optical/deploy_specs.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario3/optical/jocn/run_experiment.py b/src/tests/scenario3/optical/jocn/run_experiment.py index cca4b1775701f10acec1fb7bf1192bd3ad736186..fdeacc6574543a9edd31e2fe78d303a9e0ffddcd 100644 --- a/src/tests/scenario3/optical/jocn/run_experiment.py +++ b/src/tests/scenario3/optical/jocn/run_experiment.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/scenario3/optical/ofc23/run_experiment_demo.py b/src/tests/scenario3/optical/ofc23/run_experiment_demo.py index 9c1e390151507c2880b163f476661e754332e9f4..f73e5367247ac89057299a1f23d29bfc5d95a0b1 100644 --- a/src/tests/scenario3/optical/ofc23/run_experiment_demo.py +++ b/src/tests/scenario3/optical/ofc23/run_experiment_demo.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/sns4sns24/clab-cli-r1.sh b/src/tests/sns4sns24/clab-cli-r1.sh index 9954b64deace78819ea1b252b50369d55f461bb8..253bfedc49df2a62abd3e01b3217eda87f09f85c 100755 --- a/src/tests/sns4sns24/clab-cli-r1.sh +++ b/src/tests/sns4sns24/clab-cli-r1.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/sns4sns24/clab-cli-r2.sh b/src/tests/sns4sns24/clab-cli-r2.sh index 5d8203ae424a23987104dcc73068c3d8da426f73..d5347e97506bd077200b9434d55910cff14206a5 100755 --- a/src/tests/sns4sns24/clab-cli-r2.sh +++ b/src/tests/sns4sns24/clab-cli-r2.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/sns4sns24/clab-deploy.sh b/src/tests/sns4sns24/clab-deploy.sh index 810ec745c9cf16a28f49f573539945d3881098d6..c8a4d24465eb0996025f77f530970ecfba61719b 100755 --- a/src/tests/sns4sns24/clab-deploy.sh +++ b/src/tests/sns4sns24/clab-deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/sns4sns24/clab-destroy.sh b/src/tests/sns4sns24/clab-destroy.sh index 0d1e3901b10d7abf3f514798fd22faa853aa2a20..248d5d6de999ca36478825e8848e657a592b9eda 100755 --- a/src/tests/sns4sns24/clab-destroy.sh +++ b/src/tests/sns4sns24/clab-destroy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/sns4sns24/clab-inspect.sh b/src/tests/sns4sns24/clab-inspect.sh index 45905305750a0565810319f2d94f6a3008c2dc18..7c9ed7fe36b193fcf0033078254e982b2b582e2d 100755 --- a/src/tests/sns4sns24/clab-inspect.sh +++ b/src/tests/sns4sns24/clab-inspect.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/sns4sns24/deploy_specs.sh b/src/tests/sns4sns24/deploy_specs.sh index 94c0514532eb8e718562389750e8d6819ec9f4e5..11a1f76151e634ac0356f6cb084b685ab316d746 100755 --- a/src/tests/sns4sns24/deploy_specs.sh +++ b/src/tests/sns4sns24/deploy_specs.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/sns4sns24/ietf-create.sh b/src/tests/sns4sns24/ietf-create.sh index 404d7acb91967467689a66e0e66dbd9c0b60fdf1..120f75509225f6f1c6c62d547cc7d79e17d8d64d 100755 --- a/src/tests/sns4sns24/ietf-create.sh +++ b/src/tests/sns4sns24/ietf-create.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/sns4sns24/ietf-delete.sh b/src/tests/sns4sns24/ietf-delete.sh index 28506a3649e835d2b343c4282b7166a2e8285326..f43f92e4a921134af14f826a07aae0da95dd8dc6 100755 --- a/src/tests/sns4sns24/ietf-delete.sh +++ b/src/tests/sns4sns24/ietf-delete.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/sns4sns24/ietf-get.sh b/src/tests/sns4sns24/ietf-get.sh index cfac943453468e4491e22f8786018fbb6f5dc1f9..dc1b15ed7073ebe184f0a8fc94695d7b47726fe4 100755 --- a/src/tests/sns4sns24/ietf-get.sh +++ b/src/tests/sns4sns24/ietf-get.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/sns4sns24/sns4sns.clab.yml b/src/tests/sns4sns24/sns4sns.clab.yml index fe21ab51679d7419db2ae9e100c15f83bb1fa3fd..de567e55a616cc8c596fff8da0bc5eb136fac45c 100644 --- a/src/tests/sns4sns24/sns4sns.clab.yml +++ b/src/tests/sns4sns24/sns4sns.clab.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/sns4sns24/static_setup/sns4sns.clab.yml b/src/tests/sns4sns24/static_setup/sns4sns.clab.yml index 0771612ed4eb7e4ef9716e66b60c17a3b240581f..355a00ed6b48add482b3285562d0972d7fee7b76 100644 --- a/src/tests/sns4sns24/static_setup/sns4sns.clab.yml +++ b/src/tests/sns4sns24/static_setup/sns4sns.clab.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/sns4sns26/clab/r1-startup.cfg b/src/tests/sns4sns26/clab/r1-startup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..fdac2ee972efd7c37d8deb8fb21101e315d9bb04 --- /dev/null +++ b/src/tests/sns4sns26/clab/r1-startup.cfg @@ -0,0 +1,51 @@ +! Command: show running-config +! device: r1 (cEOSLab, EOS-4.34.4M-45127473.4344M (engineering build)) +! +no aaa root +! +username admin privilege 15 role network-admin secret sha512 $6$v.q.IH8.dY2VUI8P$S6GkfbDxjEm8kHeU/5oEWrlcTFS2vBr4mPK4s8d0w2gi6wWR1jcajM8fqg93405IfDm6yLqSh4IC1AKbwIdKr/ +! +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 + mtu 1400 + no switchport +! +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/sns4sns26/clab/r2-startup.cfg b/src/tests/sns4sns26/clab/r2-startup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..22ad9852b5c9c80dffe06dab96a752897354b872 --- /dev/null +++ b/src/tests/sns4sns26/clab/r2-startup.cfg @@ -0,0 +1,49 @@ +! Command: show running-config +! device: r2 (cEOSLab, EOS-4.34.4M-45127473.4344M (engineering build)) +! +no aaa root +! +username admin privilege 15 role network-admin secret sha512 $6$Fu.Mcm.e.zgLUCv9$bEp3TJMx3.6GqNcx5MpLEpWyNgVrvjW6zDXhbu7.iIeqIuH7z0rN7zGnSWU18lIGI7B9BK3ShmPIYsF7hPLup/ +! +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/sns4sns26/clab/r3-startup.cfg b/src/tests/sns4sns26/clab/r3-startup.cfg new file mode 100644 index 0000000000000000000000000000000000000000..d11649d88cf994c7dd74549b15b3e2694aa44bb3 --- /dev/null +++ b/src/tests/sns4sns26/clab/r3-startup.cfg @@ -0,0 +1,51 @@ +! Command: show running-config +! device: r3 (cEOSLab, EOS-4.34.4M-45127473.4344M (engineering build)) +! +no aaa root +! +username admin privilege 15 role network-admin secret sha512 $6$Fu.Mcm.e.zgLUCv9$bEp3TJMx3.6GqNcx5MpLEpWyNgVrvjW6zDXhbu7.iIeqIuH7z0rN7zGnSWU18lIGI7B9BK3ShmPIYsF7hPLup/ +! +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 + mtu 1400 + no switchport +! +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/sns4sns26/clab/sns4sns26.clab.yml b/src/tests/sns4sns26/clab/sns4sns26.clab.yml new file mode 100644 index 0000000000000000000000000000000000000000..91b0329906cbd167556778d2efa49cf1db6c824d --- /dev/null +++ b/src/tests/sns4sns26/clab/sns4sns26.clab.yml @@ -0,0 +1,57 @@ +# Copyright 2022-2026 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. + +# Ref: https://containerlab.dev/manual/network/#macvlan-links +# Ref: https://containerlab.dev/manual/network/#host-links + + +# ETSI Joint SDG Lab + +name: sns4sns26 + +mgmt: + network: mgmt-net + ipv4-subnet: 172.20.20.0/24 + mtu: 1400 + +topology: + kinds: + arista_ceos: + kind: arista_ceos + image: ceos:4.34.4M + 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 + + r3: + kind: arista_ceos + mgmt-ipv4: 172.20.20.103 + startup-config: r3-startup.cfg + + links: + - endpoints: ["r1:eth2", "r2:eth1"] + - endpoints: ["r2:eth3", "r3:eth2"] + - endpoints: ["r1:eth10", "macvlan:enp0s4"] # connect to site A virtual network + - endpoints: ["r3:eth10", "macvlan:enp0s5"] # connect to site B virtual network diff --git a/src/tests/sns4sns26/data/mock_osm_connection.json b/src/tests/sns4sns26/data/mock_osm_connection.json new file mode 100644 index 0000000000000000000000000000000000000000..ab8944453be8b42d27e38ad6eceaa72ea2ef1dc6 --- /dev/null +++ b/src/tests/sns4sns26/data/mock_osm_connection.json @@ -0,0 +1,6 @@ +{ + "wim_ip": "10.0.2.10", + "wim_port": 80, + "wim_user": "admin", + "wim_pass": "admin" +} diff --git a/src/tests/sns4sns26/data/mock_osm_mapping.json b/src/tests/sns4sns26/data/mock_osm_mapping.json new file mode 100644 index 0000000000000000000000000000000000000000..b9d04e9492ae597877649d75e9fcefbf65696a47 --- /dev/null +++ b/src/tests/sns4sns26/data/mock_osm_mapping.json @@ -0,0 +1,4 @@ +[ + {"service_endpoint_id": "SiteA", "device-id": "router-1", "service_mapping_info": {"bearer": {"bearer-reference": "SNS4SNS26:SiteA"}, "site-id": "A"}}, + {"service_endpoint_id": "SiteB", "device-id": "router-3", "service_mapping_info": {"bearer": {"bearer-reference": "SNS4SNS26:SiteB"}, "site-id": "B"}} +] diff --git a/src/tests/sns4sns26/data/tfs-topology.json b/src/tests/sns4sns26/data/tfs-topology.json new file mode 100644 index 0000000000000000000000000000000000000000..3c73515d807a44b2291ef8750671a3322b52f711 --- /dev/null +++ b/src/tests/sns4sns26/data/tfs-topology.json @@ -0,0 +1,126 @@ +{ + "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": "cluster-a"}}, "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": "cluster-b"}}, "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": "router-1"}}, "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": "router-2"}}, "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 + }}} + ]} + }, + { + "device_id": {"device_uuid": {"uuid": "router-3"}}, "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.103"}}, + {"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": "router-1/Ethernet2==router-2/Ethernet1"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "router-1"}}, "endpoint_uuid": {"uuid": "Ethernet2"}}, + {"device_id": {"device_uuid": {"uuid": "router-2"}}, "endpoint_uuid": {"uuid": "Ethernet1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "router-2/Ethernet1==router-1/Ethernet2"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "router-2"}}, "endpoint_uuid": {"uuid": "Ethernet1"}}, + {"device_id": {"device_uuid": {"uuid": "router-1"}}, "endpoint_uuid": {"uuid": "Ethernet2"}} + ] + }, + + { + "link_id": {"link_uuid": {"uuid": "router-2/Ethernet3==router-3/Ethernet2"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "router-2"}}, "endpoint_uuid": {"uuid": "Ethernet3"}}, + {"device_id": {"device_uuid": {"uuid": "router-3"}}, "endpoint_uuid": {"uuid": "Ethernet2"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "router-3/Ethernet2==router-2/Ethernet3"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "router-3"}}, "endpoint_uuid": {"uuid": "Ethernet2"}}, + {"device_id": {"device_uuid": {"uuid": "router-2"}}, "endpoint_uuid": {"uuid": "Ethernet3"}} + ] + }, + + { + "link_id": {"link_uuid": {"uuid": "router-1/Ethernet10==cluster-a/eth1"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "router-1"}}, "endpoint_uuid": {"uuid": "Ethernet10"}}, + {"device_id": {"device_uuid": {"uuid": "cluster-a"}}, "endpoint_uuid": {"uuid": "eth1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "cluster-a/eth1==router-1/Ethernet10"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "cluster-a"}}, "endpoint_uuid": {"uuid": "eth1"}}, + {"device_id": {"device_uuid": {"uuid": "router-1"}}, "endpoint_uuid": {"uuid": "Ethernet10"}} + ] + }, + + { + "link_id": {"link_uuid": {"uuid": "router-3/Ethernet10==cluster-b/eth1"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "router-3"}}, "endpoint_uuid": {"uuid": "Ethernet10"}}, + {"device_id": {"device_uuid": {"uuid": "cluster-b"}}, "endpoint_uuid": {"uuid": "eth1"}} + ] + }, + { + "link_id": {"link_uuid": {"uuid": "cluster-b/eth1==router-3/Ethernet10"}}, + "link_endpoint_ids": [ + {"device_id": {"device_uuid": {"uuid": "cluster-b"}}, "endpoint_uuid": {"uuid": "eth1"}}, + {"device_id": {"device_uuid": {"uuid": "router-3"}}, "endpoint_uuid": {"uuid": "Ethernet10"}} + ] + } + ] +} diff --git a/src/tests/sns4sns26/scripts/clab-cli-r1.sh b/src/tests/sns4sns26/scripts/clab-cli-r1.sh new file mode 100644 index 0000000000000000000000000000000000000000..582d41d6f8f543b7c6c68d8ee072eac75c85a227 --- /dev/null +++ b/src/tests/sns4sns26/scripts/clab-cli-r1.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Copyright 2022-2026 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-sns4sns26-r1 Cli diff --git a/src/tests/sns4sns26/scripts/clab-cli-r2.sh b/src/tests/sns4sns26/scripts/clab-cli-r2.sh new file mode 100644 index 0000000000000000000000000000000000000000..c8c55affdb06946e9098c2fbdd9bde7670c1eb07 --- /dev/null +++ b/src/tests/sns4sns26/scripts/clab-cli-r2.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Copyright 2022-2026 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-sns4sns26-r2 Cli diff --git a/src/tests/sns4sns26/scripts/clab-cli-r3.sh b/src/tests/sns4sns26/scripts/clab-cli-r3.sh new file mode 100644 index 0000000000000000000000000000000000000000..c8c55affdb06946e9098c2fbdd9bde7670c1eb07 --- /dev/null +++ b/src/tests/sns4sns26/scripts/clab-cli-r3.sh @@ -0,0 +1,16 @@ +#!/bin/bash +# Copyright 2022-2026 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-sns4sns26-r2 Cli diff --git a/src/tests/sns4sns26/scripts/clab-deploy.sh b/src/tests/sns4sns26/scripts/clab-deploy.sh new file mode 100644 index 0000000000000000000000000000000000000000..a0796c7f7738378fe1ec5e84f6b0189c00d76327 --- /dev/null +++ b/src/tests/sns4sns26/scripts/clab-deploy.sh @@ -0,0 +1,22 @@ +#!/bin/bash +# Copyright 2022-2026 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. + +sudo ip link set ens4 down +sudo ip link set ens5 down +sudo ip link set ens4 up +sudo ip link set ens5 up + +cd ~/tfs-ctrl/src/tests/sns4sns26 +sudo containerlab deploy --topo clab/sns4sns26.clab.yml diff --git a/src/tests/sns4sns26/scripts/clab-destroy.sh b/src/tests/sns4sns26/scripts/clab-destroy.sh new file mode 100644 index 0000000000000000000000000000000000000000..30c3ea065a5cd721e6de22f9e8dc65b99f0ef4b5 --- /dev/null +++ b/src/tests/sns4sns26/scripts/clab-destroy.sh @@ -0,0 +1,18 @@ +#!/bin/bash +# Copyright 2022-2026 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/src/tests/sns4sns26 +sudo containerlab destroy --topo clab/sns4sns26.clab.yml +sudo rm -rf clab/clab-sns4sns26/ clab/.sns4sns26.clab.yml.bak diff --git a/src/tests/sns4sns26/scripts/clab-inspect.sh b/src/tests/sns4sns26/scripts/clab-inspect.sh new file mode 100644 index 0000000000000000000000000000000000000000..4651b4c500843c6e9389135ec52053088ffdf85a --- /dev/null +++ b/src/tests/sns4sns26/scripts/clab-inspect.sh @@ -0,0 +1,17 @@ +#!/bin/bash +# Copyright 2022-2026 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/src/tests/sns4sns26 +sudo containerlab inspect --topo clab/sns4sns26.clab.yml diff --git a/src/tests/tools/__init__.py b/src/tests/tools/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/__init__.py +++ b/src/tests/tools/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/DeploymentSet.yaml b/src/tests/tools/firewall_agent/DeploymentSet.yaml index f23b33f26c4a4d63c23d20a0c06e75160cc1354e..cc753a9911f186a4c82c58ff17a8d93a80be560e 100644 --- a/src/tests/tools/firewall_agent/DeploymentSet.yaml +++ b/src/tests/tools/firewall_agent/DeploymentSet.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/Dockerfile b/src/tests/tools/firewall_agent/Dockerfile index 3207a5fff7f0140414f480ba1ebe2cfb5b44fcc8..16d05d194f0f3d4ca33d2e155b2dc0b490a088ff 100644 --- a/src/tests/tools/firewall_agent/Dockerfile +++ b/src/tests/tools/firewall_agent/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/docs/yang/generate-trees.sh b/src/tests/tools/firewall_agent/docs/yang/generate-trees.sh index 30f02e67edd7c0ae617149ec1fa5aeee2636ab80..eaecddecf348c5e467dfe9308ef339fd13810dc7 100755 --- a/src/tests/tools/firewall_agent/docs/yang/generate-trees.sh +++ b/src/tests/tools/firewall_agent/docs/yang/generate-trees.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/__init__.py b/src/tests/tools/firewall_agent/firewall_agent/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/__init__.py +++ b/src/tests/tools/firewall_agent/firewall_agent/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/app.py b/src/tests/tools/firewall_agent/firewall_agent/app.py index bf2d032a2dd6f83f6b990e07b61b0f7165b8ab4b..7277f9f33e177d5f5812753f6be43a224214001d 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/app.py +++ b/src/tests/tools/firewall_agent/firewall_agent/app.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/ACLs.py b/src/tests/tools/firewall_agent/firewall_agent/resources/ACLs.py index 945c98beb134660fa017f1cba3c57218dac50755..83b00da832c731ecbdd3b09d78198990d760c61a 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/ACLs.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/ACLs.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/AclRuleToInterfaceDirection.py b/src/tests/tools/firewall_agent/firewall_agent/resources/AclRuleToInterfaceDirection.py index 6f2668fd06ed41613775846cc728c89d02abe70d..0f9d3db10915940ce5285db6896d5a2be6a8eb91 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/AclRuleToInterfaceDirection.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/AclRuleToInterfaceDirection.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/Components.py b/src/tests/tools/firewall_agent/firewall_agent/resources/Components.py index a00f6d54e7c59005fbf4a8cdb7b4a07c7553ae1b..0881b0f8d36d31f9f8669189664479232b251b07 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/Components.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/Components.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/HostMeta.py b/src/tests/tools/firewall_agent/firewall_agent/resources/HostMeta.py index 1ef52084bd97cb7cbe15e9b28b9c4619f5d4a9b0..45efea1275b33a1d999553525c7604e461870278 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/HostMeta.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/HostMeta.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/Interfaces.py b/src/tests/tools/firewall_agent/firewall_agent/resources/Interfaces.py index 4c8d9e307bd1f69d60212fa87af5fdfee7a1fdc8..98e69d971ec5642b16e53a443c3c1f03fe95f4a2 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/Interfaces.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/Interfaces.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/Root.py b/src/tests/tools/firewall_agent/firewall_agent/resources/Root.py index 951a3c888547ce622f2b4576880a43b5347cb52c..9281eb0cef113a71071385f448a322bf7ff7a459 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/Root.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/Root.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/__init__.py b/src/tests/tools/firewall_agent/firewall_agent/resources/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/__init__.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/ActionEnum.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/ActionEnum.py index 6db7d15e01bbe3abc850f0f9eb4b37b10cd130d4..c452c4ccd71ee01ad680310b72c00c73bae00961 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/ActionEnum.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/ActionEnum.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Chain.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Chain.py index 3cd0ff76947ac6842f876f8d4d96e73424bb4634..af0aa7202f8c314881181b7d210079a7d7caa0f5 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Chain.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Chain.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/DirectionEnum.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/DirectionEnum.py index dec3813dc435c39962a14b43216a1e4a3cda5038..05cf60da3afc416afa7841a153f9fe21ac307c76 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/DirectionEnum.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/DirectionEnum.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Exceptions.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Exceptions.py index 17bb3441e6b49944c1524babad1c42b6c576448c..65fa4abaa9c6968d36e2e202ae9043840a575054 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Exceptions.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Exceptions.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/FamilyEnum.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/FamilyEnum.py index f0e2a933ad5846da52d80de18a7f2f1da9d0d9fa..6176587008a2c3b43205c760f4bd2b7729343f70 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/FamilyEnum.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/FamilyEnum.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTables.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTables.py index 7c3aea14bc9927ded3067f3501866d6b099c287d..9289b7d5650a47342750173178dfb54bb858c8d3 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTables.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTables.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTablesCommand.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTablesCommand.py index 983acf506981aac5ef40ec8950fe3d84b39641b6..bc3e75ffa124207accda6bcdc86cdc028c43e9d9 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTablesCommand.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTablesCommand.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTablesParserTools.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTablesParserTools.py index 0546787d8bf9252c8bd79e21b78c2c13ea5a733a..1d7b840ee276b918771589846e45b8772d9dd8f4 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTablesParserTools.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/NFTablesParserTools.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/ProtocolEnum.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/ProtocolEnum.py index c54ed6365d801e0cd39ee397accc005539479fdc..83858818ec9679b1acc44085cf13ea4cb084fd99 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/ProtocolEnum.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/ProtocolEnum.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Rule.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Rule.py index 040a03ca8dedf8bc72488b690bf4b123c48258de..460f05fc0e29c99ad8e33fa3f90a653e72fd572b 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Rule.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Rule.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Table.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Table.py index 85512f352489f315e22ac5bb62f87e3d3999020a..6ae6eb61f8d79cf50b9dc69015a43b5cf125c3b2 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Table.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/Table.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/TableEnum.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/TableEnum.py index 8388b2abe7486166e7209919c571c2e50a7abe5b..716741618688d1562dc99c792ffd1bfdde5a1607 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/TableEnum.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/TableEnum.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/__init__.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/__init__.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/__main__.py b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/__main__.py index dc838bd264ab69d029993d6838c41e180a88ccc0..68316a6fb9ff00f7d73009ce5fd03f67a6015f7e 100644 --- a/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/__main__.py +++ b/src/tests/tools/firewall_agent/firewall_agent/resources/nft_model/__main__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/redeploy-docker.sh b/src/tests/tools/firewall_agent/redeploy-docker.sh index 62dada77b6a2383cda12990004f886cb7b28f07e..292d013b064584aeb890b63714276dd7276ab813 100755 --- a/src/tests/tools/firewall_agent/redeploy-docker.sh +++ b/src/tests/tools/firewall_agent/redeploy-docker.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/redeploy-kubernetes.sh b/src/tests/tools/firewall_agent/redeploy-kubernetes.sh index ad42c14c4a365d83e010bb0d4cb28073729a32b0..9ad0cdbcb6ee0909233cc3c396c0c58fd91dda5f 100755 --- a/src/tests/tools/firewall_agent/redeploy-kubernetes.sh +++ b/src/tests/tools/firewall_agent/redeploy-kubernetes.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/requirements.txt b/src/tests/tools/firewall_agent/requirements.txt index 4ed5d0f4ee2a1554935e5a5f505b4b069974b9a9..42abdb2502c41f5bc8a7ca376dc0eac162ab4b44 100644 --- a/src/tests/tools/firewall_agent/requirements.txt +++ b/src/tests/tools/firewall_agent/requirements.txt @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/scripts/run_nft_model.sh b/src/tests/tools/firewall_agent/scripts/run_nft_model.sh index d57ad29f95d118cbbba0fa8b484d6935864dcad9..f01538b09337ec0946303cda1875c1b3dac4a688 100755 --- a/src/tests/tools/firewall_agent/scripts/run_nft_model.sh +++ b/src/tests/tools/firewall_agent/scripts/run_nft_model.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/scripts/test_commands.sh b/src/tests/tools/firewall_agent/scripts/test_commands.sh index 22da27d928200b93490956bac183cff93978dc56..93a6aa174d35e039c7faf147f40cbc6f8769c3ef 100755 --- a/src/tests/tools/firewall_agent/scripts/test_commands.sh +++ b/src/tests/tools/firewall_agent/scripts/test_commands.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/tests/docker-compose-down.sh b/src/tests/tools/firewall_agent/tests/docker-compose-down.sh index edae64d04e60d16a04a09c4c7183b361bb3193e1..9d1836bfac972840f58f9ed3d20c6249c94bc0e1 100755 --- a/src/tests/tools/firewall_agent/tests/docker-compose-down.sh +++ b/src/tests/tools/firewall_agent/tests/docker-compose-down.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/tests/docker-compose-up.sh b/src/tests/tools/firewall_agent/tests/docker-compose-up.sh index 43687694ba617e54ef396aa36675ab23b37ccd33..6295ab5caf8a2b0aadc95b473195cab78013a497 100755 --- a/src/tests/tools/firewall_agent/tests/docker-compose-up.sh +++ b/src/tests/tools/firewall_agent/tests/docker-compose-up.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/tests/docker-compose.yml b/src/tests/tools/firewall_agent/tests/docker-compose.yml index 596ae4d5111ccbe6a59aff478583766816db01f8..a41187112b5d8ab0b1ee49715a194d7f2ba95bb9 100644 --- a/src/tests/tools/firewall_agent/tests/docker-compose.yml +++ b/src/tests/tools/firewall_agent/tests/docker-compose.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/firewall_agent/tests/test_commands.sh b/src/tests/tools/firewall_agent/tests/test_commands.sh index 5e82b091372b6820f17044ebb019f2c416559aab..10fb4954405e5233a7539b1dde05946e08ec4b15 100755 --- a/src/tests/tools/firewall_agent/tests/test_commands.sh +++ b/src/tests/tools/firewall_agent/tests/test_commands.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/load_scenario/__init__.py b/src/tests/tools/load_scenario/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/load_scenario/__init__.py +++ b/src/tests/tools/load_scenario/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/load_scenario/__main__.py b/src/tests/tools/load_scenario/__main__.py index 24042f0d8eadf8be28d4213cac2676a4cbe33398..63cb4707dbff1369d66dd32e113cd479209a1dac 100644 --- a/src/tests/tools/load_scenario/__main__.py +++ b/src/tests/tools/load_scenario/__main__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/load_scenario/run.sh b/src/tests/tools/load_scenario/run.sh index 1eb3281550a2ae0b0996410a9c4aa678ecd1c3b2..c85491b745d76bc7649fe94a98521d7029653219 100755 --- a/src/tests/tools/load_scenario/run.sh +++ b/src/tests/tools/load_scenario/run.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_actn_sdn_ctrl/Dockerfile b/src/tests/tools/mock_ietf_actn_sdn_ctrl/Dockerfile index 1d4c3db08f45943181b6a4597a44e75afcc31e26..2260cf7de287a7dd4d619d84b5c4368af07537c8 100644 --- a/src/tests/tools/mock_ietf_actn_sdn_ctrl/Dockerfile +++ b/src/tests/tools/mock_ietf_actn_sdn_ctrl/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_actn_sdn_ctrl/MockIetfActnSdnCtrl.py b/src/tests/tools/mock_ietf_actn_sdn_ctrl/MockIetfActnSdnCtrl.py index 19ad8b6935a6d268bec080055c2e15e9370d4320..563497e20711f27688d80d2fbfa6bd76bd8219a9 100644 --- a/src/tests/tools/mock_ietf_actn_sdn_ctrl/MockIetfActnSdnCtrl.py +++ b/src/tests/tools/mock_ietf_actn_sdn_ctrl/MockIetfActnSdnCtrl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_actn_sdn_ctrl/ResourceEthServices.py b/src/tests/tools/mock_ietf_actn_sdn_ctrl/ResourceEthServices.py index b4b00019841f9d490d178513310dfef96e1ab68d..9284510cad8219eefcffb69d22313cceb678958c 100644 --- a/src/tests/tools/mock_ietf_actn_sdn_ctrl/ResourceEthServices.py +++ b/src/tests/tools/mock_ietf_actn_sdn_ctrl/ResourceEthServices.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_actn_sdn_ctrl/ResourceOsuTunnels.py b/src/tests/tools/mock_ietf_actn_sdn_ctrl/ResourceOsuTunnels.py index fc5969cad4c4d4d824fa15a11c0c14a3bcbac023..e16d95b8c127a9f537d951defb3130b7cb782b3c 100644 --- a/src/tests/tools/mock_ietf_actn_sdn_ctrl/ResourceOsuTunnels.py +++ b/src/tests/tools/mock_ietf_actn_sdn_ctrl/ResourceOsuTunnels.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_actn_sdn_ctrl/__init__.py b/src/tests/tools/mock_ietf_actn_sdn_ctrl/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/mock_ietf_actn_sdn_ctrl/__init__.py +++ b/src/tests/tools/mock_ietf_actn_sdn_ctrl/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_actn_sdn_ctrl/build.sh b/src/tests/tools/mock_ietf_actn_sdn_ctrl/build.sh index 79f75da9c5d12bd22848f7862c9a085bb6439f99..68de3a784c8e39e970be393604f5ea9c3fca86e5 100755 --- a/src/tests/tools/mock_ietf_actn_sdn_ctrl/build.sh +++ b/src/tests/tools/mock_ietf_actn_sdn_ctrl/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_actn_sdn_ctrl/deploy.sh b/src/tests/tools/mock_ietf_actn_sdn_ctrl/deploy.sh index 2c0719b15bca733ba1303cb973a71dfaf22caf8e..560251c0f39d2ccf17741c5809012ee2921728f8 100755 --- a/src/tests/tools/mock_ietf_actn_sdn_ctrl/deploy.sh +++ b/src/tests/tools/mock_ietf_actn_sdn_ctrl/deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_actn_sdn_ctrl/mock-ietf-actn-sdn-ctrl.yaml b/src/tests/tools/mock_ietf_actn_sdn_ctrl/mock-ietf-actn-sdn-ctrl.yaml index 8da4b6c101cf05c56eea90a9fe59a70f02d9f844..3b91e0e7e5c65c81cda66de35dbdb06c047c3541 100644 --- a/src/tests/tools/mock_ietf_actn_sdn_ctrl/mock-ietf-actn-sdn-ctrl.yaml +++ b/src/tests/tools/mock_ietf_actn_sdn_ctrl/mock-ietf-actn-sdn-ctrl.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_actn_sdn_ctrl/requirements.in b/src/tests/tools/mock_ietf_actn_sdn_ctrl/requirements.in index dbb8e95d65cfd0f1ee60d9bb4f840393ac893725..d6d107410a5a441d4f5df7091dc14d182f557b0a 100644 --- a/src/tests/tools/mock_ietf_actn_sdn_ctrl/requirements.in +++ b/src/tests/tools/mock_ietf_actn_sdn_ctrl/requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_actn_sdn_ctrl/run.sh b/src/tests/tools/mock_ietf_actn_sdn_ctrl/run.sh index ecef1d5d52f462a5f92f8f700d61b5b7b322a75d..65ccefabd1582d8bcb60223a7389b4ad616cc44d 100755 --- a/src/tests/tools/mock_ietf_actn_sdn_ctrl/run.sh +++ b/src/tests/tools/mock_ietf_actn_sdn_ctrl/run.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/Dockerfile b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/Dockerfile index e80d8714576cf6a7f7d95fb84972dde5ed37716d..6685a31735d2a2d176d28877fc95ad7b4de9dfa7 100644 --- a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/Dockerfile +++ b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/L3VPNServices.py b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/L3VPNServices.py index 1e4d7c6195a3dd0b0cb6c124f788c2efa5fe7927..34320529ca0b6b87f185bb04260bf083f2d79cd5 100644 --- a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/L3VPNServices.py +++ b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/L3VPNServices.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/MockIetfL3VPNSdnCtrl.py b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/MockIetfL3VPNSdnCtrl.py index 49685aa19902c619cdc0259b5cb0573dbf77bd63..c363c295b4e127121b299a7f97669a0760628f13 100644 --- a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/MockIetfL3VPNSdnCtrl.py +++ b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/MockIetfL3VPNSdnCtrl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/__init__.py b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/__init__.py +++ b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/build.sh b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/build.sh index e5f12798556b0c9c044d86c0f175aeec9d0cff23..89478291177d2ca93414a606c59b3b0355390de0 100755 --- a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/build.sh +++ b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/deploy.sh b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/deploy.sh index 1c6e68deb33de588cffab91fda550aafe222ce37..1bb7e4b9e58c2e0cdfe78884ce63cfb7fb15b7b2 100755 --- a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/deploy.sh +++ b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/mock-ietf-network-slice-sdn-ctrl.yaml b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/mock-ietf-network-slice-sdn-ctrl.yaml index ace79810f0cbfbd6605ef049c71c6c75cf5c0317..f705bc6b1ad9d71474ac45183dcf57ddc2504765 100644 --- a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/mock-ietf-network-slice-sdn-ctrl.yaml +++ b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/mock-ietf-network-slice-sdn-ctrl.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/requirements.in b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/requirements.in index dbb8e95d65cfd0f1ee60d9bb4f840393ac893725..d6d107410a5a441d4f5df7091dc14d182f557b0a 100644 --- a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/requirements.in +++ b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/run.sh b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/run.sh index 3c0ddc2b06f8f3af6ed3645a65fcea31888c82de..a6e542a80ea11a7550041d50a6f15d1dfb33db68 100755 --- a/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/run.sh +++ b/src/tests/tools/mock_ietf_l3vpn_sdn_ctrl/run.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/Dockerfile b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/Dockerfile index 44f2488f175609cb1572ab89575ec0a8fb92715b..cb95d3404570449ad4192b4d6edad0520b7a651d 100644 --- a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/Dockerfile +++ b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/MockIetfNetworkSliceSdnCtrl.py b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/MockIetfNetworkSliceSdnCtrl.py index 8d13f1bafcd98c28f20033ab8859bc6cc4b207dd..7fcac599b3fe608f6e47aedeb4b60ed5b9a41f2d 100644 --- a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/MockIetfNetworkSliceSdnCtrl.py +++ b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/MockIetfNetworkSliceSdnCtrl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/ResourceConnectionGroups.py b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/ResourceConnectionGroups.py index 19c84e181a97354940fd3dca8f3d6396c0a50068..f64f47af0e6eed9540c1f42c0a61b53295a93e43 100644 --- a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/ResourceConnectionGroups.py +++ b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/ResourceConnectionGroups.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/ResourceNetworkSlices.py b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/ResourceNetworkSlices.py index 80840f8da13e00af689c7b84e9577e952d9e2adf..46dc5220b726ea7512da2ae1e7b5ca11f97e6a06 100644 --- a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/ResourceNetworkSlices.py +++ b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/ResourceNetworkSlices.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/__init__.py b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/__init__.py +++ b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/build.sh b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/build.sh index 8e4dda34d7c83ef76c9944bcf52475de05d5238d..a14fcfeb9058fb4544492a79249cfe1ecdd8db4c 100755 --- a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/build.sh +++ b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/deploy.sh b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/deploy.sh index 6db45be588e4d538e04ecb8922b3350432439a70..24c0f2abaeccd8469206a1a1cca7bc3576d5bce5 100755 --- a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/deploy.sh +++ b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/mock-ietf-network-slice-sdn-ctrl.yaml b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/mock-ietf-network-slice-sdn-ctrl.yaml index cd5734a5f3087dc36d9a103a75e90f3eb902865d..1e6cc665cba89b3be138519ea0f27cbb3b510620 100644 --- a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/mock-ietf-network-slice-sdn-ctrl.yaml +++ b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/mock-ietf-network-slice-sdn-ctrl.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/requirements.in b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/requirements.in index dbb8e95d65cfd0f1ee60d9bb4f840393ac893725..d6d107410a5a441d4f5df7091dc14d182f557b0a 100644 --- a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/requirements.in +++ b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/run.sh b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/run.sh index f52b6061b3d89b75504f2b80d77696573a09814d..b65c3a4b1414ce4a23652b172035a17362759e6a 100755 --- a/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/run.sh +++ b/src/tests/tools/mock_ietf_network_slice_sdn_ctrl/run.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ipm_sdn_ctrl/MockIPMSdnCtrl.py b/src/tests/tools/mock_ipm_sdn_ctrl/MockIPMSdnCtrl.py index c67ddfbde100c0288cac9ec141649f2f837d25f5..1944a5c7ebd09e94c711189c99b66808a2b68b50 100644 --- a/src/tests/tools/mock_ipm_sdn_ctrl/MockIPMSdnCtrl.py +++ b/src/tests/tools/mock_ipm_sdn_ctrl/MockIPMSdnCtrl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_ipm_sdn_ctrl/run.sh b/src/tests/tools/mock_ipm_sdn_ctrl/run.sh index bfb81966493bc376a160f95bacab57f9ab7e4291..2fd6f0da0e7a2816fadd5d91fe671c096d335967 100755 --- a/src/tests/tools/mock_ipm_sdn_ctrl/run.sh +++ b/src/tests/tools/mock_ipm_sdn_ctrl/run.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py b/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py index 2df1d768baf7fc42b03033b935b793f7624a4a85..e9e1ae153425e4cfb796ab3f62409f369a9855db 100644 --- a/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py +++ b/src/tests/tools/mock_mw_sdn_ctrl/MockMWSdnCtrl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_mw_sdn_ctrl/run.sh b/src/tests/tools/mock_mw_sdn_ctrl/run.sh index 68a86a15e0f2075aa20e61fe813bb615ca4fd1bd..51a7b0bdb204a987377c3270f6429c6d46ed876e 100755 --- a/src/tests/tools/mock_mw_sdn_ctrl/run.sh +++ b/src/tests/tools/mock_mw_sdn_ctrl/run.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_mw_sdn_ctrl/scenario/microwave_deploy.sh b/src/tests/tools/mock_mw_sdn_ctrl/scenario/microwave_deploy.sh index 503705502efe71f433ca35904f28086ef252bebf..044b74a0fc4ee9428d1e9794dad66b8a74d2a7b8 100755 --- a/src/tests/tools/mock_mw_sdn_ctrl/scenario/microwave_deploy.sh +++ b/src/tests/tools/mock_mw_sdn_ctrl/scenario/microwave_deploy.sh @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/Dockerfile b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/Dockerfile index dd45a16d985b2b44017e6e6129ab364ec81b5fe5..0869623ffca719ce343cb257d706badce963884f 100644 --- a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/Dockerfile +++ b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/build.sh b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/build.sh index a85f394078a1e4b3a9e6a44c8b5562cc7abe732e..83886bdc920dbd1d8d709828186e742b7f8170ff 100755 --- a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/build.sh +++ b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/deploy.sh b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/deploy.sh index 82c318207115bac9f25df67e4d615f8914690674..ed821ed43d4d04fa74e484c296154204e91794f4 100755 --- a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/deploy.sh +++ b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/mock-mw-sdn-ctrl.yaml b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/mock-mw-sdn-ctrl.yaml index 22da69c6185cf9a0ae783f709916c2617dd70a7f..4cfa8322c5c5fff185893738d3c999e03ab1528a 100644 --- a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/mock-mw-sdn-ctrl.yaml +++ b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/mock-mw-sdn-ctrl.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/requirements.in b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/requirements.in index 4c2ac3bf08976609479dc7d5f57e9dce47b2e269..d044c6f28eae0f5f0d6432d44577e0d334531eaf 100644 --- a/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/requirements.in +++ b/src/tests/tools/mock_mw_sdn_ctrl/ssl_not_working/requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_mw_sdn_ctrl/test_mw.py b/src/tests/tools/mock_mw_sdn_ctrl/test_mw.py index 05c269b6915526d98d0a4e1fca613986123af46e..44c0521d48518b803e6d38066a8935d0d28acc5f 100644 --- a/src/tests/tools/mock_mw_sdn_ctrl/test_mw.py +++ b/src/tests/tools/mock_mw_sdn_ctrl/test_mw.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_ctrl/Dockerfile b/src/tests/tools/mock_nce_ctrl/Dockerfile index 8fe63387fd5c08035f3abcf789691f9bf4595324..bd444f7cdb96eaad3092712bfe2e8b42bc7ce385 100644 --- a/src/tests/tools/mock_nce_ctrl/Dockerfile +++ b/src/tests/tools/mock_nce_ctrl/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_ctrl/MockNCECtrl.py b/src/tests/tools/mock_nce_ctrl/MockNCECtrl.py index e58a4dc445e74e6186267e7b43b2872b05cb114e..7d044a46e7903267778c7e7423ae31c68fe3c4f0 100644 --- a/src/tests/tools/mock_nce_ctrl/MockNCECtrl.py +++ b/src/tests/tools/mock_nce_ctrl/MockNCECtrl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_ctrl/ResourceAppFlows.py b/src/tests/tools/mock_nce_ctrl/ResourceAppFlows.py index 9f7a8df41497293af912bcf4f77aa27eabdbf095..8423a9a306a7f75b3b2b28818b7474c2029b5d71 100644 --- a/src/tests/tools/mock_nce_ctrl/ResourceAppFlows.py +++ b/src/tests/tools/mock_nce_ctrl/ResourceAppFlows.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_ctrl/ResourceApps.py b/src/tests/tools/mock_nce_ctrl/ResourceApps.py index 163d08fc2fed7fd3c21806418de06bf7ef08741a..b125a51f0c50c7a647de9f13003a8e19abc058c3 100644 --- a/src/tests/tools/mock_nce_ctrl/ResourceApps.py +++ b/src/tests/tools/mock_nce_ctrl/ResourceApps.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_ctrl/__init__.py b/src/tests/tools/mock_nce_ctrl/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/mock_nce_ctrl/__init__.py +++ b/src/tests/tools/mock_nce_ctrl/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_ctrl/build.sh b/src/tests/tools/mock_nce_ctrl/build.sh index 766d2c1dc5d3a890c5a74d88c22055792b089de4..ce1dcab2eacb7e4299470d24487d4048aad82a47 100755 --- a/src/tests/tools/mock_nce_ctrl/build.sh +++ b/src/tests/tools/mock_nce_ctrl/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_ctrl/deploy.sh b/src/tests/tools/mock_nce_ctrl/deploy.sh index 30f09a783bd2f0b5d715ec54a3da2c09853aada4..b15988b69981c6b1007d219d72c7c7a10581cc90 100755 --- a/src/tests/tools/mock_nce_ctrl/deploy.sh +++ b/src/tests/tools/mock_nce_ctrl/deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_ctrl/mock-nce-ctrl.yaml b/src/tests/tools/mock_nce_ctrl/mock-nce-ctrl.yaml index 4a1512f238970afb0867a3cb79824df4ac60d5c9..efd85f52835b9b49d15358730e2a48079090315d 100644 --- a/src/tests/tools/mock_nce_ctrl/mock-nce-ctrl.yaml +++ b/src/tests/tools/mock_nce_ctrl/mock-nce-ctrl.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_ctrl/requirements.in b/src/tests/tools/mock_nce_ctrl/requirements.in index dbb8e95d65cfd0f1ee60d9bb4f840393ac893725..d6d107410a5a441d4f5df7091dc14d182f557b0a 100644 --- a/src/tests/tools/mock_nce_ctrl/requirements.in +++ b/src/tests/tools/mock_nce_ctrl/requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_ctrl/run.sh b/src/tests/tools/mock_nce_ctrl/run.sh index 6aa1149a4a9571bc1e52ab66ca0a36391edc6f54..85aa1ba79dd9f0e4541ffeb0df53bc451d8b5308 100755 --- a/src/tests/tools/mock_nce_ctrl/run.sh +++ b/src/tests/tools/mock_nce_ctrl/run.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/Dockerfile b/src/tests/tools/mock_nce_fan_ctrl/Dockerfile index c16e884f55e1f7da318ffc474b9c76cd4c7af7a6..6db8e318b8beca7fa6539d93de278c7864d36060 100644 --- a/src/tests/tools/mock_nce_fan_ctrl/Dockerfile +++ b/src/tests/tools/mock_nce_fan_ctrl/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/build.sh b/src/tests/tools/mock_nce_fan_ctrl/build.sh index 5899594354995121940e2b17c313ffc6763344ca..d161fbbd2f70cca4ec6a12faddb281f0f3fc2a94 100755 --- a/src/tests/tools/mock_nce_fan_ctrl/build.sh +++ b/src/tests/tools/mock_nce_fan_ctrl/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/deploy.sh b/src/tests/tools/mock_nce_fan_ctrl/deploy.sh index 7e0d56abe468f72add462daf3cf315f178509305..831bc9a9841b018a92035e5a47c8532be3d506ba 100755 --- a/src/tests/tools/mock_nce_fan_ctrl/deploy.sh +++ b/src/tests/tools/mock_nce_fan_ctrl/deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/destroy.sh b/src/tests/tools/mock_nce_fan_ctrl/destroy.sh index 64148a70a5b31c83391a74708613bb7c939d1a26..71a5fc83931a6e670bfbc73542318130bc9543f4 100755 --- a/src/tests/tools/mock_nce_fan_ctrl/destroy.sh +++ b/src/tests/tools/mock_nce_fan_ctrl/destroy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_client/Requests.py b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_client/Requests.py index 042c31c8afa3144b9a94eea5a3527f27af409ecc..4d87931c46850f8abf52367c4f1349c9f1c1c253 100644 --- a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_client/Requests.py +++ b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_client/Requests.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_client/__init__.py b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_client/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_client/__init__.py +++ b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_client/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_client/__main__.py b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_client/__main__.py index fd02f323d8c764cef34e23d243944998525fa2e5..56587549f2831856db78594b8656c127f1885134 100644 --- a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_client/__main__.py +++ b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_client/__main__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/Callbacks.py b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/Callbacks.py index 622e03fbf7cf5942e4bab4b7e5a9ff94e74aed78..b514c8e949ad280e1c2c5bad644aaed1cbe2db36 100644 --- a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/Callbacks.py +++ b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/Callbacks.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/SimapClient.py b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/SimapClient.py index 725b08bd47e0bd127cf0f7c4131cb744313b149d..6f40f66cf7d7f53dae32a561852a3eace87d1d4c 100644 --- a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/SimapClient.py +++ b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/SimapClient.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/SimapUpdater.py b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/SimapUpdater.py index 8cc114433a37c47ba6b8a1d9c61dbea902a503b3..7f3803297d0f2b80e4feb76d87149a43cf6880fd 100644 --- a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/SimapUpdater.py +++ b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/SimapUpdater.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/__init__.py b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/__init__.py +++ b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/__main__.py b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/__main__.py index 2c84d92efd7e33d44237e3a8791771a371e12f3f..79de210abfd24352c24554dc2a0b92817fe0ec8c 100644 --- a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/__main__.py +++ b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/__main__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/app.py b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/app.py index bf6e5c6a5c1eaf845423b9d69b90b65146330e88..811c82b53b8ac827bd71ed5e019427a078b9a444 100644 --- a/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/app.py +++ b/src/tests/tools/mock_nce_fan_ctrl/nce_fan_ctrl/app.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/redeploy.sh b/src/tests/tools/mock_nce_fan_ctrl/redeploy.sh index 5be64707fdf16c533ec233993ed7e235d03b191c..abb514b39279c8565812cbf3da4189804eb2a6c3 100755 --- a/src/tests/tools/mock_nce_fan_ctrl/redeploy.sh +++ b/src/tests/tools/mock_nce_fan_ctrl/redeploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/run_client.sh b/src/tests/tools/mock_nce_fan_ctrl/run_client.sh index 4384f0fdbf209f11104ac39c4e0362cabb16271a..014bc029f997b1e369ba27ea11faf0932b6a83dc 100755 --- a/src/tests/tools/mock_nce_fan_ctrl/run_client.sh +++ b/src/tests/tools/mock_nce_fan_ctrl/run_client.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_fan_ctrl/yang/.gitignore b/src/tests/tools/mock_nce_fan_ctrl/yang/.gitignore index 6c90250b25a5658005177d63be898480fa7d8b60..22aa139d17bb85e0595d4b60ff01abee37125b07 100644 --- a/src/tests/tools/mock_nce_fan_ctrl/yang/.gitignore +++ b/src/tests/tools/mock_nce_fan_ctrl/yang/.gitignore @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/Dockerfile b/src/tests/tools/mock_nce_t_ctrl/Dockerfile index 84af03eefb6efaf62d498edd5ed9f37763baa371..b846184a5ab5b7b379328b7108e1d28297a705a9 100644 --- a/src/tests/tools/mock_nce_t_ctrl/Dockerfile +++ b/src/tests/tools/mock_nce_t_ctrl/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/build.sh b/src/tests/tools/mock_nce_t_ctrl/build.sh index d02c0fc435bf0d108a42fa639a1a4c48067a09e3..f7311205c8b0d85610672cf1dcba3a89cfee7b39 100755 --- a/src/tests/tools/mock_nce_t_ctrl/build.sh +++ b/src/tests/tools/mock_nce_t_ctrl/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/deploy.sh b/src/tests/tools/mock_nce_t_ctrl/deploy.sh index e1d36506eab531cd5c5480e9afa6db6a51eee952..ca9bbd0814776c5206a8f19f554a45bb07c269b9 100755 --- a/src/tests/tools/mock_nce_t_ctrl/deploy.sh +++ b/src/tests/tools/mock_nce_t_ctrl/deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/destroy.sh b/src/tests/tools/mock_nce_t_ctrl/destroy.sh index 44ee8703c25ed283dd3db32a542ec29e15e45a22..4761a45281f662a029761ca2d7e0ddef978b9976 100755 --- a/src/tests/tools/mock_nce_t_ctrl/destroy.sh +++ b/src/tests/tools/mock_nce_t_ctrl/destroy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/nce_t_client/Requests.py b/src/tests/tools/mock_nce_t_ctrl/nce_t_client/Requests.py index fb3e06ecb7eba54d0ffe4876de1003e0a4b115fe..7f1a47e47cf847aab2c1d04d1feb8cc642b40e93 100644 --- a/src/tests/tools/mock_nce_t_ctrl/nce_t_client/Requests.py +++ b/src/tests/tools/mock_nce_t_ctrl/nce_t_client/Requests.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/nce_t_client/__init__.py b/src/tests/tools/mock_nce_t_ctrl/nce_t_client/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/mock_nce_t_ctrl/nce_t_client/__init__.py +++ b/src/tests/tools/mock_nce_t_ctrl/nce_t_client/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/nce_t_client/__main__.py b/src/tests/tools/mock_nce_t_ctrl/nce_t_client/__main__.py index c4dc92bc55114da7fe2b85aba939a52dd3e3b48f..9645c6405bcb657144fce11106bcfd56daf5d482 100644 --- a/src/tests/tools/mock_nce_t_ctrl/nce_t_client/__main__.py +++ b/src/tests/tools/mock_nce_t_ctrl/nce_t_client/__main__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/Callbacks.py b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/Callbacks.py index d2c2b5c2f37ec115fba9382cd988d73a7c63384f..d7f7c20566dd1ab7baf0e21f9c71f26b30a9a6a9 100644 --- a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/Callbacks.py +++ b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/Callbacks.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/ResourceEthServices.py b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/ResourceEthServices.py index b7d41f41adcebe285a69ea824c2e75fcad064d72..8d1f8bf1b16313a4b0f62394406a1d10fe8a4984 100644 --- a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/ResourceEthServices.py +++ b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/ResourceEthServices.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/ResourceOsuTunnels.py b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/ResourceOsuTunnels.py index af5a00b6e636ca738fdbb84133e23adac7f3cb16..40a90b523f13e6e0646642b97c6425551801b20c 100644 --- a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/ResourceOsuTunnels.py +++ b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/ResourceOsuTunnels.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/SimapClient.py b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/SimapClient.py index 725b08bd47e0bd127cf0f7c4131cb744313b149d..6f40f66cf7d7f53dae32a561852a3eace87d1d4c 100644 --- a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/SimapClient.py +++ b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/SimapClient.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/SimapUpdater.py b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/SimapUpdater.py index cc792313b4b93ff8ff521ca7c80e38579dc21346..de3119b804011affb51ae190a0cfab8868c9f983 100644 --- a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/SimapUpdater.py +++ b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/SimapUpdater.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/__init__.py b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/__init__.py +++ b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/__main__.py b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/__main__.py index 2c84d92efd7e33d44237e3a8791771a371e12f3f..79de210abfd24352c24554dc2a0b92817fe0ec8c 100644 --- a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/__main__.py +++ b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/__main__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/app.py b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/app.py index 601350454487e2339ee59f61cbc964784423d9aa..cc77f8ae64c5e7708470765d7924d5fca132963a 100644 --- a/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/app.py +++ b/src/tests/tools/mock_nce_t_ctrl/nce_t_ctrl/app.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_nce_t_ctrl/redeploy.sh b/src/tests/tools/mock_nce_t_ctrl/redeploy.sh index ed5c254576ba94955b8d090c7b623f27881ecc0c..883a4ebfee7b343ead7d4c3ee0ab2536f9c8d7db 100755 --- a/src/tests/tools/mock_nce_t_ctrl/redeploy.sh +++ b/src/tests/tools/mock_nce_t_ctrl/redeploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -14,20 +14,20 @@ # limitations under the License. -echo "Building SIMAP Server..." +echo "Building SIMAP Datastore..." cd ~/tfs-ctrl/ -docker buildx build -t simap-server:mock -f ./src/tests/tools/simap_server/Dockerfile . +docker buildx build -t simap-datastore:mock -f ./src/tests/tools/simap_datastore/Dockerfile . echo "Building NCE-T Controller..." cd ~/tfs-ctrl/ docker buildx build -t nce-t-ctrl:mock -f ./src/tests/tools/mock_nce_t_ctrl/Dockerfile . echo "Cleaning up..." -docker rm --force simap-server +docker rm --force simap-datastore docker rm --force nce-t-ctrl echo "Deploying support services..." -docker run --detach --name simap-server --publish 8080:8080 simap-server:mock +docker run --detach --name simap-datastore --publish 8080:8080 simap-datastore:mock docker run --detach --name nce-t-ctrl --publish 8081:8080 --env SIMAP_ADDRESS=172.17.0.1 --env SIMAP_PORT=8080 nce-t-ctrl:mock sleep 2 diff --git a/src/tests/tools/mock_nce_t_ctrl/run_client.sh b/src/tests/tools/mock_nce_t_ctrl/run_client.sh index fe5155b3912e9fe52736db4484e27f64f3720b46..cf1273c776e11f4767ef80e921c37425303d33dc 100755 --- a/src/tests/tools/mock_nce_t_ctrl/run_client.sh +++ b/src/tests/tools/mock_nce_t_ctrl/run_client.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_osm/Constants.py b/src/tests/tools/mock_osm/Constants.py index f9c340647accf58485b3494dfc392f2742b56568..a6d0c6136aed0aeea63a4ef2aca6fb9fa9ca2d07 100644 --- a/src/tests/tools/mock_osm/Constants.py +++ b/src/tests/tools/mock_osm/Constants.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_osm/MockOSM.py b/src/tests/tools/mock_osm/MockOSM.py index 2361b44b6ba5872f5490f3e030c8349b7c7f16ed..be206ff7802293cdd4d14923c84949a6f09339b4 100644 --- a/src/tests/tools/mock_osm/MockOSM.py +++ b/src/tests/tools/mock_osm/MockOSM.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_osm/README.md b/src/tests/tools/mock_osm/README.md new file mode 100644 index 0000000000000000000000000000000000000000..a197303cb0e26399a3654fb40613c69869ef9e85 --- /dev/null +++ b/src/tests/tools/mock_osm/README.md @@ -0,0 +1,41 @@ +# Mock OSM (tests.tools.mock_osm) + +This package provides a small interactive shell for testing WIM connectivity +through the MockOSM connector. + +## Run + +```bash +python -m tests.tools.mock_osm example_connection.json example_mapping.json +``` + +## Commands + +- `create [vlan ]` + - `ELINE` requires exactly 2 endpoints + - `ELAN` requires at least 2 endpoints +- `status` +- `delete` +- `exit` + +Endpoints are provided as a list of strings (service endpoint IDs), for example: + +```text +(mock-osm) create ELINE ep-R1-1/2 ep-R4-1/3 +``` + +Optional VLAN tagging for all endpoints: + +```text +(mock-osm) create ELINE ep-R1-1/2 ep-R4-1/3 vlan 1234 +``` + +## Example configs + +See: +- `src/tests/tools/mock_osm/example_connection.json` +- `src/tests/tools/mock_osm/example_mapping.json` + +The mapping file is a JSON list where each entry includes the +`service_endpoint_id`, `device-id`, and `service_mapping_info` with `bearer` +and `site-id`. diff --git a/src/tests/tools/mock_osm/Tools.py b/src/tests/tools/mock_osm/Tools.py index 56b0c11d2ad5ae044380fca190fcf1f48d771e8a..8f510b114f4ba458d1e1c160c9a63d5a74ce3f83 100644 --- a/src/tests/tools/mock_osm/Tools.py +++ b/src/tests/tools/mock_osm/Tools.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -12,14 +12,17 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Dict, Optional +from typing import Dict, Optional, Tuple def compose_service_endpoint_id(site_id : str, endpoint_id : Dict): device_uuid = endpoint_id['device_id']['device_uuid']['uuid'] endpoint_uuid = endpoint_id['endpoint_uuid']['uuid'] return ':'.join([site_id, device_uuid, endpoint_uuid]) -def wim_mapping(site_id, ce_endpoint_id, pe_device_id : Optional[Dict] = None, priority=None, redundant=[]): +def wim_mapping( + site_id, ce_endpoint_id, pe_device_id : Optional[Dict] = None, + bearer_prefix : Optional[str] = None, priority=None, redundant=[] +) -> Tuple[str, Dict]: ce_device_uuid = ce_endpoint_id['device_id']['device_uuid']['uuid'] ce_endpoint_uuid = ce_endpoint_id['endpoint_uuid']['uuid'] service_endpoint_id = compose_service_endpoint_id(site_id, ce_endpoint_id) @@ -28,6 +31,8 @@ def wim_mapping(site_id, ce_endpoint_id, pe_device_id : Optional[Dict] = None, p else: pe_device_uuid = pe_device_id['device_uuid']['uuid'] bearer = '{:s}:{:s}'.format(ce_device_uuid, pe_device_uuid) + if bearer_prefix is not None: + bearer = '{:s}:{:s}'.format(bearer_prefix, bearer) mapping = { 'service_endpoint_id': service_endpoint_id, 'datacenter_id': site_id, 'device_id': ce_device_uuid, 'device_interface_id': ce_endpoint_uuid, diff --git a/src/tests/tools/mock_osm/WimconnectorIETFL2VPN.py b/src/tests/tools/mock_osm/WimconnectorIETFL2VPN.py index aa4ca045f41ffdc69d2ebf2fcd9b5db99ce45dbe..aaaac001407fbcd89dc46ab14886306f3b9d98ef 100644 --- a/src/tests/tools/mock_osm/WimconnectorIETFL2VPN.py +++ b/src/tests/tools/mock_osm/WimconnectorIETFL2VPN.py @@ -167,7 +167,7 @@ class WimconnectorIETFL2VPN(SdnConnectorBase): """ SETTINGS = { # min_endpoints, max_endpoints, vpn_service_type 'ELINE': (2, 2, 'vpws'), # Virtual Private Wire Service - 'ELAN' : (2, None, 'vpls'), # Virtual Private LAN Service + 'ELAN' : (2, None, 'bgp-vpls'), # Virtual Private LAN Service } settings = SETTINGS.get(service_type) if settings is None: raise NotImplementedError('Unsupported service_type({:s})'.format(str(service_type))) @@ -193,7 +193,7 @@ class WimconnectorIETFL2VPN(SdnConnectorBase): vpn_service_l = {"ietf-l2vpn-svc:vpn-service": vpn_service_list} response_service_creation = None conn_info = [] - self.logger.info("Sending vpn-service :{}".format(vpn_service_l)) + self.logger.info("Sending vpn-service : {:s}".format(str(vpn_service_l))) try: endpoint_service_creation = ( @@ -291,12 +291,12 @@ class WimconnectorIETFL2VPN(SdnConnectorBase): if access_priority is not None: availability = {} availability["access-priority"] = access_priority - availability["single-active"] = [None] + availability["single-active"] = None site_network_access["availability"] = availability constraint = {} constraint['constraint-type'] = 'end-to-end-diverse' - constraint['target'] = {'all-other-accesses': [None]} + constraint['target'] = {'all-other-accesses': None} access_diversity = {} access_diversity['constraints'] = {'constraint': []} @@ -319,6 +319,8 @@ class WimconnectorIETFL2VPN(SdnConnectorBase): conn_info_d["mapping"] = None conn_info.append(conn_info_d) + self.logger.info("Sending site_network_accesses : {:s}".format(str(site_network_accesses))) + try: endpoint_site_network_access_creation = ( "{}/restconf/data/ietf-l2vpn-svc:l2vpn-svc/" diff --git a/src/tests/tools/mock_osm/__init__.py b/src/tests/tools/mock_osm/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/mock_osm/__init__.py +++ b/src/tests/tools/mock_osm/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_osm/__main__.py b/src/tests/tools/mock_osm/__main__.py new file mode 100644 index 0000000000000000000000000000000000000000..110e534b68c5247790bbde6862d915000ea88366 --- /dev/null +++ b/src/tests/tools/mock_osm/__main__.py @@ -0,0 +1,252 @@ +# Copyright 2022-2026 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 argparse +import cmd +import json +import logging +import shlex +import sys +from typing import Any, Dict, List, Tuple + +from .MockOSM import MockOSM + +logging.basicConfig(level=logging.DEBUG) +LOGGER = logging.getLogger(__name__) +LOGGER.setLevel(logging.DEBUG) + +SUPPORTED_SERVICE_TYPES = {"ELINE", "ELAN"} + + +def _load_json_file(path: str) -> Any: + with open(path, "r", encoding="utf-8") as handle: + return json.load(handle) + + +def _first_present(data: Dict[str, Any], keys: Tuple[str, ...]) -> Any: + for key in keys: + if key in data: + return data[key] + return None + + +def _parse_connection_config(config: Dict[str, Any]) -> Tuple[str, str, str]: + if not isinstance(config, dict): + raise ValueError("Connection config must be a JSON object.") + + wim_ip = _first_present(config, ("wim_ip", "ip", "host", "address")) + wim_port = _first_present(config, ("wim_port", "port")) + wim_user = _first_present(config, ("wim_user", "user", "username")) + wim_pass = _first_present(config, ("wim_pass", "wim_password", "pass", "password")) + + missing = [] + if not wim_ip: + missing.append("wim_ip") + if wim_port is None: + missing.append("wim_port") + if not wim_user: + missing.append("wim_user") + if wim_pass is None: + missing.append("wim_pass") + + if missing: + raise ValueError( + "Connection config missing required fields: {}".format(", ".join(missing)) + ) + + try: + wim_port = int(wim_port) + except (TypeError, ValueError) as exc: + raise ValueError("wim_port must be an integer") from exc + + wim_url = "http://{:s}:{:d}".format(str(wim_ip), wim_port) + return wim_url, str(wim_user), str(wim_pass) + + +def _parse_mapping_config(mapping: Any) -> Dict[str, Dict[str, Any]]: + if not isinstance(mapping, list): + raise ValueError("Mapping config must be a JSON list.") + + mapping_by_id = {} + for index, entry in enumerate(mapping): + if not isinstance(entry, dict): + raise ValueError("Mapping entry {:d} must be a JSON object".format(index)) + service_endpoint_id = entry.get("service_endpoint_id") + if not service_endpoint_id or not isinstance(service_endpoint_id, str): + raise ValueError( + "Mapping entry {:d} missing service_endpoint_id".format(index) + ) + if service_endpoint_id in mapping_by_id: + LOGGER.warning( + "Duplicate service_endpoint_id in mapping: %s", service_endpoint_id + ) + mapping_by_id[service_endpoint_id] = entry + + return mapping_by_id + + +class MockOSMShell(cmd.Cmd): + intro = "Welcome to the MockOSM shell.\nType help or ? to list commands.\n" + prompt = "(mock-osm) " + + def __init__(self, mock_osm: MockOSM, mapping_by_id: Dict[str, Dict[str, Any]]): + super().__init__() + self.mock_osm = mock_osm + self.mapping_by_id = mapping_by_id + + def do_create(self, arg: str) -> None: + "Create a connectivity service: create [vlan ]" + try: + service_type, endpoints = self._parse_create_args(arg) + service_uuid = self.mock_osm.create_connectivity_service( + service_type, endpoints + ) + print("Service {:s} created".format(service_uuid)) + except Exception as exc: + print("Error: {:s}".format(str(exc))) + + def do_status(self, arg: str) -> None: + "Retrieve status of services" + service_uuids = list(self.mock_osm.conn_info.keys()) + for service_uuid in service_uuids: + status = self.mock_osm.get_connectivity_service_status(service_uuid) + print("Status of Service {:s} is {:s}".format(service_uuid, str(status))) + + def do_delete(self, arg: str) -> None: + "Delete all services" + service_uuids = list(self.mock_osm.conn_info.keys()) + for service_uuid in service_uuids: + self.mock_osm.delete_connectivity_service(service_uuid) + print("Service {:s} deleted".format(service_uuid)) + + def do_exit(self, arg: str) -> bool: + "Exit MockOSM" + print("Bye!") + return True + + def _parse_create_args(self, arg: str) -> Tuple[str, List[Dict[str, Any]]]: + tokens = shlex.split(arg) + if len(tokens) < 2: + raise ValueError( + "Usage: create [vlan ]" + ) + + service_type = tokens[0] + endpoints_tokens = tokens[1:] + vlan_id = None + if "vlan" in endpoints_tokens: + vlan_index = endpoints_tokens.index("vlan") + if vlan_index == len(endpoints_tokens) - 1: + raise ValueError("vlan requires ") + if vlan_index + 2 != len(endpoints_tokens): + raise ValueError("vlan must be the last argument") + vlan_token = endpoints_tokens[vlan_index + 1] + try: + vlan_id = int(vlan_token) + except (TypeError, ValueError) as exc: + raise ValueError("vlan-id must be an integer") from exc + endpoints_tokens = endpoints_tokens[:vlan_index] + + endpoints = self._load_endpoints(endpoints_tokens) + self._validate_service_request(service_type, endpoints) + connection_points = [ + { + "service_endpoint_id": endpoint, + "service_endpoint_encapsulation_type": ( + "dot1q" if vlan_id is not None else "none" + ), + **( + {"service_endpoint_encapsulation_info": {"vlan": vlan_id}} + if vlan_id is not None + else {} + ), + } + for endpoint in endpoints + ] + return service_type, connection_points + + def _load_endpoints(self, tokens: List[str]) -> List[str]: + endpoints = [] + for token in tokens: + if "," in token: + endpoints.extend([item for item in token.split(",") if item]) + else: + endpoints.append(token) + return endpoints + + def _validate_service_request( + self, service_type: str, endpoints: List[str] + ) -> None: + if not isinstance(service_type, str) or not service_type: + raise ValueError("Service type must be a non-empty string.") + + if service_type not in SUPPORTED_SERVICE_TYPES: + raise ValueError( + "Unsupported service type. Supported: {}".format( + ", ".join(sorted(SUPPORTED_SERVICE_TYPES)) + ) + ) + + if not endpoints: + raise ValueError("Endpoints list must not be empty.") + + if service_type == "ELINE" and len(endpoints) != 2: + raise ValueError("ELINE requires exactly 2 endpoints.") + + if service_type == "ELAN" and len(endpoints) < 2: + raise ValueError("ELAN requires at least 2 endpoints.") + + for index, endpoint in enumerate(endpoints): + if not isinstance(endpoint, str) or not endpoint: + raise ValueError( + "Endpoint {:d} must be a non-empty string".format(index) + ) + if endpoint not in self.mapping_by_id: + raise ValueError( + "Endpoint {:s} not found in WIM port mapping".format(endpoint) + ) + + +def _parse_args(argv: List[str]) -> argparse.Namespace: + parser = argparse.ArgumentParser(description="MockOSM shell") + parser.add_argument( + "connection_config", + help="JSON with WIM IP, port, user, and password", + ) + parser.add_argument( + "mapping_config", + help="JSON with pre-generated WIM port mapping", + ) + return parser.parse_args(argv) + + +def main(argv: List[str]) -> int: + args = _parse_args(argv) + + try: + connection_config = _load_json_file(args.connection_config) + mapping_config = _load_json_file(args.mapping_config) + wim_url, wim_user, wim_pass = _parse_connection_config(connection_config) + mapping_by_id = _parse_mapping_config(mapping_config) + except Exception as exc: + print("Configuration error: {:s}".format(str(exc)), file=sys.stderr) + return 2 + + mock_osm = MockOSM(wim_url, mapping_config, wim_user, wim_pass) + MockOSMShell(mock_osm, mapping_by_id).cmdloop() + return 0 + + +if __name__ == "__main__": + sys.exit(main(sys.argv[1:])) diff --git a/src/tests/tools/mock_osm/example_connection.json b/src/tests/tools/mock_osm/example_connection.json new file mode 100644 index 0000000000000000000000000000000000000000..ab8944453be8b42d27e38ad6eceaa72ea2ef1dc6 --- /dev/null +++ b/src/tests/tools/mock_osm/example_connection.json @@ -0,0 +1,6 @@ +{ + "wim_ip": "10.0.2.10", + "wim_port": 80, + "wim_user": "admin", + "wim_pass": "admin" +} diff --git a/src/tests/tools/mock_osm/example_mapping.json b/src/tests/tools/mock_osm/example_mapping.json new file mode 100644 index 0000000000000000000000000000000000000000..10897cac12907e51b1a4d06775414445ac09768d --- /dev/null +++ b/src/tests/tools/mock_osm/example_mapping.json @@ -0,0 +1,82 @@ +[ + { + "device-id": "R1", + "service_endpoint_id": "ep-R1-1/2", + "service_mapping_info": { + "bearer": { + "bearer-reference": "R1:1/2" + }, + "site-id": "1" + } + }, + { + "device-id": "R1", + "service_endpoint_id": "ep-R1-1/3", + "service_mapping_info": { + "bearer": { + "bearer-reference": "R1:1/3" + }, + "site-id": "1" + } + }, + { + "device-id": "R2", + "service_endpoint_id": "ep-R2-1/2", + "service_mapping_info": { + "bearer": { + "bearer-reference": "R2:1/2" + }, + "site-id": "2" + } + }, + { + "device-id": "R2", + "service_endpoint_id": "ep-R2-1/3", + "service_mapping_info": { + "bearer": { + "bearer-reference": "R2:1/3" + }, + "site-id": "2" + } + }, + { + "device-id": "R3", + "service_endpoint_id": "ep-R3-1/2", + "service_mapping_info": { + "bearer": { + "bearer-reference": "R3:1/2" + }, + "site-id": "3" + } + }, + { + "device-id": "R3", + "service_endpoint_id": "ep-R3-1/3", + "service_mapping_info": { + "bearer": { + "bearer-reference": "R3:1/3" + }, + "site-id": "3" + } + }, + { + "device-id": "R4", + "service_endpoint_id": "ep-R4-1/2", + "service_mapping_info": { + "bearer": { + "bearer-reference": "R4:1/2" + }, + "site-id": "4" + } + }, + { + "device-id": "R4", + "service_endpoint_id": "ep-R4-1/3", + "service_mapping_info": { + "bearer": { + "bearer-reference": "R4:1/3" + }, + "site-id": "4" + } + } +] diff --git a/src/tests/tools/mock_osm_nbi/.gitlab-ci.yml b/src/tests/tools/mock_osm_nbi/.gitlab-ci.yml index a47bb15eb69af85a03a9c7c608d5df46caa7c78a..e27a77617569722c57c791d87ab53c1ad0b3cd46 100644 --- a/src/tests/tools/mock_osm_nbi/.gitlab-ci.yml +++ b/src/tests/tools/mock_osm_nbi/.gitlab-ci.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_osm_nbi/Dockerfile b/src/tests/tools/mock_osm_nbi/Dockerfile index 4264ab46d52ead0aa7e6e8fba7e91281bf685feb..de483020c9de6d4be81ba34ac3a7d9ee44ba31c6 100644 --- a/src/tests/tools/mock_osm_nbi/Dockerfile +++ b/src/tests/tools/mock_osm_nbi/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_osm_nbi/ResourceOsmClient.py b/src/tests/tools/mock_osm_nbi/ResourceOsmClient.py index f6a6dfd91751eea493bc9bc74c74959ea90e64df..e09f3b6013fdd65f95e39e2947a3c9b97a4c64b0 100644 --- a/src/tests/tools/mock_osm_nbi/ResourceOsmClient.py +++ b/src/tests/tools/mock_osm_nbi/ResourceOsmClient.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_osm_nbi/__init__.py b/src/tests/tools/mock_osm_nbi/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/mock_osm_nbi/__init__.py +++ b/src/tests/tools/mock_osm_nbi/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_osm_nbi/__main__.py b/src/tests/tools/mock_osm_nbi/__main__.py index 76cb91feb640d954a37b015d072cbf016f4bfea1..9ab53ce93509eb9b3822ceebd108866c51f4b8d6 100644 --- a/src/tests/tools/mock_osm_nbi/__main__.py +++ b/src/tests/tools/mock_osm_nbi/__main__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_osm_nbi/requirements.in b/src/tests/tools/mock_osm_nbi/requirements.in index dbb8e95d65cfd0f1ee60d9bb4f840393ac893725..d6d107410a5a441d4f5df7091dc14d182f557b0a 100644 --- a/src/tests/tools/mock_osm_nbi/requirements.in +++ b/src/tests/tools/mock_osm_nbi/requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_qkd_node/.gitlab-ci.yml b/src/tests/tools/mock_qkd_node/.gitlab-ci.yml index c43c75b2efc512ebafd4e9f6ad0a599108faa16a..23fbb1af7f4c3c4cba01d5cdb22ff9d3532fad36 100644 --- a/src/tests/tools/mock_qkd_node/.gitlab-ci.yml +++ b/src/tests/tools/mock_qkd_node/.gitlab-ci.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_qkd_node/Dockerfile b/src/tests/tools/mock_qkd_node/Dockerfile index 5e39eb3c06ac5dac2379baf14bd99a8f500e2eb4..5b24abc1fc542058ec74941f107d6f27e3579c92 100644 --- a/src/tests/tools/mock_qkd_node/Dockerfile +++ b/src/tests/tools/mock_qkd_node/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_qkd_node/__init__.py b/src/tests/tools/mock_qkd_node/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/mock_qkd_node/__init__.py +++ b/src/tests/tools/mock_qkd_node/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_qkd_node/build.sh b/src/tests/tools/mock_qkd_node/build.sh index e18dd98637481f7556a39c6dd95f0ff7846e4ed5..0690b6cb2d9699c9d1ba8203077a96f59421d746 100755 --- a/src/tests/tools/mock_qkd_node/build.sh +++ b/src/tests/tools/mock_qkd_node/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_qkd_node/do_tests.sh b/src/tests/tools/mock_qkd_node/do_tests.sh index 02df6dd34485ba4e49bf5cb62e680b64a75842dc..153196790636620ccbc5681f7241c8a96b9d9dff 100755 --- a/src/tests/tools/mock_qkd_node/do_tests.sh +++ b/src/tests/tools/mock_qkd_node/do_tests.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_qkd_node/qkd_node.py b/src/tests/tools/mock_qkd_node/qkd_node.py index e507a4619bd1c5c06d14f0605964f8093e29e11b..e768b913816140187022c2ba70cf7537d8fdd224 100644 --- a/src/tests/tools/mock_qkd_node/qkd_node.py +++ b/src/tests/tools/mock_qkd_node/qkd_node.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_qkd_node/run.sh b/src/tests/tools/mock_qkd_node/run.sh index a017f9fed08975ef02c9bec9bbd7ab4ee60a7d24..426c3694dff694b80cfa71f84dc2f797cf8aafd5 100755 --- a/src/tests/tools/mock_qkd_node/run.sh +++ b/src/tests/tools/mock_qkd_node/run.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_qkd_node/tests.sh b/src/tests/tools/mock_qkd_node/tests.sh index 81febc4ec00fa0068767867f07ae117ee63943fb..3b4ad743b282b9f64610dfb82c08251cda8ab8b0 100755 --- a/src/tests/tools/mock_qkd_node/tests.sh +++ b/src/tests/tools/mock_qkd_node/tests.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_tfs_nbi_dependencies/.gitlab-ci.yml b/src/tests/tools/mock_tfs_nbi_dependencies/.gitlab-ci.yml index 7d01c4cb543c4efec7afe44bf4b33784b5e8c67f..7ca97363d51a3449a14df1d5fbff6faa30a538d0 100644 --- a/src/tests/tools/mock_tfs_nbi_dependencies/.gitlab-ci.yml +++ b/src/tests/tools/mock_tfs_nbi_dependencies/.gitlab-ci.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_tfs_nbi_dependencies/Config.py b/src/tests/tools/mock_tfs_nbi_dependencies/Config.py index 0d1d3df054123ec32f75c9818f955512ee78ae64..955610451c3a1f17ddeec3336994f7068c527253 100644 --- a/src/tests/tools/mock_tfs_nbi_dependencies/Config.py +++ b/src/tests/tools/mock_tfs_nbi_dependencies/Config.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_tfs_nbi_dependencies/Dockerfile b/src/tests/tools/mock_tfs_nbi_dependencies/Dockerfile index 5fdfd99a6e886b8290f0d2344170de3f7f052362..afdb92c186c6f459241951590928ad91dd11adc0 100644 --- a/src/tests/tools/mock_tfs_nbi_dependencies/Dockerfile +++ b/src/tests/tools/mock_tfs_nbi_dependencies/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_tfs_nbi_dependencies/MockService_Dependencies.py b/src/tests/tools/mock_tfs_nbi_dependencies/MockService_Dependencies.py index 2b4ff5222faa21860f00ab17c7c9e5873f8a1dbd..160d858bad72a8dfa754814aebd8c8299fe93f5c 100644 --- a/src/tests/tools/mock_tfs_nbi_dependencies/MockService_Dependencies.py +++ b/src/tests/tools/mock_tfs_nbi_dependencies/MockService_Dependencies.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_tfs_nbi_dependencies/__init__.py b/src/tests/tools/mock_tfs_nbi_dependencies/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/mock_tfs_nbi_dependencies/__init__.py +++ b/src/tests/tools/mock_tfs_nbi_dependencies/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_tfs_nbi_dependencies/__main__.py b/src/tests/tools/mock_tfs_nbi_dependencies/__main__.py index 5f3d87105d3815d574557f638b02f14848de1e70..302172cbf2817381fc010b53c35f33eb680fd7bf 100644 --- a/src/tests/tools/mock_tfs_nbi_dependencies/__main__.py +++ b/src/tests/tools/mock_tfs_nbi_dependencies/__main__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_tfs_nbi_dependencies/mock-nbi-dependencies.yaml b/src/tests/tools/mock_tfs_nbi_dependencies/mock-nbi-dependencies.yaml index 985199574c8c283736d5b3ab2ebc142b35553b5d..93a2b99b929bbe4df9e77357e816d28420cdb6fa 100644 --- a/src/tests/tools/mock_tfs_nbi_dependencies/mock-nbi-dependencies.yaml +++ b/src/tests/tools/mock_tfs_nbi_dependencies/mock-nbi-dependencies.yaml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_tfs_nbi_dependencies/requirements.in b/src/tests/tools/mock_tfs_nbi_dependencies/requirements.in index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/mock_tfs_nbi_dependencies/requirements.in +++ b/src/tests/tools/mock_tfs_nbi_dependencies/requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_tfs_optical_sdn_ctrl/MockTfsOpticalSdnCtrl.py b/src/tests/tools/mock_tfs_optical_sdn_ctrl/MockTfsOpticalSdnCtrl.py index 0f89c7369755cb61f311db20514b29c232be88c7..720298aed3a7385f352cfd0bac875400704b7924 100644 --- a/src/tests/tools/mock_tfs_optical_sdn_ctrl/MockTfsOpticalSdnCtrl.py +++ b/src/tests/tools/mock_tfs_optical_sdn_ctrl/MockTfsOpticalSdnCtrl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_tfs_optical_sdn_ctrl/data.py b/src/tests/tools/mock_tfs_optical_sdn_ctrl/data.py index 4c7d4234d4505d3437bdda97f986b1856984f3fb..8aeb35497e3927d96437d791a024f682a62fc3a5 100644 --- a/src/tests/tools/mock_tfs_optical_sdn_ctrl/data.py +++ b/src/tests/tools/mock_tfs_optical_sdn_ctrl/data.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/mock_tfs_optical_sdn_ctrl/run.sh b/src/tests/tools/mock_tfs_optical_sdn_ctrl/run.sh index cceb4b2040c20b6a6248db952ee10e2e59aaa8d7..36581c12c1a3096b8c67a8f20f87f10636b2fe5c 100755 --- a/src/tests/tools/mock_tfs_optical_sdn_ctrl/run.sh +++ b/src/tests/tools/mock_tfs_optical_sdn_ctrl/run.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/.gitignore b/src/tests/tools/perf_plots/.gitignore index 663630b000707f3df5ef7e7c69ceae9407cddfd7..fdb404d502d5241c0c8a9c653ea68852bfd118b2 100644 --- a/src/tests/tools/perf_plots/.gitignore +++ b/src/tests/tools/perf_plots/.gitignore @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/Component_RPC_Methods.py b/src/tests/tools/perf_plots/Component_RPC_Methods.py index 9641a63a7433e1cd7e0900d214fb673ae2d04790..dbb19f56dfbb1ce991440e484cbcf4e0b4caa5b7 100644 --- a/src/tests/tools/perf_plots/Component_RPC_Methods.py +++ b/src/tests/tools/perf_plots/Component_RPC_Methods.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/Device_Driver_Details.py b/src/tests/tools/perf_plots/Device_Driver_Details.py index abc152e5aa683048f3bdc42b17485f74da7c6c19..cfb864dea1fee40922c0238a35894d49a652aeff 100644 --- a/src/tests/tools/perf_plots/Device_Driver_Details.py +++ b/src/tests/tools/perf_plots/Device_Driver_Details.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/Device_Driver_Methods.py b/src/tests/tools/perf_plots/Device_Driver_Methods.py index 0fa862b47e8337ac4a0730aca277bc3e7cf7b1ad..b16941aacbfc8400ac45577da76b00876d01f383 100644 --- a/src/tests/tools/perf_plots/Device_Driver_Methods.py +++ b/src/tests/tools/perf_plots/Device_Driver_Methods.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/LoadGen_Requests.py b/src/tests/tools/perf_plots/LoadGen_Requests.py index 9ebe64b2845a7c6366857a43d6dec58a5a08d5d8..38ad072145947f032168c588e0e4665c0cb3af45 100644 --- a/src/tests/tools/perf_plots/LoadGen_Requests.py +++ b/src/tests/tools/perf_plots/LoadGen_Requests.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/Service_Handler_Methods.py b/src/tests/tools/perf_plots/Service_Handler_Methods.py index f31f2b2b3371e0e72d82ff35e2c353fd3f59e356..fd91c84bd45ba6236b15c9c7e6f7b6ee9df546c3 100644 --- a/src/tests/tools/perf_plots/Service_Handler_Methods.py +++ b/src/tests/tools/perf_plots/Service_Handler_Methods.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/__init__.py b/src/tests/tools/perf_plots/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/perf_plots/__init__.py +++ b/src/tests/tools/perf_plots/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/collect.sh b/src/tests/tools/perf_plots/collect.sh index d6142af594f712c1053710e5a2440a6749d94ffb..dd9a92433892ffded9f5749f4d19b82f78d3ec93 100755 --- a/src/tests/tools/perf_plots/collect.sh +++ b/src/tests/tools/perf_plots/collect.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/Experiment.py b/src/tests/tools/perf_plots/experiments/Experiment.py index aa6f326b92ba7a253665f914bacd1270da025fbc..8079e9e8e6eb9ef73895378156da3253c0c1af51 100644 --- a/src/tests/tools/perf_plots/experiments/Experiment.py +++ b/src/tests/tools/perf_plots/experiments/Experiment.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/__init__.py b/src/tests/tools/perf_plots/experiments/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/perf_plots/experiments/__init__.py +++ b/src/tests/tools/perf_plots/experiments/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/scenario_1/Emu_Onboard.py b/src/tests/tools/perf_plots/experiments/scenario_1/Emu_Onboard.py index 7b96cb9c7288f2ca43143b97cd9515e6491db774..0bd6c90e186d8a303d615a49948ff4c23fd04219 100644 --- a/src/tests/tools/perf_plots/experiments/scenario_1/Emu_Onboard.py +++ b/src/tests/tools/perf_plots/experiments/scenario_1/Emu_Onboard.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/scenario_1/L2NM_EMU_Service.py b/src/tests/tools/perf_plots/experiments/scenario_1/L2NM_EMU_Service.py index dce4591b17b47cecdf33578a51f1bba2ef47e29c..82c43c9996dc5dc93729046a7d61c0956d1fb395 100644 --- a/src/tests/tools/perf_plots/experiments/scenario_1/L2NM_EMU_Service.py +++ b/src/tests/tools/perf_plots/experiments/scenario_1/L2NM_EMU_Service.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/scenario_1/L3NM_EMU_Service.py b/src/tests/tools/perf_plots/experiments/scenario_1/L3NM_EMU_Service.py index 0fdfea768af21fd7c68bb7fdc4cc586143d5fbe0..708baf67d938d21e08b85a404ea0a1d08bfcb8d2 100644 --- a/src/tests/tools/perf_plots/experiments/scenario_1/L3NM_EMU_Service.py +++ b/src/tests/tools/perf_plots/experiments/scenario_1/L3NM_EMU_Service.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/scenario_1/__init__.py b/src/tests/tools/perf_plots/experiments/scenario_1/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/perf_plots/experiments/scenario_1/__init__.py +++ b/src/tests/tools/perf_plots/experiments/scenario_1/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_001tnt_005erl.py b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_001tnt_005erl.py index ad9fb8a6f45c5ff5d112308054f6cfbe86f14924..205b7475de127d82a8dd278a1613f64617ab5019 100644 --- a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_001tnt_005erl.py +++ b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_001tnt_005erl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_005tnt_025erl.py b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_005tnt_025erl.py index e8901556d1e1a3f292d212b61ff25b68fd816fdc..d1ba96749c5e4bb4c944003387534bb6069f4a46 100644 --- a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_005tnt_025erl.py +++ b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_005tnt_025erl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_010tnt_050erl.py b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_010tnt_050erl.py index 4d7a501c5c60d8acd821fd5c7f812eb8bbea6a15..ce32a89619aa6567f613afdd7aa7684c02cfcde4 100644 --- a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_010tnt_050erl.py +++ b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_010tnt_050erl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_020tnt_100erl.py b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_020tnt_100erl.py index 4d31d47ccd75c5cd096b8c27dffadb068c853125..2d833b15da254ad846ac0ee1954a93ef6255306d 100644 --- a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_020tnt_100erl.py +++ b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_020tnt_100erl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_040tnt_200erl.py b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_040tnt_200erl.py index 5df65668a1cb531105fa9d4bc46017d86dca2caa..b72b49b004684a23970dd6b1c4db7e03e1bf904e 100644 --- a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_040tnt_200erl.py +++ b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_040tnt_200erl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_060tnt_300erl.py b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_060tnt_300erl.py index 9fbe2f5a9f11920b05de16d6be0cb41de7e1f505..288500bbfb9608b0454a6af7107edc433ed5dfa1 100644 --- a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_060tnt_300erl.py +++ b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_060tnt_300erl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_080tnt_400erl.py b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_080tnt_400erl.py index d69bccb44711f8cc9ce3c36ffe3530ea443053ca..0387e32106990bd1bdadc52fa776d3314b774d5c 100644 --- a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_080tnt_400erl.py +++ b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_080tnt_400erl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_100tnt_500erl.py b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_100tnt_500erl.py index de2b7a3def87020c4fdb8b22d9d0b55b4613a43a..d9ddf3b0a8b69030643445d32e94b680005c2e36 100644 --- a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_100tnt_500erl.py +++ b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_100tnt_500erl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_120tnt_600erl.py b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_120tnt_600erl.py index e7d3721d566b489a22db589d3eb9132ea462ba94..8f0a57ded0d11ebc5815184db232fb8f1247f127 100644 --- a/src/tests/tools/perf_plots/experiments/scenario_2/Scal_120tnt_600erl.py +++ b/src/tests/tools/perf_plots/experiments/scenario_2/Scal_120tnt_600erl.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/experiments/scenario_2/__init__.py b/src/tests/tools/perf_plots/experiments/scenario_2/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/perf_plots/experiments/scenario_2/__init__.py +++ b/src/tests/tools/perf_plots/experiments/scenario_2/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/tools/FileSystem.py b/src/tests/tools/perf_plots/tools/FileSystem.py index 26c2548622134a31425a03ee247c7af26634ff66..71acce70b6df40f61945b61729be29dc030151f9 100644 --- a/src/tests/tools/perf_plots/tools/FileSystem.py +++ b/src/tests/tools/perf_plots/tools/FileSystem.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/tools/Histogram.py b/src/tests/tools/perf_plots/tools/Histogram.py index 7537e5ccc909004fd144761e38ee88c08262683e..9cf0dff233f2cb291b239fd7c98764a5c547e85a 100644 --- a/src/tests/tools/perf_plots/tools/Histogram.py +++ b/src/tests/tools/perf_plots/tools/Histogram.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/tools/HistogramData.py b/src/tests/tools/perf_plots/tools/HistogramData.py index 744887b73dfebff78d106fffd5072cef55e726e5..0386a749ec2de6988db2500bae97c9b38c3bc83a 100644 --- a/src/tests/tools/perf_plots/tools/HistogramData.py +++ b/src/tests/tools/perf_plots/tools/HistogramData.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/tools/Plotter.py b/src/tests/tools/perf_plots/tools/Plotter.py index 61e57ba08086cce026a69154c4ef714de5d769b5..437bad7c69ce7b64695741873067dec53a119bc0 100644 --- a/src/tests/tools/perf_plots/tools/Plotter.py +++ b/src/tests/tools/perf_plots/tools/Plotter.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/tools/Prometheus.py b/src/tests/tools/perf_plots/tools/Prometheus.py index 46b0184a1b235c51556e1b7fe0c9015b0aa0e0aa..d9e2c6d535f1c321138ceaf46ed51e18f3867605 100644 --- a/src/tests/tools/perf_plots/tools/Prometheus.py +++ b/src/tests/tools/perf_plots/tools/Prometheus.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/perf_plots/tools/__init__.py b/src/tests/tools/perf_plots/tools/__init__.py index 3ccc21c7db78aac26daa1f8c5ff8e1ffd3f35460..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 100644 --- a/src/tests/tools/perf_plots/tools/__init__.py +++ b/src/tests/tools/perf_plots/tools/__init__.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/simap_ai_engine/ai_engine/Dockerfile b/src/tests/tools/simap_ai_engine/ai_engine/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..36b13e0f615be0c7aca3b76896c05e71af5f8333 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/Dockerfile @@ -0,0 +1,56 @@ +# Copyright 2022-2026 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 python:3.13-slim + +# Install system dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + gcc \ + && rm -rf /var/lib/apt/lists/* + +# Set working directory +WORKDIR /app + +# Copy common requirements and AI engine requirements +COPY common_requirements_py313.in /app/common_requirements.in +COPY src/tests/tools/simap_ai_engine/ai_engine/requirements.in /app/ai_requirements.in + +# Install Python dependencies +RUN pip install --no-cache-dir pip-tools && \ + pip-compile --output-file=requirements.txt common_requirements.in ai_requirements.in && \ + pip install --no-cache-dir -r requirements.txt + +# Copy minimal TFS common module (required for Settings, etc.) +COPY src/common /app/src/common + +# Copy AI Engine module +COPY src/tests/tools/simap_ai_engine/ai_engine /app/ai_engine + +# Set PYTHONPATH to include repo modules and the AI engine package +ENV PYTHONPATH=/app/src + +# Expose default REST API port +EXPOSE 8080 + +# Set default environment variables (can be overridden at runtime) +ENV AI_ENGINE_REST_HOST=0.0.0.0 +ENV AI_ENGINE_REST_PORT=8080 +ENV SIMAP_DATASTORE_SCHEME=http +ENV LOG_LEVEL=INFO + +# Note: SIMAP_DATASTORE_ADDRESS, SIMAP_DATASTORE_PORT, SIMAP_DATASTORE_USERNAME, +# and SIMAP_DATASTORE_PASSWORD should be provided at runtime via --env flags + +# Run the AI Engine +CMD ["python", "-m", "ai_engine"] diff --git a/src/tests/tools/simap_ai_engine/ai_engine/Grafana_dashboard/grafana-dashboard-simap-sla-monitoring.json b/src/tests/tools/simap_ai_engine/ai_engine/Grafana_dashboard/grafana-dashboard-simap-sla-monitoring.json new file mode 100644 index 0000000000000000000000000000000000000000..f7adef9f354d7b19abdf0d11e631ca2af36e8a34 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/Grafana_dashboard/grafana-dashboard-simap-sla-monitoring.json @@ -0,0 +1,1117 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "type": "dashboard" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "enable": true, + "hide": false, + "iconColor": "orange", + "name": "Service Upgrades", + "query": "SELECT * FROM telemetry_notifications WHERE status='UPGRADE'", + "tagsColumn": "status", + "target": { + "limit": 100, + "matchAny": false, + "tags": [ + { + "key": "status", + "operator": "=", + "value": "UPGRADE" + } + ], + "type": "tags" + }, + "textColumn": "timestamp", + "titleColumn": "" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "enable": true, + "hide": false, + "iconColor": "red", + "name": "Service Downgrades", + "query": "SELECT * FROM telemetry_notifications WHERE status='DOWNGRADE'", + "tagsColumn": "status", + "target": { + "limit": 100, + "matchAny": false, + "tags": [ + { + "key": "status", + "operator": "=", + "value": "DOWNGRADE" + } + ], + "type": "tags" + }, + "textColumn": "timestamp", + "titleColumn": "" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 1, + "id": 0, + "links": [], + "panels": [ + { + "fieldConfig": { + "defaults": {}, + "overrides": [] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 1, + "options": { + "code": { + "language": "plaintext", + "showLineNumbers": false, + "showMiniMap": false + }, + "content": "# SIMAP Service-Level SLA Monitoring\n", + "mode": "markdown" + }, + "pluginVersion": "12.3.1", + "title": "Dashboard Overview", + "type": "text" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [ + { + "options": { + "DOWNGRADE": { + "color": "red", + "index": 1, + "text": "⬇️ DOWNGRADE" + }, + "UPGRADE": { + "color": "green", + "index": 0, + "text": "⬆️ UPGRADE" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + } + ] + } + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Time" + }, + "properties": [ + { + "id": "custom.width", + "value": 180 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Status" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "color-background" + } + } + ] + } + ] + }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 3 + }, + "id": 11, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Time" + } + ] + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "query": "SELECT status as \"Status\", timestamp as \"Timestamp Info\" FROM telemetry_notifications WHERE time > now() - $timerange ORDER BY time DESC LIMIT 50", + "rawQuery": true, + "refId": "A", + "resultFormat": "table" + } + ], + "title": "Service Status Change Events (UPGRADE/DOWNGRADE)", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Status": 1, + "Time": 0, + "Timestamp Info": 2 + }, + "renameByName": {} + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 15, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "yellow", + "value": 65 + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "percent" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/pred_.*/" + }, + "properties": [ + { + "id": "custom.lineStyle", + "value": { + "dash": [10, 10], + "fill": "dash" + } + }, + { + "id": "color", + "value": { + "fixedColor": "light-blue", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 5 + } + ] + } + ] + }, + "gridPos": { + "h": 15, + "w": 12, + "x": 0, + "y": 6 + }, + "id": 6, + "options": { + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": true, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "query": "SELECT bandwidth_utilization FROM link_telemetry WHERE time > now() - $timerange AND network_id =~ /$network_id/ AND link_id =~ /$link_id/ GROUP BY network_id, link_id", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "query": "SELECT pred_bandwidth_utilization FROM predicted_telemetry WHERE time > now() - $timerange AND network_id =~ /$network_id/ AND link_id =~ /$link_id/ GROUP BY network_id, link_id", + "rawQuery": true, + "refId": "B", + "resultFormat": "time_series" + } + ], + "title": "Link Bandwidth Utilization (%) - Timeline", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 15, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "yellow", + "value": 50 + }, + { + "color": "red", + "value": 100 + } + ] + }, + "unit": "ms" + }, + "overrides": [ + { + "matcher": { + "id": "byRegexp", + "options": "/pred_.*/" + }, + "properties": [ + { + "id": "custom.lineStyle", + "value": { + "dash": [10, 10], + "fill": "dash" + } + }, + { + "id": "color", + "value": { + "fixedColor": "light-blue", + "mode": "fixed" + } + }, + { + "id": "custom.fillOpacity", + "value": 5 + } + ] + } + ] + }, + "gridPos": { + "h": 15, + "w": 12, + "x": 12, + "y": 6 + }, + "id": 7, + "options": { + "legend": { + "calcs": [ + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": true, + "mode": "multi", + "sort": "desc" + } + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "query": "SELECT latency FROM link_telemetry WHERE time > now() - $timerange AND network_id =~ /$network_id/ AND link_id =~ /$link_id/ GROUP BY network_id, link_id", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "query": "SELECT pred_latency FROM predicted_telemetry WHERE time > now() - $timerange AND network_id =~ /$network_id/ AND link_id =~ /$link_id/ GROUP BY network_id, link_id", + "rawQuery": true, + "refId": "B", + "resultFormat": "time_series" + } + ], + "title": "Link Latency (ms) - Timeline", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "type": "auto" + }, + "footer": { + "reducers": [] + }, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "yellow", + "value": 5 + }, + { + "color": "red", + "value": 10 + } + ] + }, + "unit": "short" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "Bandwidth Utilization (%)" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "gauge" + } + }, + { + "id": "unit", + "value": "percent" + }, + { + "id": "max", + "value": 100 + }, + { + "id": "min", + "value": 0 + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "Latency (ms)" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "mode": "gradient", + "type": "color-background" + } + }, + { + "id": "unit", + "value": "ms" + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + }, + { + "color": "yellow", + "value": 50 + }, + { + "color": "red", + "value": 100 + } + ] + } + } + ] + } + ] + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 21 + }, + "id": 8, + "options": { + "cellHeight": "sm", + "showHeader": true, + "sortBy": [ + { + "desc": true, + "displayName": "Bandwidth Utilization (%)" + } + ] + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "query": "SELECT LAST(bandwidth_utilization) as \"Bandwidth Utilization (%)\", LAST(latency) as \"Latency (ms)\" FROM link_telemetry WHERE time > now() - 5m AND network_id =~ /$network_id/ AND link_id =~ /$link_id/ GROUP BY network_id, link_id", + "rawQuery": true, + "refId": "A", + "resultFormat": "table" + } + ], + "title": "Link Comparison Table - Current Status", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time": true + }, + "indexByName": {}, + "renameByName": { + "link_id": "Link ID", + "network_id": "Network ID" + } + } + } + ], + "type": "table" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Bandwidth Utilization (%)", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 15, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 1, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + } + ] + }, + "unit": "percent" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "link_telemetry.bandwidth_utilization {link_id: E2E-L1, network_id: e2e}" + }, + "properties": [ + { + "id": "displayName", + "value": "Actual BW" + }, + { + "id": "color", + "value": { + "fixedColor": "blue", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "predicted_telemetry.pred_bandwidth_utilization {link_id: E2E-L1, network_id: e2e}" + }, + "properties": [ + { + "id": "displayName", + "value": "Predicted BW" + }, + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + }, + { + "id": "custom.lineStyle", + "value": { + "dash": [10, 10], + "fill": "dash" + } + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 0, + "y": 31 + }, + "id": 12, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "query": "SELECT bandwidth_utilization FROM link_telemetry WHERE time > now() - $timerange AND network_id = 'e2e' AND link_id = 'E2E-L1' GROUP BY network_id, link_id", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "query": "SELECT pred_bandwidth_utilization FROM predicted_telemetry WHERE time > now() - $timerange AND network_id = 'e2e' AND link_id = 'E2E-L1' GROUP BY network_id, link_id", + "rawQuery": true, + "refId": "B", + "resultFormat": "time_series" + } + ], + "title": "E2E-L1: Bandwidth Comparison (Actual vs Predicted)", + "type": "timeseries" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisBorderShow": false, + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "Latency (ms)", + "axisPlacement": "auto", + "barAlignment": 0, + "barWidthFactor": 0.6, + "drawStyle": "line", + "fillOpacity": 15, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "smooth", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "showValues": false, + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 1, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": 0 + } + ] + }, + "unit": "ms" + }, + "overrides": [ + { + "matcher": { + "id": "byName", + "options": "link_telemetry.latency {link_id: E2E-L1, network_id: e2e}" + }, + "properties": [ + { + "id": "displayName", + "value": "Actual Latency" + }, + { + "id": "color", + "value": { + "fixedColor": "green", + "mode": "fixed" + } + } + ] + }, + { + "matcher": { + "id": "byName", + "options": "predicted_telemetry.pred_latency {link_id: E2E-L1, network_id: e2e}" + }, + "properties": [ + { + "id": "displayName", + "value": "Predicted Latency" + }, + { + "id": "color", + "value": { + "fixedColor": "orange", + "mode": "fixed" + } + }, + { + "id": "custom.lineStyle", + "value": { + "dash": [10, 10], + "fill": "dash" + } + } + ] + } + ] + }, + "gridPos": { + "h": 12, + "w": 12, + "x": 12, + "y": 31 + }, + "id": 13, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "hideZeros": false, + "mode": "multi", + "sort": "none" + } + }, + "pluginVersion": "12.3.1", + "targets": [ + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "query": "SELECT latency FROM link_telemetry WHERE time > now() - $timerange AND network_id = 'e2e' AND link_id = 'E2E-L1' GROUP BY network_id, link_id", + "rawQuery": true, + "refId": "A", + "resultFormat": "time_series" + }, + { + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "query": "SELECT pred_latency FROM predicted_telemetry WHERE time > now() - $timerange AND network_id = 'e2e' AND link_id = 'E2E-L1' GROUP BY network_id, link_id", + "rawQuery": true, + "refId": "B", + "resultFormat": "time_series" + } + ], + "title": "E2E-L1: Latency Comparison (Actual vs Predicted)", + "type": "timeseries" + } + ], + "preload": false, + "refresh": "10s", + "schemaVersion": 42, + "tags": [ + "simap", + "telemetry", + "sla", + "service-monitoring" + ], + "templating": { + "list": [ + { + "current": { + "text": "influxdb-SIMAP-Server", + "value": "cf9ge11vhadj4b" + }, + "includeAll": false, + "label": "InfluxDB Datasource", + "name": "DS_INFLUXDB", + "options": [], + "query": "influxdb", + "refresh": 1, + "regex": "", + "type": "datasource" + }, + { + "auto": false, + "auto_count": 30, + "auto_min": "10s", + "current": { + "text": "5m", + "value": "5m" + }, + "label": "Time Range", + "name": "timerange", + "options": [ + { + "selected": true, + "text": "5m", + "value": "5m" + }, + { + "selected": false, + "text": "10m", + "value": "10m" + }, + { + "selected": false, + "text": "20m", + "value": "20m" + }, + { + "selected": false, + "text": "1h", + "value": "1h" + }, + { + "selected": false, + "text": "3h", + "value": "3h" + }, + { + "selected": false, + "text": "6h", + "value": "6h" + }, + { + "selected": false, + "text": "12h", + "value": "12h" + } + ], + "query": "5m,10m,20m,1h,3h,6h,12h", + "refresh": 2, + "type": "interval" + }, + { + "current": { + "selected": true, + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "definition": "SHOW TAG VALUES FROM link_telemetry WITH KEY = network_id", + "includeAll": true, + "label": "Network ID", + "multi": true, + "name": "network_id", + "options": [], + "query": "SHOW TAG VALUES FROM link_telemetry WITH KEY = network_id", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "influxdb", + "uid": "${DS_INFLUXDB}" + }, + "definition": "SHOW TAG VALUES FROM link_telemetry WITH KEY = link_id WHERE network_id =~ /$network_id/", + "includeAll": true, + "label": "Link ID", + "multi": true, + "name": "link_id", + "options": [], + "query": "SHOW TAG VALUES FROM link_telemetry WITH KEY = link_id WHERE network_id =~ /$network_id/", + "refresh": 1, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + } + ] + }, + "time": { + "from": "now-15m", + "to": "now" + }, + "timepicker": { + "refresh_intervals": [ + "5s", + "10s", + "30s", + "1m", + "5m" + ] + }, + "timezone": "", + "title": "SIMAP V4 Service-Level SLA Monitoring", + "uid": "simap-sla-monitoring-v4", + "version": 7 +} \ No newline at end of file diff --git a/src/tests/tools/simap_ai_engine/ai_engine/__init__.py b/src/tests/tools/simap_ai_engine/ai_engine/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2022-2026 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/tools/simap_ai_engine/ai_engine/__main__.py b/src/tests/tools/simap_ai_engine/ai_engine/__main__.py new file mode 100644 index 0000000000000000000000000000000000000000..848c5e9056bd9cc513b36bb1917eb653d3087d20 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/__main__.py @@ -0,0 +1,57 @@ +# Copyright 2022-2026 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. + +""" +AI Engine main entry point. + +This module provides the entry point for running the AI Engine REST API. +""" + +# Standard library imports +import logging +import sys + +# Local imports +from .engine import AIEngineAPI + +# Module-level logger +LOGGER = logging.getLogger(__name__) + + +def main() -> None: + """Main entry point for the AI Engine.""" + # Configure logging + logging.basicConfig( + level=logging.DEBUG, + format="[%(asctime)s] %(levelname)s:%(name)s:[%(funcName)s:%(lineno)d] - %(message)s" + ) + logging.getLogger('werkzeug').setLevel(logging.DEBUG) + + try: + LOGGER.info("Starting AI Engine") + engine = AIEngineAPI() + + logging.getLogger('werkzeug').setLevel(logging.DEBUG) + + engine.run() + except KeyboardInterrupt: + LOGGER.info("AI Engine stopped by user") + sys.exit(0) + except Exception as e: + LOGGER.exception(f"AI Engine failed to start: {e}") + sys.exit(1) + + +if __name__ == '__main__': + main() diff --git a/src/tests/tools/simap_ai_engine/ai_engine/ai_model/__init__.py b/src/tests/tools/simap_ai_engine/ai_engine/ai_model/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/ai_model/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2022-2026 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/tools/simap_ai_engine/ai_engine/ai_model/ai_processor.py b/src/tests/tools/simap_ai_engine/ai_engine/ai_model/ai_processor.py new file mode 100644 index 0000000000000000000000000000000000000000..96414dc727752998fa8358c8ccf485662e51554f --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/ai_model/ai_processor.py @@ -0,0 +1,203 @@ +# Copyright 2022-2026 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. + +""" +AI Model Processor module. +Provides AI/ML processing functionality for SLA analysis. +""" + +import logging +from datetime import datetime, timezone +from random import Random +from typing import Any, Dict, Optional, TYPE_CHECKING + +import pandas as pd +from statsmodels.tsa.holtwinters import ExponentialSmoothing + +if TYPE_CHECKING: + from ..clients.influxdb_fetcher import InfluxDBFetcher + +LOGGER = logging.getLogger(__name__) + + +class AIModelProcessor: + """ + Processes data through AI models for SLA analysis. + + This class implements the AI/ML processing logic to analyze device + and performance data against SLA policies, detecting violations and + generating recommendations. + """ + + def __init__(self, influx_fetcher: Optional['InfluxDBFetcher'] = None) -> None: + """ + Initialize the AIModelProcessor. + + Args: + influx_fetcher: InfluxDBFetcher instance for writing predicted telemetry. + If None, predicted telemetry will not be written to DB. + + Loads AI models and prepares the processor for data analysis. + """ + LOGGER.info("AIModelProcessor initialized") + self._influx_fetcher = influx_fetcher + # TODO: Load AI/ML models here + # Example: self.model = load_model('sla_violation_detector.h5') + + + def ai_model_processor( + self, + metric_values: list[dict[str, Any]], + ) -> Optional[list[dict[str, Any]]]: + """ + Process device and performance data through AI models. + + Args: + metric_values: List of dictionaries containing performance metric values. + Each dict has keys like 'bandwidth_utilization', 'latency', etc. + Returns: + List of dicts containing forecasted values for each metric, + or None if insufficient data. + + """ + LOGGER.debug("Processing data through AI models") + LOGGER.debug(f"Number of performance data points: {len(metric_values)}") + + if not metric_values or len(metric_values) < 3: + LOGGER.warning("Insufficient data for forecasting (need at least 3 samples)") + return None + + results = [] + + try: + # Convert list of dicts to DataFrame for easier processing + df = pd.DataFrame(metric_values) + + # Process each metric column separately + for column in df.columns: + data = df[column] + + # Skip non-numeric columns + if not pd.api.types.is_numeric_dtype(data): + LOGGER.debug(f"Skipping non-numeric column: {column}") + continue + + # Remove NaN values + data = data.dropna() + + if len(data) < 3: + LOGGER.warning(f"Insufficient data for column {column} (need at least 3 samples)") + continue + + LOGGER.debug(f"Processing column: {column} with {len(data)} samples") + + # Create and fit Exponential Smoothing model + model = ExponentialSmoothing( + endog = data, + trend = "add", + seasonal = None # No seasonal component for this data + ) + + fit = model.fit() + + # Forecast next 3 values + forecast = fit.forecast(steps=3) + forecasted_values = forecast.tolist() + + # Calculate confidence score based on model fit quality + # Using residual standard error as inverse confidence metric + error = {} + residuals = fit.resid + mse = (residuals ** 2).mean() + rmse = mse ** 0.5 + + error['mse'] = float(mse) + error['rmse'] = float(rmse) + + # Normalize confidence: lower RMSE = higher confidence + # Use data scale (std dev) to normalize RMSE + data_std = data.std() + + if data_std > 0: + normalized_error = rmse / data_std + # Convert to confidence score (0-1 range, higher is better) + confidence = max(0, min(1, 1 - normalized_error)) + if confidence < 0.9: + confidence += 0.1 # Boost confidence for borderline cases + else: + confidence = 0.5 # Default if std dev is 0 + + LOGGER.info(f"Metric: {column}, RMSE: {rmse:.4f}, Data Std: {data_std:.4f}, Confidence: {confidence:.4f}") + LOGGER.info(f"Forecasted next 3 values for {column}: {forecasted_values}") + + results.append({ + "metric_name": column, + "forecasted_values": forecasted_values, + "confidence": float(confidence), + "sample_interval": 5, + "error_metrics": error, + }) + + # Push results to DB via InfluxDB fetcher + if results and self._influx_fetcher: + self._influx_fetcher.write_predicted_telemetry(results) + + return results if results else None + + except Exception as e: + LOGGER.error(f"Error during forecasting: {e}", exc_info=True) + return None + + def process_data( + self, + performance_data: Dict[str, Any], + ) -> Dict[str, Any]: + """ + Process device and performance data through AI models. + + Args: + performance_data: Performance metrics from InfluxDB. + sla_policy: The SLA policy configuration with thresholds. + + Returns: + Dictionary containing: + - 'confidence_scores': AI model confidence scores. + - 'summary': Dictionary with analysis summary statistics. + """ + LOGGER.debug("Processing data through AI models") + + metric_values = performance_data.get('metric_values', []) + LOGGER.debug(f"Number of performance data points: {len(metric_values)}") + # LOGGER.debug(f"Performance data values: {metric_values}") + + if not metric_values: + LOGGER.warning("No performance data available for processing") + return { + 'model_result': None, + 'timestamp': datetime.now(UTC).isoformat() + } + result = self.ai_model_processor(metric_values) + + if result is None: + # fallback score structure + LOGGER.warning("AI model processing failed or insufficient data. See logs for details.") + return { + 'model_result': None, + 'timestamp': datetime.now(UTC).isoformat() + } + + return { + 'model_result': result, + 'timestamp': datetime.now(UTC).isoformat() + } diff --git a/src/tests/tools/simap_ai_engine/ai_engine/ai_model/sla_policy.py b/src/tests/tools/simap_ai_engine/ai_engine/ai_model/sla_policy.py new file mode 100644 index 0000000000000000000000000000000000000000..3c905b76d9c6ade69a2e22268d479ace07dfcf71 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/ai_model/sla_policy.py @@ -0,0 +1,92 @@ +# Copyright 2022-2026 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. + +""" +SLA Policy Configuration dataclass. + +Defines the structure for SLA policy configurations used in AI analysis. +""" +from __future__ import annotations +from dataclasses import asdict, dataclass +from typing import Any, Dict + + +@dataclass +class SLAPolicyConfig: + """ + Configuration for an SLA policy to be analyzed. + + Attributes: + simap_id: Unique identifier for the SIMAP entity. + latency_threshold_ms: Maximum acceptable latency in milliseconds. + bandwidth_utilization_threshold_pct: Maximum acceptable bandwidth + utilization as a percentage (0-100). + time_window_seconds: Time window in seconds for data analysis. + forecast_sample_interval_sec: Sampling interval in seconds for data collection. + forecast_sample_count: Minimum number of samples to fetch from database. + """ + simap_id: str + latency_threshold_ms: float|None + bandwidth_utilization: float|None + time_window_seconds: int + forecast_sample_interval_sec: int + forecast_sample_count: int + + @classmethod + def from_dict(cls, data: Dict[str, Any]) -> SLAPolicyConfig: + """ + Create an SLAPolicyConfig instance from a dictionary. + + Args: + data: Dictionary containing the SLA policy configuration fields. + Required keys: 'simap_id', 'latency_threshold_ms', + 'bandwidth_utilization', 'time_window_seconds'. + Supports nested 'sla_metrics' structure. + + Returns: + A new SLAPolicyConfig instance. + + Raises: + KeyError: If a required field is missing from the data dictionary. + TypeError: If a field has an invalid type. + ValueError: If a field has an invalid value. + """ + try: + simap_id = str(data['simap_id']) + metrics = data['sla_metrics'] + latency_threshold_ms = float(metrics['latency_threshold_ms']) + bandwidth_threshold = float(metrics.get('bandwidth_utilization', 0.0)) + time_window = int(data['history_window_size_sec']) + sample_interval = int(data['forecast_sample_interval_sec']) + forecast_sample_count = int(data['forecast_sample_count']) + + return cls( + simap_id = simap_id, + latency_threshold_ms = latency_threshold_ms, + bandwidth_utilization = bandwidth_threshold, + time_window_seconds = time_window, + forecast_sample_interval_sec = sample_interval, + forecast_sample_count = forecast_sample_count + ) + except KeyError as e: + raise KeyError(f"Missing required field: {e.args[0]}") from e + + def to_dict(self) -> Dict[str, Any]: + """ + Convert the SLAPolicyConfig to a dictionary. + + Returns: + Dictionary representation of the SLA policy configuration. + """ + return asdict(self) diff --git a/src/tests/tools/simap_ai_engine/ai_engine/api/__init__.py b/src/tests/tools/simap_ai_engine/ai_engine/api/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/api/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2022-2026 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/tools/simap_ai_engine/ai_engine/api/api_blueprint.py b/src/tests/tools/simap_ai_engine/ai_engine/api/api_blueprint.py new file mode 100644 index 0000000000000000000000000000000000000000..5c03aef01d9747ac08462f65d1ae862cdb660232 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/api/api_blueprint.py @@ -0,0 +1,564 @@ +# Copyright 2022-2026 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. + +""" +Flask Blueprint for AI Engine REST API. + +Defines the REST API endpoints for the AI Engine. +""" + +import logging +import threading +import time +from datetime import datetime, timezone + + +from flask import Blueprint, jsonify, request +import requests + +from ..config import Config +from ..ai_model.ai_processor import AIModelProcessor +from ..clients.decision_client import DecisionEngineClient +from ..clients.influxdb_fetcher import InfluxDBFetcher +from ..clients.simap_fetcher import SimapDataFetcher +from ..ai_model.sla_policy import SLAPolicyConfig + +LOGGER = logging.getLogger(__name__) + +# Background analysis state - track multiple analyses by simap_id +_analysis_threads = {} # {simap_id: {'thread': Thread, 'stop_event': Event}} +_threads_lock = threading.Lock() + +# OSM endpoint configuration +END_HOST = '10.0.58.25' +END_PORT = 8084 +BASE_URL = f'http://{END_HOST}:{END_PORT}/osm/aiAnalyticsEvent/v1' + + +def create_ai_engine_blueprint( + simap_fetcher: SimapDataFetcher, + influxdb_fetcher: InfluxDBFetcher, + ai_processor: AIModelProcessor, + decision_client: DecisionEngineClient +) -> Blueprint: + + blueprint = Blueprint('ai_analytics', __name__, url_prefix='/api/v1') + + def _background_analysis_task(sla_policy: SLAPolicyConfig, duration_minutes: int, stop_event: threading.Event): + """ + Background task that periodically analyzes data and posts results. + Args: + sla_policy: SLA policy configuration for analysis. + duration_minutes: How long to run the analysis (in minutes). + stop_event: Threading event to signal task termination. + """ + simap_id = sla_policy.simap_id + _response = {} + + try: + LOGGER.info(f"[{simap_id}] Starting background analysis for {duration_minutes} minutes") + start_time = time.time() + end_time = start_time + (duration_minutes * 60) + iteration = 0 + + while time.time() < end_time and not stop_event.is_set(): + iteration += 1 + iteration_start = time.time() + + try: + LOGGER.debug(f"[{simap_id}] Analysis iteration {iteration} - Fetching performance data") + + performance_data = influxdb_fetcher.fetch_performance_data(sla_policy) + + LOGGER.debug(f"[{simap_id}] Analysis iteration {iteration} - Processing with AI models") + results = ai_processor.process_data(performance_data) + + results['simap_id'] = simap_id + # results['iteration'] = iteration + + _response['data'] = results + _response['status'] = 'success' + _response['message'] = f'Analysis completed successfully' + + + LOGGER.debug(f"[{simap_id}] Analysis iteration {iteration} - Posting results to {BASE_URL}") + LOGGER.debug(f"[{simap_id}] Results payload: {_response}") + response = requests.post( + BASE_URL, + json = _response, + timeout = 10, + headers = {'Content-Type': 'application/json'} + ) + + if response.status_code in (200, 201, 202): + LOGGER.info(f"[{simap_id}] Iteration {iteration}: Results posted successfully (status {response.status_code})") + else: + LOGGER.warning(f"[{simap_id}] Iteration {iteration}: POST returned status {response.status_code}: {response.text}") + + except Exception as e: + LOGGER.error(f"[{simap_id}] Error in analysis iteration {iteration}: {e}") + + # Wait for 30 seconds (accounting for processing time per iteration) + elapsed = time.time() - iteration_start + sleep_time = max(0, 30 - elapsed) + + if sleep_time > 0 and time.time() + sleep_time < end_time and not stop_event.is_set(): + LOGGER.debug(f"[{simap_id}] Sleeping for {sleep_time:.1f} seconds until next iteration") + stop_event.wait(timeout=sleep_time) # Use wait instead of sleep for immediate response + elif time.time() < end_time: + # Not enough time for another full iteration cycle, exit gracefully + LOGGER.debug(f"[{simap_id}] Insufficient time remaining for next iteration, terminating") + break + + if stop_event.is_set(): + LOGGER.info(f"[{simap_id}] Background analysis stopped after {iteration} iterations") + else: + LOGGER.info(f"[{simap_id}] Background analysis completed after {iteration} iterations. Time limit reached.") + + except Exception as e: + LOGGER.exception(f"[{simap_id}] Fatal error in background analysis task: {e}") + + finally: + # Clean up thread tracking + with _threads_lock: + if simap_id in _analysis_threads: + del _analysis_threads[simap_id] + LOGGER.info(f"[{simap_id}] Background analysis task terminated") + + @blueprint.route('/analyze', methods=['POST']) + def analyze(): + """ + Start SLA policy analysis in background. + + Expects JSON payload with SLA policy configuration including duration_minutes. + Validates input and immediately returns 202 Accepted. + Analysis runs in background, posting results every 30 seconds for the specified duration. + + Returns: + JSON response with acceptance confirmation or error message. + """ + LOGGER.info("Received analysis request") + + # Parse and validate request JSON + try: + data = request.get_json() + if data is None: + LOGGER.error("Request body is empty or not valid JSON") + return jsonify({ + 'status': 'error', + 'message': 'Request body must be valid JSON' + }), 400 + except Exception as e: + LOGGER.error(f"Failed to parse request JSON: {e}") + return jsonify({ + 'status': 'error', + 'message': f'Invalid JSON: {str(e)}' + }), 400 + + # Validate and create SLAPolicyConfig + try: + sla_policy = SLAPolicyConfig.from_dict(data) + LOGGER.info(f"Processing SLA policy for SIMAP ID: {sla_policy.simap_id}") + except KeyError as e: + LOGGER.error(f"Missing required field in request: {e}") + return jsonify({ + 'status': 'error', + 'message': f'Missing required field: {str(e)}' + }), 400 + except (TypeError, ValueError) as e: + LOGGER.error(f"Invalid field value in request: {e}") + return jsonify({ + 'status': 'error', + 'message': f'Invalid field value: {str(e)}' + }), 400 + + # Extract duration from request + try: + duration_minutes = int(data.get('duration_minutes', 0)) + if duration_minutes <= 0: + raise ValueError("duration_minutes must be positive") + except (TypeError, ValueError) as e: + LOGGER.error(f"Invalid duration_minutes: {e}") + return jsonify({ + 'status': 'error', + 'message': f'Invalid duration_minutes: {str(e)}' + }), 400 + + # Check if analysis is already running for this simap_id + with _threads_lock: + if sla_policy.simap_id in _analysis_threads: + thread_info = _analysis_threads[sla_policy.simap_id] + if thread_info['thread'].is_alive(): + LOGGER.warning(f"Analysis request rejected: analysis for SIMAP ID {sla_policy.simap_id} is already running") + return jsonify({ + 'status': 'error', + 'message': f'Analysis for SIMAP ID {sla_policy.simap_id} is already running. Stop it first.' + }), 409 # Conflict + + # Start background analysis task + try: + stop_event = threading.Event() + analysis_thread = threading.Thread( + target=_background_analysis_task, + args=(sla_policy, duration_minutes, stop_event), + daemon=True, + name=f"AI-Analysis-Thread-{sla_policy.simap_id}" + ) + + # Register thread before starting + with _threads_lock: + _analysis_threads[sla_policy.simap_id] = { + 'thread': analysis_thread, + 'stop_event': stop_event, + 'start_time': datetime.now(timezone.utc).isoformat(), + 'duration_minutes': duration_minutes + } + + analysis_thread.start() + + LOGGER.info(f"Background analysis started for SIMAP ID {sla_policy.simap_id}, duration {duration_minutes} minutes") + + # Return immediate confirmation + return jsonify({ + 'status': 'accepted', + 'message': f'Analysis started successfully. Results will be posted every 30 seconds for {duration_minutes} minutes.', + 'simap_id': sla_policy.simap_id, + 'duration_minutes': duration_minutes, + 'endpoint': BASE_URL + }), 202 # Accepted + + except Exception as e: + # Clean up on failure + with _threads_lock: + if sla_policy.simap_id in _analysis_threads: + del _analysis_threads[sla_policy.simap_id] + LOGGER.exception(f"Failed to start background analysis: {e}") + return jsonify({ + 'status': 'error', + 'message': f'Failed to start analysis: {str(e)}' + }), 500 + + @blueprint.route('/analyze/stop', methods=['POST']) + def stop_analyze(): + """ + Stop running analysis for a specific SIMAP ID. + + Expects JSON payload with simap_id. + Signals the background thread to stop gracefully. + + Returns: + JSON response with stop confirmation or error message. + """ + LOGGER.info("Received stop analysis request") + + # Parse and validate request JSON + try: + data = request.get_json() + if data is None: + LOGGER.error("Request body is empty or not valid JSON") + return jsonify({ + 'status': 'error', + 'message': 'Request body must be valid JSON' + }), 400 + except Exception as e: + LOGGER.error(f"Failed to parse request JSON: {e}") + return jsonify({ + 'status': 'error', + 'message': f'Invalid JSON: {str(e)}' + }), 400 + + # Extract simap_id + simap_id = data.get('simap_id') + if not simap_id: + LOGGER.error("Missing simap_id in request") + return jsonify({ + 'status': 'error', + 'message': 'Missing required field: simap_id' + }), 400 + + # Find and stop the thread + with _threads_lock: + if simap_id not in _analysis_threads: + LOGGER.warning(f"No running analysis found for SIMAP ID {simap_id}") + return jsonify({ + 'status': 'error', + 'message': f'No running analysis found for SIMAP ID {simap_id}' + }), 404 + + thread_info = _analysis_threads[simap_id] + if not thread_info['thread'].is_alive(): + # Clean up dead thread + del _analysis_threads[simap_id] + LOGGER.warning(f"Analysis thread for SIMAP ID {simap_id} is not alive") + return jsonify({ + 'status': 'error', + 'message': f'Analysis for SIMAP ID {simap_id} is not running' + }), 404 + + # Signal thread to stop + thread_info['stop_event'].set() + LOGGER.info(f"Stop signal sent to analysis thread for SIMAP ID {simap_id}") + + return jsonify({ + 'status': 'success', + 'message': f'Stop signal sent to analysis for SIMAP ID {simap_id}', + 'simap_id': simap_id + }), 200 + + @blueprint.route('/analyze/stop-all', methods=['POST']) + def stop_all_analyses(): + """ + Stop all running analyses. + + Signals all background threads to stop gracefully. + + Returns: + JSON response with summary of stopped analyses. + """ + LOGGER.info("Received stop all analyses request") + + stopped_ids = [] + skipped_ids = [] + + with _threads_lock: + if not _analysis_threads: + LOGGER.info("No running analyses to stop") + return jsonify({ + 'status': 'success', + 'message': 'No running analyses to stop', + 'stopped_count': 0, + 'stopped_ids': [] + }), 200 + + # Signal all threads to stop + for simap_id, thread_info in list(_analysis_threads.items()): + if thread_info['thread'].is_alive(): + thread_info['stop_event'].set() + stopped_ids.append(simap_id) + LOGGER.info(f"Stop signal sent to analysis thread for SIMAP ID {simap_id}") + else: + skipped_ids.append(simap_id) + LOGGER.warning(f"Analysis thread for SIMAP ID {simap_id} is not alive, skipping") + + return jsonify({ + 'status': 'success', + 'message': f'Stop signal sent to {len(stopped_ids)} running analyses', + 'stopped_count': len(stopped_ids), + }), 200 + + @blueprint.route('/status', methods=['GET']) + def status(): + """ + Get status of all running analyses. + + Returns: + JSON response with list of running analyses. + """ + LOGGER.debug("Status check requested") + + with _threads_lock: + running_analyses = [ + { + 'simap_id': simap_id, + 'is_alive': info['thread'].is_alive(), + 'start_time': info['start_time'], + 'duration_minutes': info['duration_minutes'] + } + for simap_id, info in _analysis_threads.items() + ] + + return jsonify({ + 'running_count': len(running_analyses), + 'analyses': running_analyses, + 'timestamp': datetime.now(timezone.utc).isoformat() + }), 200 + + + + @blueprint.route('/health', methods=['GET']) + def health(): + """ + Health check endpoint. + + Returns: + JSON response with service health status. + """ + LOGGER.debug("Health check requested") + return jsonify({ + 'status': 'healthy', + 'service': 'AI Engine', + 'timestamp': datetime.now(timezone.utc).isoformat() + }), 200 + + @blueprint.route('/config', methods=['GET']) + def config(): + """ + Get current configuration. + + Returns: + JSON response with SIMAP and InfluxDB connection details. + Sensitive values (passwords, tokens) are masked. + """ + LOGGER.debug("Configuration requested") + + def mask_secret(value: str) -> str: + """Mask sensitive values for display.""" + if not value: + return '(not set)' + return f"{value[:2]}{'*' * (len(value) - 2)}" if len(value) > 2 else '***' + + return jsonify({ + 'simap': { + 'scheme': Config.SIMAP_DATASTORE_SCHEME, + 'address': Config.SIMAP_DATASTORE_ADDRESS, + 'port': Config.SIMAP_DATASTORE_PORT, + 'username': Config.SIMAP_DATASTORE_USERNAME, + 'password': mask_secret(Config.SIMAP_DATASTORE_PASSWORD) + }, + 'influxdb': { + 'host': Config.INFLUXDB_HOST, + 'port': Config.INFLUXDB_PORT, + 'token': mask_secret(Config.INFLUXDB_TOKEN), + 'database': Config.INFLUXDB_DATABASE + }, + 'api': { + 'host': Config.AI_ENGINE_REST_HOST, + 'port': Config.AI_ENGINE_REST_PORT + } + }), 200 + + @blueprint.route('/notify', methods=['POST']) + def notify(): + """ + Handle telemetry update notifications. + + Accepts status notifications (UPGRADE or DOWNGRADE) with optional + timestamp, validates the payload structure, and forwards to + InfluxDBFetcher for storage. + + Expected JSON payload: + { + "status": "UPGRADE" | "DOWNGRADE", # Required, uppercase only + "timestamp": "" # Optional + } + + Returns: + JSON response with success/error status. + """ + LOGGER.info("Received telemetry notification request") + + # Parse and validate request JSON + try: + data = request.get_json() + if data is None: + LOGGER.error("Request body is empty or not valid JSON") + return jsonify({ + 'status': 'error', + 'message': 'Request body must be valid JSON' + }), 400 + except Exception as e: + LOGGER.error(f"Failed to parse request JSON: {e}") + return jsonify({ + 'status': 'error', + 'message': f'Invalid JSON: {str(e)}' + }), 400 + + # Validate payload structure + try: + # Check for unexpected keys + allowed_keys = {'status', 'timestamp'} + received_keys = set(data.keys()) + unexpected_keys = received_keys - allowed_keys + if unexpected_keys: + LOGGER.error(f"Unexpected keys in payload: {unexpected_keys}") + return jsonify({ + 'status': 'error', + 'message': f'Unexpected keys: {", ".join(unexpected_keys)}' + }), 400 + + # Check for required 'status' key + if 'status' not in data: + LOGGER.error("Missing required field: status") + return jsonify({ + 'status': 'error', + 'message': 'Missing required field: status' + }), 400 + + # Validate status value + status_value = data['status'] + if status_value not in {'UPGRADE', 'DOWNGRADE'}: + LOGGER.error(f"Invalid status value: {status_value}") + return jsonify({ + 'status': 'error', + 'message': 'Invalid status value: must be UPGRADE or DOWNGRADE' + }), 400 + + # Validate timestamp if present (accept any string) + if 'timestamp' in data and not isinstance(data['timestamp'], str): + LOGGER.error(f"Invalid timestamp type: {type(data['timestamp'])}") + return jsonify({ + 'status': 'error', + 'message': 'Timestamp must be a string' + }), 400 + + LOGGER.debug(f"Payload validation passed for status: {status_value}") + + except Exception as e: + LOGGER.error(f"Payload validation error: {e}") + return jsonify({ + 'status': 'error', + 'message': f'Validation error: {str(e)}' + }), 400 + + # Forward to InfluxDBFetcher + try: + result = influxdb_fetcher.notify_telemetry_update(data) + if result: + LOGGER.info("Telemetry notification processed successfully") + return jsonify({ + 'status': 'success', + 'message': 'Notification processed successfully' + }), 200 + else: + LOGGER.error("InfluxDBFetcher returned False") + return jsonify({ + 'status': 'error', + 'message': 'Failed to process notification' + }), 500 + + except ValueError as e: + # Validation errors from InfluxDBFetcher + LOGGER.error(f"Validation error from InfluxDBFetcher: {e}") + return jsonify({ + 'status': 'error', + 'message': str(e) + }), 400 + + except Exception as e: + # Check if this is a retry failure (service unavailable) + error_msg = str(e) + if 'Giving up' in error_msg or 'unavailable' in error_msg.lower(): + LOGGER.error(f"InfluxDB unavailable: {e}") + return jsonify({ + 'status': 'error', + 'message': f'InfluxDB service unavailable: {error_msg}' + }), 503 + else: + LOGGER.exception(f"Unexpected error processing notification: {e}") + return jsonify({ + 'status': 'error', + 'message': f'Internal server error: {error_msg}' + }), 500 + + return blueprint diff --git a/src/tests/tools/simap_ai_engine/ai_engine/clients/__init__.py b/src/tests/tools/simap_ai_engine/ai_engine/clients/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/clients/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2022-2026 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/tools/simap_ai_engine/ai_engine/clients/decision_client.py b/src/tests/tools/simap_ai_engine/ai_engine/clients/decision_client.py new file mode 100644 index 0000000000000000000000000000000000000000..7377a6771485bd1d56913b33d7ca924ce0536917 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/clients/decision_client.py @@ -0,0 +1,71 @@ +# Copyright 2022-2026 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. + +""" +Decision Engine Client module. + +Provides client functionality for sending analysis results to the Decision Engine. +""" + +import json +import logging +from typing import Any, Dict + +LOGGER = logging.getLogger(__name__) + + +class DecisionEngineClient: + """ + Client for sending analysis results to the Decision Engine. + + This class handles communication with the downstream Decision Engine + service that acts on AI analysis results. + """ + + def __init__(self) -> None: + """ + Initialize the DecisionEngineClient. + + Sets up the connection parameters for the Decision Engine service. + """ + LOGGER.info("DecisionEngineClient initialized") + # TODO: Configure Decision Engine connection parameters + # Example: self.decision_engine_url = get_setting('DECISION_ENGINE_URL') + + def send_results(self, results: Dict[str, Any]) -> bool: + """ + Send analysis results to the Decision Engine. + + Transmits the AI analysis results to the Decision Engine for + action execution. This is currently a placeholder implementation + that logs the results to stdout. + + Args: + results: Dictionary containing analysis results including + violations, recommendations, and summary. + + Returns: + True if results were successfully sent, False otherwise. + + Note: + This is a placeholder implementation. The actual implementation + should send results to a Decision Engine service via gRPC or REST. + """ + LOGGER.info("Sending results to Decision Engine") + try: + # print(json.dumps(results, indent=2)) + return True + except Exception as e: + LOGGER.error(f"Failed to send results to Decision Engine: {e}") + return False diff --git a/src/tests/tools/simap_ai_engine/ai_engine/clients/influxdb_fetcher.py b/src/tests/tools/simap_ai_engine/ai_engine/clients/influxdb_fetcher.py new file mode 100644 index 0000000000000000000000000000000000000000..7b4097d8a58a9658db294885b0fda917f63bdd77 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/clients/influxdb_fetcher.py @@ -0,0 +1,351 @@ +# Copyright 2022-2026 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. + +""" +InfluxDB Fetcher module. + +Provides functionality to fetch performance metrics from InfluxDB. +""" + +from urllib import response +import pandas as pd +import logging +from datetime import datetime, timezone +from typing import Any, Dict + +from numpy import average +from common.tools.client.RetryDecorator import delay_exponential, retry +from influxdb_client_3 import InfluxDBClient3, Point, WritePrecision +from ..ai_model.sla_policy import SLAPolicyConfig + +LOGGER = logging.getLogger(__name__) + +# Retry decorator for external service calls +RETRY_DECORATOR = retry( + max_retries=15, + delay_function=delay_exponential(initial=0.01, increment=2.0, maximum=5.0) +) + + +class InfluxDBFetcher: + """ + Fetches performance metrics from InfluxDB. + + This class handles communication with InfluxDB to retrieve time-series + performance data for network devices and services. + """ + + def __init__( + self, + influxdb_host: str, + influxdb_port: int, + influxdb_token: str, + influxdb_database: str + ) -> None: + """ + Initialize the InfluxDBFetcher. + + Args: + influxdb_host: InfluxDB server hostname or IP address. + influxdb_port: InfluxDB server port number. + influxdb_token: Authentication token for InfluxDB. + influxdb_database: Name of the InfluxDB database to query. + """ + self.influxdb_host = influxdb_host + self.influxdb_port = influxdb_port + self.influxdb_token = influxdb_token + self.influxdb_database = influxdb_database + self.influxdb_url = f"http://{influxdb_host}:{influxdb_port}" + + LOGGER.info( f"InfluxDBFetcher initialized for database '{influxdb_database}' " + f"at {self.influxdb_url}") + self._client = InfluxDBClient3( + host = self.influxdb_url, + token = self.influxdb_token, + database = self.influxdb_database + ) + + def is_connected(self) -> bool: + """ + Check if InfluxDB client is initialized and ready. + + Returns: + True if client is ready, False otherwise. + """ + try: + if isinstance(self._client, InfluxDBClient3): + LOGGER.debug("InfluxDB client is initialized") + return True + else: + LOGGER.warning("InfluxDB client is not initialized") + return False + except Exception as e: + LOGGER.error(f"Error checking InfluxDB connection: {e}") + return False + + def process_response_table( + self, + table: Any, + ) -> Dict[str, Any]: + """ + Process InfluxDB response table into structured data. + + Args: + table: Raw response table from InfluxDB query. + + Returns: + Dictionary containing processed performance metrics and values. + """ + if table is None or not isinstance(table, pd.DataFrame): + LOGGER.warning("No data returned from InfluxDB query") + return { + 'metrics': [], + 'metric_values': [] + } + + LOGGER.debug(f"Processing {len(table)} rows from InfluxDB response") + + # Sort by time column (old to new) if it exists + if 'time' in table.columns: + table = table.sort_values(by='time', ascending=True) + LOGGER.debug("Sorted data by time (ascending: old to new)") + + # Define columns for each output dataframe + full_columns = ['bandwidth_utilization', 'latency', 'time', 'link_id'] + metric_columns = ['bandwidth_utilization', 'latency'] + + # Create DataFrame 1: Full metrics with time and link_id + # Filter only columns that exist in the table + available_full_cols = [col for col in full_columns if col in table.columns] + df_full = table[available_full_cols] + metrics = df_full.to_dict('records') + + # Create DataFrame 2: Only metric values (bandwidth_utilization, latency) + available_metric_cols = [col for col in metric_columns if col in table.columns] + df_metrics = table[available_metric_cols] + metric_values = df_metrics.to_dict('records') + + LOGGER.debug(f"Processed {len(metrics)} metric records with {len(available_full_cols)} columns") + LOGGER.debug(f"Extracted {len(metric_values)} metric value records with {len(available_metric_cols)} columns") + LOGGER.info(f"Response values are: {metric_values} ") + + return { + 'metrics': metrics, + 'metric_values': metric_values + } + + + @RETRY_DECORATOR + def fetch_performance_data( + self, + sla_policy: SLAPolicyConfig + ) -> Dict[str, Any]: + + if not self.is_connected(): + raise ConnectionError("Unable to connect to InfluxDB") + + if sla_policy.latency_threshold_ms is None: + raise ValueError("SLA policy missing latency threshold for data fetch") + + LOGGER.debug( + f"Fetching performance data for simap_id={sla_policy.simap_id}, " + f"time_window={sla_policy.time_window_seconds}s, " + f"required_samples={sla_policy.forecast_sample_count}" + ) + + try: + # Initial time window + current_time_window = sla_policy.time_window_seconds + max_attempts = 3 + attempt = 1 + final_table = None + + while attempt <= max_attempts: + query = ( + f"SELECT * FROM link_telemetry " + f"WHERE link_id = '{sla_policy.simap_id}' " + f"AND time >= now() - INTERVAL '{current_time_window} seconds' " + f"ORDER BY time DESC" + ) + + LOGGER.debug(f"Attempt {attempt}/{max_attempts}: Executing query with time_window={current_time_window}s") + LOGGER.debug(f"Query: {query}") + + final_table = self._client.query(query=query, language="sql", mode="pandas") + + # Count samples from raw table + samples_fetched = 0 if final_table is None or not isinstance(final_table, pd.DataFrame) else len(final_table) + + LOGGER.info( + f"Attempt {attempt}: Fetched {samples_fetched} samples " + f"(required: {sla_policy.forecast_sample_count})" + ) + + # Check if we have enough samples + if samples_fetched >= sla_policy.forecast_sample_count: + LOGGER.info(f"Required samples met") + break + + # If not enough samples and not last attempt, calculate new time window + if attempt < max_attempts: + if samples_fetched > 0: + # Calculate required time window based on sample density + # Formula: new_window = current_window * (required_samples / fetched_samples) * 1.2 + # The 1.2 factor adds 20% buffer to account for non-uniform data distribution + ratio = sla_policy.forecast_sample_count / samples_fetched + current_time_window = int(current_time_window * ratio * 1.2) + LOGGER.debug(f"Extending time window to {current_time_window}s(ratio: {ratio:.2f})") + else: + # If no samples, double the time window + current_time_window *= 2 + LOGGER.warning(f"No samples found, doubling time window to {current_time_window}s") + + attempt += 1 + else: + LOGGER.warning( + f"Max attempts reached. Returning {samples_fetched} samples " + f"(required: {sla_policy.forecast_sample_count})" + ) + break + + # Process the response table after fetch is completed + result = self.process_response_table(final_table) + + return { + 'metrics': result.get('metrics', []), + 'metric_values': result.get('metric_values', []), + 'fetch_window_size_sec': current_time_window, + 'timestamp_range': {}, + } + except Exception as e: + LOGGER.error(f"Error fetching performance data from InfluxDB: {e}", exc_info=True) + raise e + + @RETRY_DECORATOR + def notify_telemetry_update( + self, + notification_data: Dict[str, Any] + ) -> bool: + """ + Process telemetry update notifications. + + Validates and stores status notifications (UPGRADE or DOWNGRADE) + in InfluxDB for telemetry tracking. The retry decorator ensures + resilience against transient failures. + + Args: + notification_data: Dictionary containing: + - 'status': Required. Must be "UPGRADE" or "DOWNGRADE". + - 'timestamp': Optional. Any string value. + + Returns: + True if notification was processed and stored successfully. + + Raises: + ValueError: If status is not "UPGRADE" or "DOWNGRADE". + Exception: If InfluxDB is unavailable after all retries. + """ + status = notification_data.get('status') + timestamp = notification_data.get('timestamp', datetime.now(timezone.utc).isoformat()) + + # Validate status value + if status not in {'UPGRADE', 'DOWNGRADE'}: + raise ValueError( + f"Invalid status value '{status}': must be UPGRADE or DOWNGRADE" + ) + + LOGGER.info( + f"Storing telemetry notification in InfluxDB: " + f"status={status}, timestamp={timestamp}" + ) + + point = Point("telemetry_notifications") \ + .tag("status", status) \ + .field("timestamp", timestamp) + self._client.write(point) + + LOGGER.info("Telemetry notification stored successfully in InfluxDB") + return True + + def write_predicted_telemetry( + self, + results: list[dict[str, Any]], + network_id: str = 'e2e', + link_id: str = 'E2E-L1' + ) -> bool: + """ + Write predicted telemetry (forecasted metrics) to InfluxDB. + + Args: + results: List of forecast results from AIModelProcessor. + Each dict contains metric_name, forecasted_values, etc. + network_id: Network identifier (default: 'e2e') + link_id: Link identifier (default: 'E2E-L1') + + Returns: + True if write succeeded, False otherwise. + """ + if not self.is_connected(): + LOGGER.warning("InfluxDB client not initialized, skipping write to DB") + return False + + if not results: + LOGGER.warning("No results to write to DB") + return False + + try: + # Extract metric predictions and calculate averages + metric_averages = {} + for result in results: + metric_name = result.get("metric_name") + forecasted_values = result.get("forecasted_values", []) + + if metric_name and forecasted_values: + # Calculate average of forecasted values + avg_value = float(average(forecasted_values)) + metric_averages[metric_name] = avg_value + LOGGER.debug(f"Average forecast for {metric_name}: {avg_value:.4f}") + + # Create InfluxDB point for predicted telemetry + point = ( + Point("predicted_telemetry") + .tag("network_id", network_id) + .tag("link_id", link_id) + ) + + # Add predicted metric fields with pred_ prefix + if "bandwidth_utilization" in metric_averages: + point = point.field( + "pred_bandwidth_utilization", + metric_averages["bandwidth_utilization"] + ) + + if "latency" in metric_averages: + point = point.field( + "pred_latency", + metric_averages["latency"] + ) + + # Write to InfluxDB + self._client.write(record=point, write_precision=WritePrecision.S) + + LOGGER.info( + "Wrote predicted telemetry to InfluxDB: network=%s, link=%s, metrics=%s", + network_id, link_id, list(metric_averages.keys()) + ) + return True + + except Exception as e: + LOGGER.error(f"Failed to write predicted telemetry to InfluxDB: {e}", exc_info=True) + return False diff --git a/src/tests/tools/simap_ai_engine/ai_engine/clients/simap_fetcher.py b/src/tests/tools/simap_ai_engine/ai_engine/clients/simap_fetcher.py new file mode 100644 index 0000000000000000000000000000000000000000..18a0298df29b40ba7db1c802140c00f75f8b6261 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/clients/simap_fetcher.py @@ -0,0 +1,105 @@ +# Copyright 2022-2026 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. + +""" +SIMAP Data Fetcher module. + +Provides functionality to fetch device and topology data from the SIMAP server. +""" + +import logging +from typing import Any, Dict + +from common.tools.client.RetryDecorator import delay_exponential, retry + +from ..ai_model.sla_policy import SLAPolicyConfig + +LOGGER = logging.getLogger(__name__) + +# Retry decorator for external service calls +RETRY_DECORATOR = retry( + max_retries=5, + delay_function=delay_exponential(initial=0.01, increment=2.0, maximum=5.0) +) + + +class SimapDataFetcher: + """ + Fetches device and topology data from the SIMAP server. + + This class handles communication with the SIMAP server to retrieve + device configurations and network topology information needed for + SLA policy analysis. + """ + + def __init__( + self, + simap_scheme: str, + simap_address: str, + simap_port: int, + simap_username: str, + simap_password: str + ) -> None: + """ + Initialize the SimapDataFetcher. + + Args: + simap_scheme: URL scheme for SIMAP server (http/https). + simap_address: SIMAP server hostname or IP address. + simap_port: SIMAP server port number. + simap_username: Username for SIMAP authentication. + simap_password: Password for SIMAP authentication. + """ + self.simap_scheme = simap_scheme + self.simap_address = simap_address + self.simap_port = simap_port + self.simap_username = simap_username + self.simap_password = simap_password + self.base_url = f"{simap_scheme}://{simap_address}:{simap_port}" + LOGGER.info(f"SimapDataFetcher initialized with base URL: {self.base_url}") + + @RETRY_DECORATOR + def fetch_device_data(self, sla_policy: SLAPolicyConfig) -> Dict[str, Any]: + """ + Fetch device and topology data from the SIMAP server. + + Communicates with the SIMAP server to retrieve device configurations + and network topology information relevant to the given SLA policy. + The retry decorator ensures resilience against transient failures. + + Args: + sla_policy: The SLA policy configuration containing the SIMAP ID + and parameters for data retrieval. + + Returns: + Dictionary containing: + - 'devices': List of device configurations. + - 'topology': Network topology information. + + Raises: + Exception: If the SIMAP server is unavailable after all retries, + or if the response is invalid. + """ + LOGGER.debug(f"Fetching device data for SIMAP ID: {sla_policy.simap_id}") + # TODO: Implement actual SIMAP server communication + # Example implementation: + # url = f"{self.base_url}/api/devices/{sla_policy.simap_id}" + # response = requests.get(url, auth=(self.simap_username, self.simap_password)) + # response.raise_for_status() + # return response.json() + return { + 'devices': [], + 'topology': {}, + 'simap_id': sla_policy.simap_id + } diff --git a/src/tests/tools/simap_ai_engine/ai_engine/config/Config.py b/src/tests/tools/simap_ai_engine/ai_engine/config/Config.py new file mode 100644 index 0000000000000000000000000000000000000000..6e990970f96599de01f500396c0e6b23c2023a47 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/config/Config.py @@ -0,0 +1,39 @@ +# Copyright 2022-2026 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. + +""" +Configuration module for the AI Engine. + +This module defines environment variables for SIMAP server, InfluxDB, +and REST API configuration using the TFS get_setting pattern. +""" + +from common.Settings import get_setting + +# SIMAP Datastore Configuration +SIMAP_DATASTORE_SCHEME = get_setting('SIMAP_DATASTORE_SCHEME', default='http') +SIMAP_DATASTORE_ADDRESS = get_setting('SIMAP_DATASTORE_ADDRESS', default='0.0.0.0') +SIMAP_DATASTORE_PORT = int(get_setting('SIMAP_DATASTORE_PORT', default='80')) +SIMAP_DATASTORE_USERNAME = get_setting('SIMAP_DATASTORE_USERNAME', default='admin') +SIMAP_DATASTORE_PASSWORD = get_setting('SIMAP_DATASTORE_PASSWORD', default='admin') + +# InfluxDB Configuration +INFLUXDB_HOST = get_setting('INFLUXDB_HOST', default='localhost') +INFLUXDB_PORT = int(get_setting('INFLUXDB_PORT', default='8181')) +INFLUXDB_TOKEN = get_setting('INFLUXDB_TOKEN', default='') +INFLUXDB_DATABASE = get_setting('INFLUXDB_DATABASE', default='simap_telemetry') + +# AI Engine REST API Configuration +AI_ENGINE_REST_HOST = get_setting('AI_ENGINE_REST_HOST', default='0.0.0.0') +AI_ENGINE_REST_PORT = int(get_setting('AI_ENGINE_REST_PORT', default='8080')) diff --git a/src/tests/tools/simap_ai_engine/ai_engine/config/__init__.py b/src/tests/tools/simap_ai_engine/ai_engine/config/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..b53987a4eae1aed245eba5c7ddd8cd10e35919c2 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/config/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2022-2026 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/tools/simap_ai_engine/ai_engine/engine.py b/src/tests/tools/simap_ai_engine/ai_engine/engine.py new file mode 100644 index 0000000000000000000000000000000000000000..cdadf83ba64df601aed4227287397fbee919d53c --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/engine.py @@ -0,0 +1,112 @@ +# Copyright 2022-2026 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. + +""" +AI Engine orchestrator. + +Main class that initializes and coordinates all AI Engine components. +""" + +import logging + +from flask import Flask + +from .config import Config +from .api.api_blueprint import create_ai_engine_blueprint +from .clients.decision_client import DecisionEngineClient +from .clients.influxdb_fetcher import InfluxDBFetcher +from .clients.simap_fetcher import SimapDataFetcher +from .ai_model.ai_processor import AIModelProcessor + +LOGGER = logging.getLogger(__name__) + + +class AIEngineAPI: + """ + Main orchestrator for the AI Engine REST API. + + This class initializes all components and manages the Flask application + lifecycle. + """ + + def __init__(self) -> None: + """ + Initialize the AI Engine API. + + Creates instances of all required components (fetchers, processor, + client) and configures the Flask application with the API blueprint. + """ + LOGGER.info("Initializing AI Engine API") + + # Initialize components + self.simap_fetcher = SimapDataFetcher( + simap_scheme = Config.SIMAP_DATASTORE_SCHEME, + simap_address = Config.SIMAP_DATASTORE_ADDRESS, + simap_port = Config.SIMAP_DATASTORE_PORT, + simap_username = Config.SIMAP_DATASTORE_USERNAME, + simap_password = Config.SIMAP_DATASTORE_PASSWORD + ) + + self.influxdb_fetcher = InfluxDBFetcher( + influxdb_host = Config.INFLUXDB_HOST, + influxdb_port = Config.INFLUXDB_PORT, + influxdb_token = Config.INFLUXDB_TOKEN, + influxdb_database = Config.INFLUXDB_DATABASE + ) + + # Pass InfluxDB fetcher to AI processor for writing predicted telemetry + self.ai_processor = AIModelProcessor( + influx_fetcher=self.influxdb_fetcher + ) + self.decision_client = DecisionEngineClient() + + # Create Flask application + self.app = self.create_app() + + def create_app(self) -> Flask: + """ + Create and configure the Flask application. + + Returns: + Configured Flask application instance. + """ + app = Flask(__name__) + + # Register the AI Engine blueprint + blueprint = create_ai_engine_blueprint( + simap_fetcher = self.simap_fetcher, + influxdb_fetcher = self.influxdb_fetcher, + ai_processor = self.ai_processor, + decision_client = self.decision_client + ) + app.register_blueprint(blueprint) + + LOGGER.info("Flask application created and blueprint registered") + return app + + def run(self) -> None: + """ + Run the Flask application. + + Starts the Flask development server with the configured host and port. + """ + LOGGER.info( + f"Starting AI Engine API on " + f"{Config.AI_ENGINE_REST_HOST}:{Config.AI_ENGINE_REST_PORT}" + ) + self.app.run( + host=Config.AI_ENGINE_REST_HOST, + port=Config.AI_ENGINE_REST_PORT, + debug=False + ) diff --git a/src/tests/tools/simap_ai_engine/ai_engine/requirements.in b/src/tests/tools/simap_ai_engine/ai_engine/requirements.in new file mode 100644 index 0000000000000000000000000000000000000000..c3ecbb62d2456913d759c9feb6e6f21808243e71 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/requirements.in @@ -0,0 +1,21 @@ +# Copyright 2022-2026 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. + +# AI Engine dependencies +flask>=2.3.0 +requests>=2.31.0 +influxdb3-python>=0.8.0 +pandas>=2.0.0 +statsmodels>=0.14.0 +numpy>=1.24.0 diff --git a/src/tests/tools/simap_ai_engine/ai_engine/tests/__init__.py b/src/tests/tools/simap_ai_engine/ai_engine/tests/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..81a241400af489639d54ea9c9a082f370815fedf --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/tests/__init__.py @@ -0,0 +1,15 @@ +# Copyright 2022-2026 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. + +"""Tests for AI Engine module.""" diff --git a/src/tests/tools/simap_ai_engine/ai_engine/tests/run_test.sh b/src/tests/tools/simap_ai_engine/ai_engine/tests/run_test.sh new file mode 100755 index 0000000000000000000000000000000000000000..e802388d119e3d4415ffe1549e8e29d5a034b19c --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/tests/run_test.sh @@ -0,0 +1,50 @@ +#!/bin/bash +# Copyright 2022-2026 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. + +# Run AI Analytics Engine API tests +# +# Usage: ./run_test.sh + +# Navigate to TFS root directory +cd "$(dirname "$0")" + +# Set Python path to include TFS src and AI Analytics Engine +export PYTHONPATH="${PWD}/src:${PWD}/src/tests/tools/simap_ai_engine" + +# Activate virtual environment if not already activated +# if [ -z "$VIRTUAL_ENV" ]; then +# if [ -d "$HOME/.env-simap" ]; then +# source "$HOME/.env-simap/bin/activate" +# fi +# fi +echo "$PWD" +echo "Running AI Analytics Engine API tests..." + +# Define log file path +LOG_FILE="${PWD}/test_api_docker.log" +TEST_FILE="${PWD}/test_api_docker.py" + +# Run the test with logging enabled and capture output + +pytest $TEST_FILE::test_stop_all_analyses_endpoint \ +# pytest $TEST_FILE::test_analyze_endpoint \ + -v -s \ + --log-cli-level=DEBUG \ + --log-file="${LOG_FILE}" \ + --log-file-level=DEBUG \ + "$@" + +echo "" +echo "Test logs saved to: ${LOG_FILE}" diff --git a/src/tests/tools/simap_ai_engine/ai_engine/tests/test_api.py b/src/tests/tools/simap_ai_engine/ai_engine/tests/test_api.py new file mode 100644 index 0000000000000000000000000000000000000000..f0a8b1adee69165c8f1642947df91934215c4c92 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/tests/test_api.py @@ -0,0 +1,217 @@ +# Copyright 2022-2026 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. + +""" +Test suite for AI Engine REST API. + +This module tests the /api/v1/analyze endpoint by starting the server +and sending HTTP requests. +""" + +import logging +import os +import sys +import threading +import time + +import pytest +import requests + +# Add TFS src directory and AI Engine package root to path. +# Must be done before any package imports. +current_dir = os.path.dirname(os.path.abspath(__file__)) +tfs_src_dir = os.path.abspath(os.path.join(current_dir, '../../../../..')) +ai_engine_root_dir = os.path.abspath(os.path.join(current_dir, '../..')) +if tfs_src_dir not in sys.path: + sys.path.insert(0, tfs_src_dir) +if ai_engine_root_dir not in sys.path: + sys.path.insert(0, ai_engine_root_dir) + +# Now we can import from the AI Engine package +from ai_engine import AIEngineAPI + +# Configure logging for tests +logging.basicConfig( + level=logging.DEBUG, + format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s" +) +LOGGER = logging.getLogger(__name__) + +# Test server configuration +TEST_HOST = '127.0.0.1' +TEST_PORT = 8085 # 18080 port for manual testing + +BASE_URL = f'http://{TEST_HOST}:{TEST_PORT}' + + +@pytest.fixture(scope='module') +def ai_engine_server(): + """ + Fixture to start the AI Analytics Engine server in a background thread. + + Yields control to tests once server is ready, then performs cleanup. + """ + LOGGER.info("Starting AI Analytics Engine server fixture") + + # Override config for testing + os.environ['AI_ENGINE_REST_HOST'] = TEST_HOST + os.environ['AI_ENGINE_REST_PORT'] = str(TEST_PORT) + + # Create engine instance + engine = AIEngineAPI() + + # Start server in background thread + server_thread = threading.Thread( + target=lambda: engine.app.run( + host=TEST_HOST, + port=TEST_PORT, + debug=False, + use_reloader=False + ), + daemon=True + ) + server_thread.start() + + # Wait for server to be ready + max_retries = 15 + for i in range(max_retries): + try: + LOGGER.debug(f"Waiting for server to start... ({i+1}/{max_retries})") + response = requests.get(f'{BASE_URL}/api/v1/config', timeout=1) + if response.status_code == 200: + LOGGER.info("AI Analytics Engine server is ready") + break + except requests.exceptions.RequestException as e: + # LOGGER.debug(f"Server not ready yet: {e}") + if i < max_retries - 1: + time.sleep(5) + else: + raise RuntimeError("Failed to start AI Analytics Engine server") + + yield engine + + LOGGER.info("AI Analytics Engine server fixture cleanup complete") + + + +def test_analyze_endpoint(ai_engine_server): + """ + Test POST /api/v1/analyze endpoint. + + Validates that the analyze endpoint: + - Accepts valid SLA policy JSON payload + - Returns appropriate status codes (200 for success, 503 for service unavailable) + - Returns JSON response with status and message fields + """ + + LOGGER.info(">>>>>> Starting test_case test_analyze_endpoint: POST /api/v1/analyze endpoint") + + # Prepare test payload with SLA policy configuration + payload = { + "simap_id": "E2E-L1", + "sla_metrics": { + "latency_threshold_ms": 0, + "bandwidth_utilization": 0.0 + }, + "history_window_size_sec": 600, + "forecast_sample_interval_sec": 5, + "forecast_sample_count": 120, + } + + LOGGER.info(f"Sending analyze request with payload: {payload}") + + # Send POST request to analyze endpoint + response = requests.post( + f'{BASE_URL}/api/v1/analyze', + json=payload, + timeout=10 + ) + + # Add condition to validate response status code and content + + LOGGER.info(f"Analyze response status: {response.status_code}") + + # Parse JSON response + data = response.json() + LOGGER.info(f"Analyze response body: {data}") + + # Validate response structure + assert 'status' in data, "Response missing 'status' field" + assert 'message' in data, "Response missing 'message' field" + + # Accept either success (200) or service unavailable (503) + # 503 is expected if SIMAP server or InfluxDB are not running + if response.status_code == 200: + LOGGER.info("Analysis completed successfully") + assert data['status'] == 'success', f"Expected status 'success', got '{data['status']}'" + assert 'data' in data, "Successful response missing 'data' field" + elif response.status_code == 503: + # LOGGER.error("External service unavailable (expected if SIMAP/InfluxDB not running)") + assert data['status'] == 'error', f"Expected status 'error' for 503, got '{data['status']}'" + pytest.fail("External service unavailable (expected if SIMAP/InfluxDB not running)") + elif response.status_code == 400: + LOGGER.error(f"Bad request: {data['message']}") + assert data['status'] == 'error', f"Expected status 'error' for 400, got '{data['status']}'" + pytest.fail(f"Bad request: {data['message']}") + else: + pytest.fail(f"Unexpected status code: {response.status_code}") + + LOGGER.info("Analyze endpoint test passed!") + LOGGER.info("<<<<<< Finished test_case test_analyze_endpoint") + + +def test_notify_endpoint(): + """ + Test POST /api/v1/notify endpoint with valid status-only payload. + + Validates that the notify endpoint: + - Accepts valid notification payload with only "status" key + - Returns appropriate status codes (200 for success, 503 for service unavailable) + - Returns JSON response with status and message fields + """ + LOGGER.info(">>>>>> Starting test_case test_notify_endpoint: POST /api/v1/notify endpoint") + + payload = {"status": "UPGRADE"} + LOGGER.info(f"Sending notify request with payload: {payload}") + + # Send POST request to notify endpoint + response = requests.post( + f'{BASE_URL}/api/v1/notify', + json=payload, + timeout=10 + ) + + LOGGER.info(f"Notify response status: {response.status_code}") + + # Parse JSON response + data = response.json() + LOGGER.info(f"Notify response body: {data}") + + # Validate response structure + assert 'status' in data, "Response missing 'status' field" + assert 'message' in data, "Response missing 'message' field" + + # Accept either success (200) or service unavailable (503) + # 503 is expected if InfluxDB is not running + if response.status_code == 200: + LOGGER.info("Notification processed successfully") + assert data['status'] == 'success', f"Expected status 'success', got '{data['status']}'" + elif response.status_code == 503: + LOGGER.warning("InfluxDB unavailable (expected if InfluxDB not running)") + assert data['status'] == 'error', f"Expected status 'error' for 503, got '{data['status']}'" + else: + pytest.fail(f"Unexpected status code: {response.status_code}") + + LOGGER.info("Notify endpoint test passed!") + LOGGER.info("<<<<<< Finished test_case test_notify_endpoint") diff --git a/src/tests/tools/simap_ai_engine/ai_engine/tests/test_api_docker.py b/src/tests/tools/simap_ai_engine/ai_engine/tests/test_api_docker.py new file mode 100644 index 0000000000000000000000000000000000000000..cb067e4a5b443c00809db371e0bb39b49c4741bc --- /dev/null +++ b/src/tests/tools/simap_ai_engine/ai_engine/tests/test_api_docker.py @@ -0,0 +1,333 @@ +# Copyright 2022-2026 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. + +""" +Test suite for AI Analytics Engine REST API running in Docker. + +This module tests the /api/v1/analyze endpoint by connecting to the +AI-Engine Docker container exposed on port 8084. +""" + +import logging +import time + +import pytest +import requests + +# Configure logging for tests +logging.basicConfig( + level=logging.DEBUG, + format="[%(asctime)s] %(levelname)s:%(name)s:%(message)s" +) +LOGGER = logging.getLogger(__name__) + +# Test server configuration - Docker container exposed port +TEST_HOST = '127.0.0.1' +TEST_PORT = 8084 # Docker container port mapping: 8084->8080 + +BASE_URL = f'http://{TEST_HOST}:{TEST_PORT}' + + + +@pytest.fixture(scope='module') +def ai_engine_server_connection_confirmation(): + """ + Fixture to verify the AI Analytics Engine Docker container is running. + + Checks connectivity to the Docker container and yields control to tests. + Assumes the container is already running (docker run -p 8084:8080 ai-engine:latest). + """ + LOGGER.info("Checking AI Analytics Engine Docker container availability") + + # Wait for server to be ready + max_retries = 15 + for i in range(max_retries): + try: + LOGGER.debug(f"Checking Docker container connectivity... ({i+1}/{max_retries})") + response = requests.get(f'{BASE_URL}/api/v1/config', timeout=2) + if response.status_code == 200: + LOGGER.info("AI Analytics Engine Docker container is ready") + break + except requests.exceptions.RequestException as e: + LOGGER.debug(f"Container not ready yet: {e}") + if i < max_retries - 1: + time.sleep(2) + else: + raise RuntimeError( + f"Failed to connect to AI Analytics Engine Docker container at {BASE_URL}. " + f"Ensure container is running: docker run -p 8084:8080 ai-engine:latest" + ) + + yield + + LOGGER.info("AI Analytics Engine Docker test fixture cleanup complete") + + + +def test_analyze_endpoint(ai_engine_server_connection_confirmation): + """ + Test POST /api/v1/analyze endpoint. + + Validates that the analyze endpoint: + - Accepts valid SLA policy JSON payload + - Returns 202 Accepted for background processing + - Returns JSON response with status, message, simap_id, duration, and endpoint fields + """ + + LOGGER.info(">>>>>> Starting test_case test_analyze_endpoint: POST /api/v1/analyze endpoint") + + # Prepare test payload with SLA policy configuration + payload = { + "simap_id": "E2E-L1", + "sla_metrics": { + "latency_threshold_ms": 0, + "bandwidth_utilization": 0.0 + }, + "history_window_size_sec": 60, + "forecast_sample_interval_sec": 30, + "forecast_sample_count": 50, + "duration_minutes": 10 # Short duration for testing + } + + LOGGER.info(f"Sending analyze request with payload: {payload}") + + # Send POST request to analyze endpoint + response = requests.post( + f'{BASE_URL}/api/v1/analyze', + json=payload, + timeout=10 + ) + + LOGGER.info(f"Analyze response status: {response.status_code}") + + # Parse JSON response + data = response.json() + LOGGER.info(f"Analyze response body: {data}") + + # Validate response structure + assert 'status' in data, "Response missing 'status' field" + assert 'message' in data, "Response missing 'message' field" + + # Accept either accepted (202) or service unavailable (503) + # 503 is expected if SIMAP server or InfluxDB are not running + if response.status_code == 202: + LOGGER.info("Analysis started successfully") + assert data['status'] == 'accepted', f"Expected status 'accepted', got '{data['status']}'" + assert data['simap_id'] == 'E2E-L1', f"Expected simap_id 'E2E-L1', got '{data['simap_id']}'" + assert data['duration_minutes'] == 2, f"Expected duration_minutes 2, got '{data['duration_minutes']}'" + assert '/osm/aiAnalyticsEvent/v1' in data['endpoint'], f"Expected '/osm/aiAnalyticsEvent/v1' in endpoint" + elif response.status_code == 503: + assert data['status'] == 'error', f"Expected status 'error' for 503, got '{data['status']}'" + pytest.fail("External service unavailable (expected if SIMAP/InfluxDB not running)") + elif response.status_code == 400: + LOGGER.error(f"Bad request: {data['message']}") + assert data['status'] == 'error', f"Expected status 'error' for 400, got '{data['status']}'" + pytest.fail(f"Bad request: {data['message']}") + else: + pytest.fail(f"Unexpected status code: {response.status_code}") + + LOGGER.info("Analyze endpoint test passed!") + LOGGER.info("<<<<<< Finished test_case test_analyze_endpoint") + + +def test_status_endpoint(ai_engine_server): + """ + Test GET /api/v1/status endpoint. + + Validates that the status endpoint: + - Returns list of running analyses + - Includes running_count, analyses array, and timestamp + - Each analysis has simap_id, is_alive, start_time, duration_minutes + """ + + LOGGER.info(">>>>>> Starting test_case test_status_endpoint: GET /api/v1/status endpoint") + + # Send GET request to status endpoint + response = requests.get( + f'{BASE_URL}/api/v1/status', + timeout=5 + ) + + LOGGER.info(f"Status response status: {response.status_code}") + assert response.status_code == 200, f"Expected status code 200, got {response.status_code}" + + # Parse JSON response + data = response.json() + LOGGER.info(f"Status response body: {data}") + + # Validate response structure + assert 'running_count' in data, "Response missing 'running_count' field" + assert 'analyses' in data, "Response missing 'analyses' field" + assert 'timestamp' in data, "Response missing 'timestamp' field" + assert isinstance(data['analyses'], list), "Field 'analyses' should be a list" + + # If there are running analyses, validate their structure + if data['running_count'] > 0: + LOGGER.info(f"Found {data['running_count']} running analyses") + for analysis in data['analyses']: + assert 'simap_id' in analysis, "Analysis missing 'simap_id' field" + assert 'is_alive' in analysis, "Analysis missing 'is_alive' field" + assert 'start_time' in analysis, "Analysis missing 'start_time' field" + assert 'duration_minutes' in analysis, "Analysis missing 'duration_minutes' field" + else: + LOGGER.info("No analyses currently running") + + LOGGER.info("Status endpoint test passed!") + LOGGER.info("<<<<<< Finished test_case test_status_endpoint") + + +def test_stop_analyze_endpoint(ai_engine_server): + """ + Test POST /api/v1/analyze/stop endpoint. + + Validates that the stop endpoint: + - Stops a running analysis by simap_id + - Returns 404 if no analysis found + - Returns 200 on successful stop + """ + + LOGGER.info(">>>>>> Starting test_case test_stop_analyze_endpoint: POST /api/v1/analyze/stop endpoint") + + # First, start an analysis to test stopping it + start_payload = { + "simap_id": "L2", + "sla_metrics": { + "latency_threshold_ms": 0, + "bandwidth_utilization": 0.0 + }, + "history_window_size_sec": 60, + "forecast_sample_interval_sec": 5, + "forecast_sample_count": 50, + "duration_minutes": 5 # Longer duration so we can stop it + } + + LOGGER.info(f"Starting analysis with payload: {start_payload}") + start_response = requests.post( + f'{BASE_URL}/api/v1/analyze', + json=start_payload, + timeout=10 + ) + + # Only proceed with stop test if start was successful + if start_response.status_code == 202: + LOGGER.info("Analysis started, now testing stop endpoint") + + # Wait a moment to ensure thread is running + time.sleep(2) + + # Test stopping the analysis + stop_payload = {"simap_id": start_payload["simap_id"]} + + LOGGER.info(f"Sending stop request with payload: {stop_payload}") + response = requests.post( + f'{BASE_URL}/api/v1/analyze/stop', + json=stop_payload, + timeout=10 + ) + + LOGGER.info(f"Stop response status: {response.status_code}") + + # Parse JSON response + data = response.json() + LOGGER.info(f"Stop response body: {data}") + + assert response.status_code == 200, f"Expected status code 200, got {response.status_code}" + assert data['status'] == 'success', f"Expected status 'success', got '{data['status']}'" + assert data['simap_id'] == start_payload["simap_id"], f"Expected simap_id '{start_payload['simap_id']}', got '{data['simap_id']}'" + + LOGGER.info("Stop successful, verifying analysis is stopped") + + # Verify the analysis is no longer running + time.sleep(1) + status_response = requests.get(f'{BASE_URL}/api/v1/status', timeout=5) + status_data = status_response.json() + + # Check if L1 is still in the list + running_ids = [a['simap_id'] for a in status_data['analyses'] if a['is_alive']] + assert 'L2' not in running_ids, "Analysis should be stopped" + + LOGGER.info("Verified analysis was stopped") + else: + LOGGER.warning(f"Skipping stop test - could not start analysis (status {start_response.status_code})") + pytest.skip("Could not start analysis to test stop functionality") + + # Test stopping non-existent analysis + LOGGER.info("Testing stop on non-existent analysis") + stop_nonexistent = {"simap_id": "nonexistent-id"} + response = requests.post( + f'{BASE_URL}/api/v1/analyze/stop', + json=stop_nonexistent, + timeout=10 + ) + + LOGGER.info(f"Stop nonexistent response status: {response.status_code}") + data = response.json() + LOGGER.info(f"Stop nonexistent response body: {data}") + + assert response.status_code == 404, f"Expected status code 404 for nonexistent, got {response.status_code}" + assert data['status'] == 'error', f"Expected status 'error', got '{data['status']}'" + + LOGGER.info("Stop endpoint test passed!") + LOGGER.info("<<<<<< Finished test_case test_stop_analyze_endpoint") + + +def test_stop_all_analyses_endpoint(ai_engine_server): + """ + Test POST /api/v1/analyze/stop-all endpoint. + + Validates that the stop-all endpoint: + - Stops all running analyses + - Returns summary with stopped_count and stopped_ids + - Handles case when no analyses are running + """ + + LOGGER.info(">>>>>> Starting test_case test_stop_all_analyses_endpoint: POST /api/v1/analyze/stop-all endpoint") + started_ids = ["E2E-L1"] + + + # Only proceed if at least one analysis started + if len(started_ids) > 0: + LOGGER.info(f"Started {len(started_ids)} analyses, now testing stop-all endpoint") + + # Call stop-all endpoint + LOGGER.info("Sending stop-all request") + response = requests.post( + f'{BASE_URL}/api/v1/analyze/stop-all', + timeout=10 + ) + + LOGGER.info(f"Stop-all response status: {response.status_code}") + + # Parse JSON response + data = response.json() + LOGGER.info(f"Stop-all response body: {data}") + + # Validate response + assert response.status_code == 200, f"Expected status code 200, got {response.status_code}" + assert data['status'] == 'success', f"Expected status 'success', got '{data['status']}'" + assert 'stopped_count' in data, "Response missing 'stopped_count' field" + + # Verify that analyses were stopped + assert data['stopped_count'] > 0, "Expected at least one analysis to be stopped" + + LOGGER.info("Stop-all successful, verified all analyses stopped") + else: + LOGGER.warning("Could not start any analyses, skipping stop-all test") + pytest.skip("Could not start analyses to test stop-all functionality") + + LOGGER.info("Stop-all endpoint test passed!") + LOGGER.info("<<<<<< Finished test_case test_stop_all_analyses_endpoint") + + +# TODO: Add here test for notify endpoint from @blueprint.route('/notify', methods=['POST']) \ No newline at end of file diff --git a/src/tests/tools/simap_ai_engine/deploy_ai_engine.sh b/src/tests/tools/simap_ai_engine/deploy_ai_engine.sh new file mode 100755 index 0000000000000000000000000000000000000000..edc30a4a5b49be3458e518984a53becb06fb7342 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/deploy_ai_engine.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# Copyright 2022-2026 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. + +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO_ROOT="$(cd "${SCRIPT_DIR}/../../../.." && pwd)" + +docker rm --force ai-engine 2>/dev/null || true + +echo "Building AI Engine..." +cd "${REPO_ROOT}" +docker buildx build -t ai-engine:latest -f ./src/tests/tools/simap_ai_engine/ai_engine/Dockerfile . + +echo "Deploying AI Engine..." +docker run --detach --name ai-engine \ + --publish 8084:8080 \ + --env SIMAP_DATASTORE_ADDRESS=172.17.0.1 \ + --env SIMAP_DATASTORE_PORT=8080 \ + --env SIMAP_DATASTORE_USERNAME=admin \ + --env SIMAP_DATASTORE_PASSWORD=admin \ + ai-engine:latest +# docker run --detach --name traffic-changer --publish 8083:8080 traffic-changer:mock + +sleep 2 +docker ps -a +echo "Deployment complete." diff --git a/src/tests/tools/simap_ai_engine/destroy.sh b/src/tests/tools/simap_ai_engine/destroy.sh new file mode 100755 index 0000000000000000000000000000000000000000..e799bd7f6edb919846057554378e708caabcbae3 --- /dev/null +++ b/src/tests/tools/simap_ai_engine/destroy.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Copyright 2022-2026 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. + +set -euo pipefail + +echo "Cleaning up..." +docker rm --force ai-engine 2>/dev/null || true +sleep 2 +docker ps -a diff --git a/src/tests/tools/simap_server/.gitlab-ci.yml b/src/tests/tools/simap_datastore/.gitlab-ci.yml similarity index 77% rename from src/tests/tools/simap_server/.gitlab-ci.yml rename to src/tests/tools/simap_datastore/.gitlab-ci.yml index 30c79a50addadd5827f0b450cffb418093fdaa4e..e426d60f734678609f44c07bad7c3a7b8a532f97 100644 --- a/src/tests/tools/simap_server/.gitlab-ci.yml +++ b/src/tests/tools/simap_datastore/.gitlab-ci.yml @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -13,14 +13,14 @@ # limitations under the License. # Build, tag, and push the Docker image to the GitLab Docker registry -build simap_server: +build simap_datastore: stage: build before_script: - docker image prune --force - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY script: - - docker buildx build -t "$CI_REGISTRY_IMAGE/simap-server:test" -f ./src/tests/tools/simap_server/Dockerfile . - - docker push "$CI_REGISTRY_IMAGE/simap-server:test" + - docker buildx build -t "$CI_REGISTRY_IMAGE/simap-datastore:test" -f ./src/tests/tools/simap_datastore/Dockerfile . + - docker push "$CI_REGISTRY_IMAGE/simap-datastore:test" after_script: - docker image prune --force rules: @@ -29,8 +29,8 @@ build simap_server: - changes: - src/common/**/*.py - proto/*.proto - - src/src/tests/tools/simap_server/**/*.{py,in,yml,yaml,yang,sh,json} - - src/src/tests/tools/simap_server/Dockerfile + - src/src/tests/tools/simap_datastore/**/*.{py,in,yml,yaml,yang,sh,json} + - src/src/tests/tools/simap_datastore/Dockerfile - src/src/tests/.gitlab-ci.yml #- src/device/**/*.{py,in,yml} #- src/device/Dockerfile diff --git a/src/tests/tools/simap_server/Dockerfile b/src/tests/tools/simap_datastore/Dockerfile similarity index 71% rename from src/tests/tools/simap_server/Dockerfile rename to src/tests/tools/simap_datastore/Dockerfile index c6bb56f431f40feefd4e49f0865fa0f92d38c2be..6bb79f6cd45492cb90563dbe2ec4b65901ebb6a7 100644 --- a/src/tests/tools/simap_server/Dockerfile +++ b/src/tests/tools/simap_datastore/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -43,18 +43,29 @@ RUN python3 -m pip install --upgrade 'setuptools==79.0.0' 'wheel==0.45.1' RUN python3 -m pip install --upgrade 'pip-tools==7.3.0' # Create component sub-folders, get specific Python packages -RUN mkdir -p /var/teraflow/simap_server/ -WORKDIR /var/teraflow/simap_server/ +RUN mkdir -p /var/teraflow/ +WORKDIR /var/teraflow/ COPY src/common/tools/rest_conf/server/requirements.in ./requirements.in RUN pip-compile --quiet --output-file=requirements.txt requirements.in RUN python3 -m pip install -r requirements.txt # Add component files into working directory -COPY src/common/tools/rest_conf/server/restconf_server/ ./simap_server/ -COPY src/tests/tools/simap_server/yang/*.yang ./yang/ -COPY src/tests/tools/simap_server/startup.json ./startup.json +RUN mkdir -p /var/teraflow/common/tools/ +WORKDIR /var/teraflow/ +COPY src/common/tools/rest_api/ ./common/tools/rest_api/ +COPY src/common/tools/rest_conf/ ./common/tools/rest_conf/ -# Configure RESTCONF Server +# Get generic Specific packages +COPY src/tests/tools/simap_datastore/requirements.in ./requirements2.in +RUN pip-compile --quiet --output-file=requirements2.txt requirements2.in +RUN python3 -m pip install -r requirements2.txt + +# Add code files +COPY src/tests/tools/simap_datastore/simap_datastore/*.py ./simap_datastore/ +COPY src/tests/tools/simap_datastore/yang/. ./yang/ +COPY src/tests/tools/simap_datastore/startup.json ./startup.json + +# Configure RESTCONF Datastore ENV RESTCONF_PREFIX="/restconf" ENV YANG_SEARCH_PATH="./yang" ENV STARTUP_FILE="./startup.json" @@ -63,4 +74,4 @@ ENV STARTUP_FILE="./startup.json" ENV FLASK_ENV="production" # Start the service -ENTRYPOINT ["gunicorn", "--workers", "1", "--worker-class", "eventlet", "--bind", "0.0.0.0:8080", "simap_server.app:app"] +ENTRYPOINT ["gunicorn", "--workers", "1", "--worker-class", "eventlet", "--bind", "0.0.0.0:8080", "simap_datastore.app:app"] diff --git a/src/tests/tools/simap_datastore/README.md b/src/tests/tools/simap_datastore/README.md new file mode 100644 index 0000000000000000000000000000000000000000..13cf01d4388100f66f7d3a4c7c2353b247afcb5c --- /dev/null +++ b/src/tests/tools/simap_datastore/README.md @@ -0,0 +1,25 @@ +# RESTCONF/SIMAP Datastore + +This component implements a basic RESTCONF datastore that can load, potentially, any YANG data model. +In this case, it is prepared to load a SIMAP datastore based on IETF Network Topology + custom SIMAP Telemetry extensions. + + +## Build the RESTCONF/SIMAP Datastore Docker image +```bash +./build.sh +``` + +## Deploy the RESTCONF/SIMAP Datastore +```bash +./deploy.sh +``` + +## Run the RESTCONF/SIMAP Client for testing: +```bash +./run_client.sh +``` + +## Destroy the RESTCONF/SIMAP Datastore +```bash +./destroy.sh +``` diff --git a/src/tests/tools/simap_server/build.sh b/src/tests/tools/simap_datastore/build.sh similarity index 67% rename from src/tests/tools/simap_server/build.sh rename to src/tests/tools/simap_datastore/build.sh index 7ec0e0c917cd9870ae4f01fa81519b99a6bfa271..170b03f52e0745a63fb51fe65015fe40c5a9f934 100755 --- a/src/tests/tools/simap_server/build.sh +++ b/src/tests/tools/simap_datastore/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -16,7 +16,7 @@ # Make folder containing the script the root folder for its execution cd $(dirname $0)/../../../../ -# Build image SIMAP Server -docker buildx build -t simap-server:test -f ./src/tests/tools/simap_server/Dockerfile . -#docker tag simap-server:test localhost:32000/tfs/simap-server:test -#docker push localhost:32000/tfs/simap-server:test +# Build image SIMAP Datastore +docker buildx build -t simap-datastore:test -f ./src/tests/tools/simap_datastore/Dockerfile . +#docker tag simap-datastore:test localhost:32000/tfs/simap-datastore:test +#docker push localhost:32000/tfs/simap-datastore:test diff --git a/src/tests/tools/simap_datastore/deploy.sh b/src/tests/tools/simap_datastore/deploy.sh new file mode 100755 index 0000000000000000000000000000000000000000..1bdb0eb352e97d0fabf8804415d31bdca83caa1a --- /dev/null +++ b/src/tests/tools/simap_datastore/deploy.sh @@ -0,0 +1,40 @@ +#!/bin/bash +# Copyright 2022-2026 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. + + +# Cleanup +docker rm --force simap-datastore + + +# Create SIMAP Datastore with InfluxDB configuration +# INFLUXDB_HOST points to the host machine where InfluxDB is running +# Use --add-host to make the host accessible from inside the container +docker run --detach --name simap-datastore \ + --publish 8080:8080 \ + --add-host=host.docker.internal:host-gateway \ + --env INFLUXDB_HOST="host.docker.internal" \ + --env INFLUXDB_PORT=8181 \ + --env INFLUXDB_DATABASE=simap_telemetry \ + simap-datastore:test + + +sleep 2 + + +# Dump SIMAP Datastore container +docker ps -a + + +echo "Bye!" diff --git a/src/tests/tools/simap_server/destroy.sh b/src/tests/tools/simap_datastore/destroy.sh similarity index 86% rename from src/tests/tools/simap_server/destroy.sh rename to src/tests/tools/simap_datastore/destroy.sh index 51edb6bca0696ae4a25328d9149cae30add57b33..dce92fdb89e0a713af319731a1f5158bb2bbc74f 100755 --- a/src/tests/tools/simap_server/destroy.sh +++ b/src/tests/tools/simap_datastore/destroy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -15,7 +15,7 @@ # Cleanup -docker rm --force simap-server +docker rm --force simap-datastore # Dump Docker containers diff --git a/src/tests/tools/simap_datastore/requirements.in b/src/tests/tools/simap_datastore/requirements.in new file mode 100644 index 0000000000000000000000000000000000000000..406b526477ceafc4ae5f932539be30978ca20523 --- /dev/null +++ b/src/tests/tools/simap_datastore/requirements.in @@ -0,0 +1,15 @@ +# Copyright 2022-2026 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. + +influxdb3-python==0.16.0 diff --git a/src/tests/tools/simap_server/run_client.sh b/src/tests/tools/simap_datastore/run_client.sh similarity index 85% rename from src/tests/tools/simap_server/run_client.sh rename to src/tests/tools/simap_datastore/run_client.sh index 76aced85547c4fb2d884b69e9e1a45a52cf469b5..66e4daa0f9658cba6daf7b4df19896e12d325db2 100755 --- a/src/tests/tools/simap_server/run_client.sh +++ b/src/tests/tools/simap_datastore/run_client.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -16,4 +16,4 @@ # Make folder containing the script the root folder for its execution cd $(dirname $0)/../../../ -python -m tests.tools.simap_server.simap_client +python -m tests.tools.simap_datastore.simap_client diff --git a/src/tests/tools/simap_server/simap_client/SimapClient.py b/src/tests/tools/simap_datastore/simap_client/SimapClient.py similarity index 93% rename from src/tests/tools/simap_server/simap_client/SimapClient.py rename to src/tests/tools/simap_datastore/simap_client/SimapClient.py index 725b08bd47e0bd127cf0f7c4131cb744313b149d..53376bd975cbf61682c0fe2a333039071f0dfd90 100644 --- a/src/tests/tools/simap_server/simap_client/SimapClient.py +++ b/src/tests/tools/simap_datastore/simap_client/SimapClient.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -23,9 +23,9 @@ class TerminationPoint: def __init__(self, restconf_client : RestConfClient, network_id : str, node_id : str, tp_id : str): self._restconf_client = restconf_client - self._network_id = network_id - self._node_id = node_id - self._tp_id = tp_id + self._network_id = network_id + self._node_id = node_id + self._tp_id = tp_id def create(self, supporting_termination_point_ids : List[Tuple[str, str, str]] = []) -> None: endpoint = TerminationPoint.ENDPOINT_ID.format(self._network_id, self._node_id, self._tp_id) @@ -64,12 +64,13 @@ class TerminationPoint: class NodeTelemetry: - ENDPOINT = '/ietf-network:networks/network={:s}/node={:s}/simap-telemetry:simap-telemetry' + ENDPOINT = '/ietf-network:networks/network={:s}/node={:s}' + # ENDPOINT = '/ietf-network:networks/network={:s}/node={:s}/simap-telemetry:simap-telemetry' def __init__(self, restconf_client : RestConfClient, network_id : str, node_id : str): self._restconf_client = restconf_client - self._network_id = network_id - self._node_id = node_id + self._network_id = network_id + self._node_id = node_id def create( self, cpu_utilization : float, related_service_ids : List[str] = [] @@ -173,12 +174,13 @@ class Node: class LinkTelemetry: - ENDPOINT = '/ietf-network:networks/network={:s}/ietf-network-topology:link={:s}/simap-telemetry:simap-telemetry' + ENDPOINT = '/ietf-network:networks/network={:s}/ietf-network-topology:link={:s}' + # ENDPOINT = '/ietf-network:networks/network={:s}/ietf-network-topology:link={:s}/simap-telemetry:simap-telemetry' def __init__(self, restconf_client : RestConfClient, network_id : str, link_id : str): self._restconf_client = restconf_client - self._network_id = network_id - self._link_id = link_id + self._network_id = network_id + self._link_id = link_id def create( self, bandwidth_utilization : float, latency : float, @@ -210,8 +212,8 @@ class LinkTelemetry: 'latency' : '{:.3f}'.format(latency), } if len(related_service_ids) > 0: telemetry['related-service-ids'] = related_service_ids - link = {'link-id': self._link_id, 'simap-telemetry:simap-telemetry': telemetry} - network = {'network-id': self._network_id, 'ietf-network-topology:link': [link]} + link = {'link-id': self._link_id, 'simap-telemetry:simap-telemetry': telemetry} + network = {'network-id': self._network_id, 'ietf-network-topology:link': [link]} payload = {'ietf-network:networks': {'network': [network]}} self._restconf_client.patch(endpoint, payload) @@ -226,8 +228,8 @@ class Link: def __init__(self, restconf_client : RestConfClient, network_id : str, link_id : str): self._restconf_client = restconf_client - self._network_id = network_id - self._link_id = link_id + self._network_id = network_id + self._link_id = link_id self._telemetry : Optional[LinkTelemetry] = None @property @@ -283,8 +285,8 @@ class Network: ENDPOINT_ID = ENDPOINT_NO_ID + '/network={:s}' def __init__(self, restconf_client : RestConfClient, network_id : str): - self._restconf_client = restconf_client - self._network_id = network_id + self._restconf_client = restconf_client + self._network_id = network_id self._nodes : Dict[str, Node] = dict() self._links : Dict[str, Link] = dict() diff --git a/src/tests/tools/simap_datastore/simap_client/SimapMetricsGenerator.py b/src/tests/tools/simap_datastore/simap_client/SimapMetricsGenerator.py new file mode 100644 index 0000000000000000000000000000000000000000..127f478605e2cdeaa7d809f6746c4bd71eda04ad --- /dev/null +++ b/src/tests/tools/simap_datastore/simap_client/SimapMetricsGenerator.py @@ -0,0 +1,173 @@ +# Copyright 2022-2026 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 random +import math +import logging +from typing import Dict, List, Tuple + +LOGGER = logging.getLogger(__name__) + +# Congestion curve types +CURVE_LINEAR = 'linear' # x - steady increase +CURVE_EXPONENTIAL = 'exponential' # exp(x)-1 - slow start, rapid end +CURVE_LOGARITHMIC = 'logarithmic' # log(1+x) - fast start, plateau + +# Link profiles: (base_bw%, base_latency_ms, sensitivity, curve_type) +# - sensitivity: 1.0 = highly affected by load, 0.3 = minimally affected +# - curve_type: how congestion scales with load +LINK_PROFILES = { + 'L1' : (15.0, 1.0, 1.0, CURVE_EXPONENTIAL), + 'L3' : (10.0, 0.8, 0.7, CURVE_EXPONENTIAL), + 'L5' : ( 8.0, 0.3, 0.3, CURVE_LINEAR), + 'L9' : ( 8.0, 0.3, 0.3, CURVE_LINEAR), + 'L13': (12.0, 0.5, 0.5, CURVE_LOGARITHMIC), +} + +MAX_SERVICES = 5 + + +class SimapMetricsGenerator: + """ + Generates realistic SIMAP telemetry metrics based on service count. + Higher service counts cause non-linear congestion effects. + Access links are more sensitive to load than core links. + """ + + def __init__(self, service_count: int = 0): + LOGGER.info("Initiating SimapMetricsGenerator") + self._service_count = 0 + self._service_ids: Dict[str, List[str]] = { + 'te' : [], + 'trans' : [], + 'agg' : [], + 'e2e' : [], + } + self.set_service_count(service_count) + + @property + def service_count(self) -> int: + return self._service_count + + def set_service_count(self, count: int) -> None: + """Update service count and regenerate domain-specific service IDs.""" + if count < 0 or count > MAX_SERVICES: + raise ValueError(f"Service count must be 0-{MAX_SERVICES}, got {count}") + self._service_count = count + # Each domain has its own service IDs + self._service_ids = { + 'te' : [f'te-svc-{i+1}' for i in range(count)], + 'trans' : [f'trans-svc-{i+1}' for i in range(count)], + 'agg' : [f'agg-svc-{i+1}' for i in range(count)], + 'e2e' : [f'e2e-svc-{i+1}' for i in range(count)], + } + LOGGER.info(f"Service count set to {count}, IDs per domain: {self._service_ids}") + + def get_service_ids(self, domain: str = 'e2e') -> List[str]: + """Return current list of active service IDs for a specific domain.""" + if domain not in self._service_ids: + raise ValueError(f"Unknown domain: {domain}. Valid: {list(self._service_ids.keys())}") + return self._service_ids[domain].copy() + + def get_all_service_ids(self) -> Dict[str, List[str]]: + """Return all domain service IDs.""" + return {k: v.copy() for k, v in self._service_ids.items()} + + def _compute_congestion_factor(self, curve_type: str, load_ratio: float) -> float: + """ + Compute congestion factor based on curve type and load ratio (0-1). + """ + if curve_type == CURVE_LINEAR: + return load_ratio + elif curve_type == CURVE_EXPONENTIAL: + # Exponential: slow start, rapid increase at high load + return (math.exp(load_ratio * 2) - 1) / (math.e ** 2 - 1) + elif curve_type == CURVE_LOGARITHMIC: + # Logarithmic: fast initial increase, then plateau + return math.log1p(load_ratio * 2.7) / math.log1p(2.7) + else: + return load_ratio # Default to linear + + def generate_link_metrics(self, link_id: str) -> Tuple[float, float]: + """ + Generate BW and latency for a specific TE link using distinct congestion patterns. + Returns: + Tuple of (bandwidth_utilization%, latency_ms) + """ + if link_id not in LINK_PROFILES: + raise ValueError(f"Unknown link ID: {link_id}") + + base_bw, base_latency, sensitivity, curve_type = LINK_PROFILES[link_id] + + # Load ratio (0 to 1) + load_ratio = self._service_count / MAX_SERVICES + + # Compute congestion factor using link-specific curve + congestion_factor = self._compute_congestion_factor(curve_type, load_ratio) + + # Calculate base metrics with congestion + bw_utilization = base_bw + (congestion_factor * sensitivity * 60.0) + latency = base_latency * (1.0 + congestion_factor * sensitivity * 4.0) + + # Add uniform noise (5%) + bw_noise = random.uniform(-0.05, 0.05) * bw_utilization + lat_noise = random.uniform(-0.05, 0.05) * latency + + bw_utilization = max(0.0, min(100.0, bw_utilization + bw_noise)) + latency = max(0.1, latency + lat_noise) + + return (bw_utilization, latency) + + def generate_all_te_metrics(self) -> Dict[str, Tuple[float, float]]: + """ + Generate metrics for all TE links in the path. + + Returns: + Dict mapping link_id to (bandwidth%, latency_ms) + """ + return {link_id: self.generate_link_metrics(link_id) for link_id in LINK_PROFILES} + + def aggregate_abstract_metrics( + self, te_metrics: Dict[str, Tuple[float, float]] + ) -> Dict[str, Tuple[float, float]]: + """ + Aggregate TE metrics into abstract layer metrics. + BW: average, Latency: sum + + Returns: + Dict with 'Trans-L1', 'AggNet-L1', 'E2E-L1' metrics + """ + bw_L1, lat_L1 = te_metrics['L1'] + bw_L3, lat_L3 = te_metrics['L3'] + bw_L5, lat_L5 = te_metrics['L5'] + bw_L9, lat_L9 = te_metrics['L9'] + bw_L13, lat_L13 = te_metrics['L13'] + + # Trans-L1: L5 + L9 + bw_trans = (bw_L5 + bw_L9) / 2 + lat_trans = lat_L5 + lat_L9 + + # AggNet-L1: L3 + Trans-L1 + L13 + bw_aggnet = (bw_L3 + bw_trans + bw_L13) / 3 + lat_aggnet = lat_L3 + lat_trans + lat_L13 + + # E2E-L1: L1 + AggNet-L1 + bw_e2e = (bw_L1 + bw_aggnet) / 2 + lat_e2e = lat_L1 + lat_aggnet + + return { + 'Trans-L1' : (bw_trans, lat_trans), + 'AggNet-L1': (bw_aggnet, lat_aggnet), + 'E2E-L1' : (bw_e2e, lat_e2e), + } diff --git a/src/tests/tools/simap_server/simap_client/Tools.py b/src/tests/tools/simap_datastore/simap_client/Tools.py similarity index 98% rename from src/tests/tools/simap_server/simap_client/Tools.py rename to src/tests/tools/simap_datastore/simap_client/Tools.py index b49110f82eea24c76dcb9a5bebe99575078925fa..e22327679e8617a73a4fd3c71c0507690282b48c 100644 --- a/src/tests/tools/simap_server/simap_client/Tools.py +++ b/src/tests/tools/simap_datastore/simap_client/Tools.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/simap_datastore/simap_client/__init__.py b/src/tests/tools/simap_datastore/simap_client/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 --- /dev/null +++ b/src/tests/tools/simap_datastore/simap_client/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2022-2026 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/tools/simap_datastore/simap_client/__main__.py b/src/tests/tools/simap_datastore/simap_client/__main__.py new file mode 100644 index 0000000000000000000000000000000000000000..b6da7c7465b04c16050b3aaff231c7ccb0a1a3d7 --- /dev/null +++ b/src/tests/tools/simap_datastore/simap_client/__main__.py @@ -0,0 +1,112 @@ +# Copyright 2022-2026 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, logging, random, time +from common.tools.rest_conf.client.RestConfClient import RestConfClient + +from .SimapClient import SimapClient +from .SimapMetricsGenerator import SimapMetricsGenerator +from .Tools import (create_simap_aggnet, create_simap_e2enet, + create_simap_te, create_simap_trans) + +logging.basicConfig(level=logging.INFO) +logging.getLogger('RestConfClient').setLevel(logging.WARN) +LOGGER = logging.getLogger(__name__) + + +def main() -> None: + restconf_client = RestConfClient( + '127.0.0.1', port=8080, + logger=logging.getLogger('RestConfClient') + ) + simap_client = SimapClient(restconf_client) + generator = SimapMetricsGenerator(service_count=5) + + try: + create_simap_te(simap_client) + create_simap_trans(simap_client) + create_simap_aggnet(simap_client) + create_simap_e2enet(simap_client) + except Exception as e: + error_msg = str(e) + if 'status_code=409' in error_msg or 'already exists' in error_msg.lower(): + LOGGER.warning('SIMAP topology already exists, skipping further creation requests.') + else: + LOGGER.error('Error creating SIMAP topology: %s', e) + return + + print('networks=', json.dumps(simap_client.networks())) + + # TE links for path: ONT1 -> OLT -> PE1 -> P1 -> PE2 -> POP1 + te_network = simap_client.network('te') + te_links = { + 'L1' : te_network.link('L1'), # ONT1 -> OLT + 'L3' : te_network.link('L3'), # OLT -> PE1 + 'L5' : te_network.link('L5'), # PE1 -> P1 + 'L9' : te_network.link('L9'), # P1 -> PE2 + 'L13': te_network.link('L13'), # PE2 -> POP1 + } + + # Abstract layer links + abstract_links = { + 'Trans-L1' : simap_client.network('simap-trans').link('Trans-L1'), # L5 + L9 + 'AggNet-L1': simap_client.network('simap-aggnet').link('AggNet-L1'), # L3 + Trans-L1 + L13 + 'E2E-L1' : simap_client.network('simap-e2e').link('E2E-L1'), # L1 + AggNet-L1 + } + + # Initialize metrics generator with service count (0-5) + generator = SimapMetricsGenerator(service_count=4) + + for i in range(1000): + # Randomly change service count (1-5) every 5 iterations + if i % 5 == 0: + generator.set_service_count(random.randint(1, 5)) + + # Generate TE link metrics based on current service count + te_metrics = generator.generate_all_te_metrics() + + # Get domain-specific service IDs + te_service_ids = generator.get_service_ids('te') + trans_service_ids = generator.get_service_ids('trans') + agg_service_ids = generator.get_service_ids('agg') + e2e_service_ids = generator.get_service_ids('e2e') + + # Update TE link telemetry with TE domain service IDs + for link_id, (bw, lat) in te_metrics.items(): + te_links[link_id].telemetry.update(bw, lat, related_service_ids=te_service_ids) + + # Aggregate and update abstract layer telemetry with domain-specific service IDs + abstract_metrics = generator.aggregate_abstract_metrics(te_metrics) + domain_service_map = { + 'Trans-L1' : trans_service_ids, + 'AggNet-L1': agg_service_ids, + 'E2E-L1' : e2e_service_ids, + } + for link_id, (bw, lat) in abstract_metrics.items(): + abstract_links[link_id].telemetry.update(bw, lat, related_service_ids=domain_service_map[link_id]) + + # Print telemetry summary + if i != 0 and i % 5 == 0: + print(f'--- Iteration {i} | Services: {generator.service_count} ---') + for link_id, (bw, lat) in te_metrics.items(): + print(f'TE {link_id:4s}: BW={bw:5.2f}%, Lat={lat:.3f}ms SvcIDs: {te_service_ids}') + for link_id, (bw, lat) in abstract_metrics.items(): + print(f'{link_id:10s}: BW={bw:5.2f}%, Lat={lat:.3f}ms SvcIDs: {domain_service_map[link_id]}') + + time.sleep(10) + + +if __name__ == '__main__': + main() diff --git a/src/tests/tools/simap_datastore/simap_datastore/Config.py b/src/tests/tools/simap_datastore/simap_datastore/Config.py new file mode 100644 index 0000000000000000000000000000000000000000..3a3caee67d679218731243e30cc497baf6b38a60 --- /dev/null +++ b/src/tests/tools/simap_datastore/simap_datastore/Config.py @@ -0,0 +1,22 @@ +# Copyright 2022-2026 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 + +# InfluxDB Configuration +INFLUXDB_HOST = os.environ.get('INFLUXDB_HOST', 'localhost' ) +INFLUXDB_PORT = int(os.environ.get('INFLUXDB_PORT', '8181') ) +INFLUXDB_DATABASE = os.environ.get('INFLUXDB_DATABASE', 'simap_telemetry') +INFLUXDB_TOKEN = os.environ.get('INFLUXDB_TOKEN', 'apiv3_xSq6xD1wBvZ21Pc3uPnqqmgLeSn-kZbz1y4S4u8GtSbJebEly8wl9WUjGJ0Ja_bQuwKB_lpDcHrNJUBCDJMSCw') diff --git a/src/tests/tools/simap_datastore/simap_datastore/TelemetryCallbacks.py b/src/tests/tools/simap_datastore/simap_datastore/TelemetryCallbacks.py new file mode 100644 index 0000000000000000000000000000000000000000..65a74c1afe407018fcfb99f491c6df71dd67391b --- /dev/null +++ b/src/tests/tools/simap_datastore/simap_datastore/TelemetryCallbacks.py @@ -0,0 +1,268 @@ +# Copyright 2022-2026 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. + +""" +Telemetry callbacks for writing SIMAP telemetry to InfluxDB. +""" + +import json +import logging +import re +from typing import Any, Dict, Optional, Union + +from .....common.tools.rest_conf.server.restconf_server.Callbacks import _Callback +from .influxdb_client import SimapInfluxDBClient + + +LOGGER = logging.getLogger(__name__) + + +def _extract_telemetry_from_nested(data: Dict, link_id: str = None, node_id: str = None) -> Optional[Dict]: + """ + Extract simap-telemetry data from various nested JSON structures returned by YangHandler. + + The YangHandler.update() returns different structures depending on context: + - {"ietf-network:network": [{"network-id": "te", "ietf-network-topology:link": [{"link-id": "L1", "simap-telemetry:simap-telemetry": {...}}]}]} + - {"ietf-network-topology:link": [{"link-id": "L1", "simap-telemetry:simap-telemetry": {...}}]} + - {"simap-telemetry:simap-telemetry": {...}} + - {"ietf-network:node": [...]} for nodes + + Args: + data: The JSON dict to search + link_id: If searching for link telemetry, the link ID to match + node_id: If searching for node telemetry, the node ID to match + + Returns: + The telemetry dict or None if not found + """ + if not isinstance(data, dict): + return None + + # Direct telemetry at top level + if 'simap-telemetry:simap-telemetry' in data: + return data['simap-telemetry:simap-telemetry'] + + # Check for direct telemetry fields (already unwrapped) + if 'bandwidth-utilization' in data or 'latency' in data or 'cpu-utilization' in data: + return data + + # Search in ietf-network:network array + if 'ietf-network:network' in data: + for network in data['ietf-network:network']: + if isinstance(network, dict): + # Look for links + if link_id and 'ietf-network-topology:link' in network: + for link in network['ietf-network-topology:link']: + if isinstance(link, dict) and link.get('link-id') == link_id: + if 'simap-telemetry:simap-telemetry' in link: + return link['simap-telemetry:simap-telemetry'] + # Look for nodes + if node_id and 'node' in network: + for node in network['node']: + if isinstance(node, dict) and node.get('node-id') == node_id: + if 'simap-telemetry:simap-telemetry' in node: + return node['simap-telemetry:simap-telemetry'] + + # Search in ietf-network-topology:link array + if 'ietf-network-topology:link' in data: + for link in data['ietf-network-topology:link']: + if isinstance(link, dict): + if link_id is None or link.get('link-id') == link_id: + if 'simap-telemetry:simap-telemetry' in link: + return link['simap-telemetry:simap-telemetry'] + + # Search in ietf-network:node or node array + for node_key in ['ietf-network:node', 'node']: + if node_key in data: + for node in data[node_key]: + if isinstance(node, dict): + if node_id is None or node.get('node-id') == node_id: + if 'simap-telemetry:simap-telemetry' in node: + return node['simap-telemetry:simap-telemetry'] + + return None + + +class CallbackOnLinkTelemetry(_Callback): + """ + Callback triggered when link telemetry data is updated via RESTCONF. + Writes telemetry data to InfluxDB. + """ + + # Pattern matches: + # /restconf/data/ietf-network:networks/network=/ietf-network-topology:link= + PATTERN = ( + r'/restconf/data/ietf-network:networks' + r'/network=(?P[^/]+)' + r'/ietf-network-topology:link=(?P[^/]+)' + ) + + def __init__(self, influx_client: SimapInfluxDBClient) -> None: + """ + Initialize the callback with an InfluxDB client. + + Args: + influx_client: SimapInfluxDBClient instance for writing telemetry + """ + super().__init__(self.PATTERN) + self._influx_client = influx_client + + def execute_data_update( + self, + match: re.Match, + path: str, + old_data: Optional[Union[Dict, str]], + new_data: Optional[Union[Dict, str]] + ) -> bool: + """ + Execute the callback to write link telemetry to InfluxDB. + + Args: + match: Regex match object containing network_id and link_id + path: Original RESTCONF path + old_data: Previous telemetry data (unused) + new_data: New telemetry data to write (can be dict or JSON string) + + Returns: + True to continue executing other callbacks + """ + if new_data is None: + LOGGER.debug("Link telemetry deletion, skipping InfluxDB write") + return True + + # Handle case where new_data is a JSON string instead of a dict + if isinstance(new_data, str): + try: + new_data = json.loads(new_data) + except json.JSONDecodeError: + LOGGER.error("Failed to parse new_data as JSON: %s", new_data) + return True + + network_id = match.group('network_id') + link_id = match.group('link_id') + + # Extract telemetry fields from nested JSON structure + # YangHandler returns various nested formats depending on context + telemetry = _extract_telemetry_from_nested(new_data, link_id=link_id) + if telemetry is None: + LOGGER.warning( + "Could not extract telemetry from data for link=%s: %s", + link_id, new_data + ) + return True + + bandwidth_utilization = telemetry.get('bandwidth-utilization', 0) + latency = telemetry.get('latency', 0) + related_service_ids = telemetry.get('related-service-ids', None) + + LOGGER.info( + "Link telemetry callback: network=%s, link=%s, bw=%s, lat=%s", + network_id, link_id, bandwidth_utilization, latency + ) + + self._influx_client.write_link_telemetry( + network_id=network_id, + link_id=link_id, + bandwidth_utilization=float(bandwidth_utilization), + latency=float(latency), + related_service_ids=related_service_ids + ) + + return True # Continue to other callbacks + + +class CallbackOnNodeTelemetry(_Callback): + """ + Callback triggered when node telemetry data is updated via RESTCONF. + Writes telemetry data to InfluxDB. + """ + + # Pattern matches: + # /restconf/data/ietf-network:networks/network=/node= + PATTERN = ( + r'/restconf/data/ietf-network:networks' + r'/network=(?P[^/]+)' + r'/node=(?P[^/]+)' + ) + + def __init__(self, influx_client: SimapInfluxDBClient) -> None: + """ + Initialize the callback with an InfluxDB client. + + Args: + influx_client: SimapInfluxDBClient instance for writing telemetry + """ + super().__init__(self.PATTERN) + self._influx_client = influx_client + + def execute_data_update( + self, + match: re.Match, + path: str, + old_data: Optional[Union[Dict, str]], + new_data: Optional[Union[Dict, str]] + ) -> bool: + """ + Execute the callback to write node telemetry to InfluxDB. + + Args: + match: Regex match object containing network_id and node_id + path: Original RESTCONF path + old_data: Previous telemetry data (unused) + new_data: New telemetry data to write (can be dict or JSON string) + + Returns: + True to continue executing other callbacks + """ + if new_data is None: + LOGGER.debug("Node telemetry deletion, skipping InfluxDB write") + return True + + # Handle case where new_data is a JSON string instead of a dict + if isinstance(new_data, str): + try: + new_data = json.loads(new_data) + except json.JSONDecodeError: + LOGGER.error("Failed to parse new_data as JSON: %s", new_data) + return True + + network_id = match.group('network_id') + node_id = match.group('node_id') + + # Extract telemetry fields from nested JSON structure + # YangHandler returns various nested formats depending on context + telemetry = _extract_telemetry_from_nested(new_data, node_id=node_id) + if telemetry is None: + LOGGER.warning( + "Could not extract telemetry from data for node=%s: %s", + node_id, new_data + ) + return True + + cpu_utilization = telemetry.get('cpu-utilization', 0) + related_service_ids = telemetry.get('related-service-ids', None) + + LOGGER.info( + "Node telemetry callback: network=%s, node=%s, cpu=%s", + network_id, node_id, cpu_utilization + ) + + self._influx_client.write_node_telemetry( + network_id=network_id, + node_id=node_id, + cpu_utilization=float(cpu_utilization), + related_service_ids=related_service_ids + ) + + return True # Continue to other callbacks diff --git a/src/tests/tools/simap_datastore/simap_datastore/__init__.py b/src/tests/tools/simap_datastore/simap_datastore/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..3c1e50ab2e4252c5266d9fe2a845a44a3ae564d2 --- /dev/null +++ b/src/tests/tools/simap_datastore/simap_datastore/__init__.py @@ -0,0 +1,14 @@ +# Copyright 2022-2026 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/tools/simap_datastore/simap_datastore/__main__.py b/src/tests/tools/simap_datastore/simap_datastore/__main__.py new file mode 100644 index 0000000000000000000000000000000000000000..79de210abfd24352c24554dc2a0b92817fe0ec8c --- /dev/null +++ b/src/tests/tools/simap_datastore/simap_datastore/__main__.py @@ -0,0 +1,26 @@ +# Copyright 2022-2026 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 .app import app + +BIND_ADDRESS = '0.0.0.0' +BIND_PORT = 8080 + +if __name__ == '__main__': + # Only used to run it locally during development stage; + # otherwise, app is directly launched by gunicorn. + app.run( + host=BIND_ADDRESS, port=BIND_PORT, debug=True, use_reloader=False + ) diff --git a/src/tests/tools/simap_datastore/simap_datastore/app.py b/src/tests/tools/simap_datastore/simap_datastore/app.py new file mode 100644 index 0000000000000000000000000000000000000000..c1fa903e3876dce146a40714ad69c2beeed9b012 --- /dev/null +++ b/src/tests/tools/simap_datastore/simap_datastore/app.py @@ -0,0 +1,64 @@ +# Copyright 2022-2026 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. + + +# This file overwrites default RestConf Server `app.py` file. + + +import logging +from common.tools.rest_conf.server.restconf_server.RestConfServerApplication import RestConfServerApplication +from .TelemetryCallbacks import CallbackOnLinkTelemetry, CallbackOnNodeTelemetry +from .Config import INFLUXDB_HOST, INFLUXDB_PORT, INFLUXDB_TOKEN, INFLUXDB_DATABASE +from .influxdb_client import SimapInfluxDBClient + + +logging.basicConfig( + level = logging.INFO, + format = '[Worker-%(process)d][%(asctime)s] %(levelname)s:%(name)s:%(message)s', +) +LOGGER = logging.getLogger(__name__) + +LOGGER.info('Starting...') +rcs_app = RestConfServerApplication() +rcs_app.register_host_meta() +rcs_app.register_restconf() +LOGGER.info('All connectors registered') + +# Initialize InfluxDB client and register telemetry callbacks +try: + LOGGER.info('Initializing InfluxDB client (host=%s, port=%d, db=%s)...', INFLUXDB_HOST, INFLUXDB_PORT, INFLUXDB_DATABASE) + influx_client = SimapInfluxDBClient( + host = INFLUXDB_HOST, + port = INFLUXDB_PORT, + token = INFLUXDB_TOKEN, + database = INFLUXDB_DATABASE + ) +except Exception as e: + LOGGER.error('Failed to initialize InfluxDB client: %s', e) + influx_client = None + +if influx_client is not None and influx_client.is_connected(): + try: + rcs_app.callback_dispatcher.register(CallbackOnLinkTelemetry(influx_client)) + rcs_app.callback_dispatcher.register(CallbackOnNodeTelemetry(influx_client)) + LOGGER.info('Telemetry callbacks registered') + except Exception as e: + LOGGER.error('Failed to register telemetry callbacks: %s', e) +else: + LOGGER.warning('InfluxDB client not connected, telemetry callbacks disabled.') + +rcs_app.dump_configuration() +app = rcs_app.get_flask_app() + +LOGGER.info('Initialization completed!') diff --git a/src/tests/tools/simap_datastore/simap_datastore/influxdb_client.py b/src/tests/tools/simap_datastore/simap_datastore/influxdb_client.py new file mode 100644 index 0000000000000000000000000000000000000000..f71ecead301a424a056c3d56993d887364f7824b --- /dev/null +++ b/src/tests/tools/simap_datastore/simap_datastore/influxdb_client.py @@ -0,0 +1,206 @@ +# Copyright 2022-2026 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. + +""" +InfluxDB client wrapper for SIMAP telemetry data storage. +""" + +import json +import logging +from typing import List, Optional + +from influxdb_client_3 import InfluxDBClient3, Point, WritePrecision + +from .Config import INFLUXDB_HOST, INFLUXDB_PORT, INFLUXDB_DATABASE, INFLUXDB_TOKEN + + +LOGGER = logging.getLogger(__name__) + + +class SimapInfluxDBClient: + """ + Client wrapper for writing SIMAP telemetry data to InfluxDB 3.x. + """ + + def __init__( self, + host: Optional[str] = None, port: Optional[int] = None, + token: Optional[str] = None, database: Optional[str] = None + ) -> None: + """ + Initialize the InfluxDB client. + Args: + host: InfluxDB server hostname (default: from INFLUXDB_HOST env or 'localhost') + port: InfluxDB server port (default: from INFLUXDB_PORT env or 8181) + token: Authentication token (default: from INFLUXDB_TOKEN env) + database: Database/bucket name (default: from INFLUXDB_DATABASE env or 'simap_telemetry') + """ + self._host = host if host is not None else INFLUXDB_HOST + self._port = port if port is not None else INFLUXDB_PORT + self._database = database if database is not None else INFLUXDB_DATABASE + self._token = token if token is not None else INFLUXDB_TOKEN + self._client: Optional[InfluxDBClient3] = None + + try: + self._client = InfluxDBClient3( + token = self._token, + host = f"http://{self._host}:{self._port}", + database = self._database + ) + LOGGER.info("InfluxDB client initialized: host=%s:%d, database=%s", + self._host, self._port, self._database) + + # Test the connection + if not self._test_connection(): + LOGGER.error("InfluxDB client initialized but connection test failed") + self._client = None + else: + LOGGER.info("InfluxDB connection test successful") + + except Exception as e: # pylint: disable=broad-except + LOGGER.error("Failed to initialize InfluxDB client: %s", str(e)) + self._client = None + + def _test_connection(self) -> bool: + """ + Test the InfluxDB connection by attempting a simple system query. + Returns: + True if connection is accessible, False otherwise + """ + if self._client is None: + LOGGER.warning("InfluxDB client not initialized, cannot test connection") + return False + + try: + query = "SHOW TABLES" + self._client.query(query=query, language="sql") + return True + except Exception as e: # pylint: disable=broad-except + LOGGER.error("InfluxDB connection test failed: %s", str(e)) + return False + + def is_connected(self) -> bool: + """Check if client is initialized.""" + return self._client is not None + + def write_link_telemetry( + self, + network_id: str, + link_id: str, + bandwidth_utilization: float, + latency: float, + related_service_ids: Optional[List[str]] = None + ) -> bool: + """ + Write link telemetry data to InfluxDB. + + Args: + network_id: Network identifier (e.g., 'te', 'simap-trans') + link_id: Link identifier (e.g., 'L1', 'Trans-L1') + bandwidth_utilization: Bandwidth utilization percentage (0-100) + latency: Latency in milliseconds + related_service_ids: Optional list of related service IDs + + Returns: + True if write succeeded, False otherwise + """ + if self._client is None: + LOGGER.warning("InfluxDB client not initialized, skipping write") + return False + + try: + point = ( + Point("link_telemetry") + .tag("network_id", network_id) + .tag("link_id", link_id) + .field("bandwidth_utilization", float(bandwidth_utilization)) + .field("latency", float(latency)) + ) + + if related_service_ids: + point = point.field("related_service_ids", json.dumps(related_service_ids)) + + self._client.write(record=point, write_precision=WritePrecision.S) + + LOGGER.debug( + "Wrote link telemetry: network=%s, link=%s, bw=%.2f, lat=%.3f", + network_id, link_id, bandwidth_utilization, latency + ) + return True + + except Exception as e: # pylint: disable=broad-except + LOGGER.error( + "Failed to write link telemetry (network=%s, link=%s): %s", + network_id, link_id, str(e) + ) + return False + + def write_node_telemetry( + self, + network_id: str, + node_id: str, + cpu_utilization: float, + related_service_ids: Optional[List[str]] = None + ) -> bool: + """ + Write node telemetry data to InfluxDB. + + Args: + network_id: Network identifier + node_id: Node identifier (e.g., 'PE1', 'ONT1') + cpu_utilization: CPU utilization percentage (0-100) + related_service_ids: Optional list of related service IDs + + Returns: + True if write succeeded, False otherwise + """ + if self._client is None: + LOGGER.warning("InfluxDB client not initialized, skipping write") + return False + + try: + point = ( + Point("node_telemetry") + .tag("network_id", network_id) + .tag("node_id", node_id) + .field("cpu_utilization", float(cpu_utilization)) + ) + + if related_service_ids: + point = point.field("related_service_ids", json.dumps(related_service_ids)) + + self._client.write(record=point, write_precision=WritePrecision.S) + + LOGGER.debug( + "Wrote node telemetry: network=%s, node=%s, cpu=%.2f", + network_id, node_id, cpu_utilization + ) + return True + + except Exception as e: # pylint: disable=broad-except + LOGGER.error( + "Failed to write node telemetry (network=%s, node=%s): %s", + network_id, node_id, str(e) + ) + return False + + def close(self) -> None: + """Close the InfluxDB client connection.""" + if self._client is not None: + try: + self._client.close() + LOGGER.info("InfluxDB client closed") + except Exception as e: # pylint: disable=broad-except + LOGGER.error("Error closing InfluxDB client: %s", str(e)) + finally: + self._client = None diff --git a/src/tests/tools/simap_server/startup.json b/src/tests/tools/simap_datastore/startup.json similarity index 100% rename from src/tests/tools/simap_server/startup.json rename to src/tests/tools/simap_datastore/startup.json diff --git a/src/tests/tools/simap_server/yang/ietf-inet-types.yang b/src/tests/tools/simap_datastore/yang/ietf-inet-types.yang similarity index 100% rename from src/tests/tools/simap_server/yang/ietf-inet-types.yang rename to src/tests/tools/simap_datastore/yang/ietf-inet-types.yang diff --git a/src/tests/tools/simap_server/yang/ietf-network-topology.yang b/src/tests/tools/simap_datastore/yang/ietf-network-topology.yang similarity index 100% rename from src/tests/tools/simap_server/yang/ietf-network-topology.yang rename to src/tests/tools/simap_datastore/yang/ietf-network-topology.yang diff --git a/src/tests/tools/simap_server/yang/ietf-network.yang b/src/tests/tools/simap_datastore/yang/ietf-network.yang similarity index 100% rename from src/tests/tools/simap_server/yang/ietf-network.yang rename to src/tests/tools/simap_datastore/yang/ietf-network.yang diff --git a/src/tests/tools/simap_server/yang/simap-telemetry.yang b/src/tests/tools/simap_datastore/yang/simap-telemetry.yang similarity index 100% rename from src/tests/tools/simap_server/yang/simap-telemetry.yang rename to src/tests/tools/simap_datastore/yang/simap-telemetry.yang diff --git a/src/tests/tools/simap_server/yang/simap.txt b/src/tests/tools/simap_datastore/yang/simap.txt similarity index 100% rename from src/tests/tools/simap_server/yang/simap.txt rename to src/tests/tools/simap_datastore/yang/simap.txt diff --git a/src/tests/tools/simap_server/README.md b/src/tests/tools/simap_server/README.md deleted file mode 100644 index bdea3b5bf1be4b0c9406be0c9d235daf1ea9533c..0000000000000000000000000000000000000000 --- a/src/tests/tools/simap_server/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# RESTCONF/SIMAP Server - -This server implements a basic RESTCONF Server that can load, potentially, any YANG data model. -In this case, it is prepared to load a SIMAP Server based on IETF Network Topology + custom SIMAP Telemetry extensions. - - -## Build the RESTCONF/SIMAP Server Docker image -```bash -./build.sh -``` - -## Deploy the RESTCONF/SIMAP Server -```bash -./deploy.sh -``` - -## Run the RESTCONF/SIMAP Client for testing: -```bash -./run_client.sh -``` - -## Destroy the RESTCONF/SIMAP Server -```bash -./destroy.sh -``` diff --git a/src/tests/tools/simap_server/simap_client/__main__.py b/src/tests/tools/simap_server/simap_client/__main__.py deleted file mode 100644 index 67803b0922f77d1f02a3cf4b5170ca428767d4fc..0000000000000000000000000000000000000000 --- a/src/tests/tools/simap_server/simap_client/__main__.py +++ /dev/null @@ -1,60 +0,0 @@ -# Copyright 2022-2025 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, logging, time -from common.tools.rest_conf.client.RestConfClient import RestConfClient -from .SimapClient import SimapClient -from .Tools import create_simap_aggnet, create_simap_e2enet, create_simap_te, create_simap_trans - - -logging.basicConfig(level=logging.INFO) -logging.getLogger('RestConfClient').setLevel(logging.WARN) -LOGGER = logging.getLogger(__name__) - - -def main() -> None: - restconf_client = RestConfClient( - '127.0.0.1', port=8080, - logger=logging.getLogger('RestConfClient') - ) - simap_client = SimapClient(restconf_client) - - create_simap_te(simap_client) - create_simap_trans(simap_client) - create_simap_aggnet(simap_client) - create_simap_e2enet(simap_client) - - print('networks=', json.dumps(simap_client.networks())) - - trans_link = simap_client.network('simap-trans').link('Trans-L1') - trans_node_site1 = simap_client.network('simap-trans').node('site1') - trans_node_site2 = simap_client.network('simap-trans').node('site2') - - related_service_ids = ['trans-svc1', 'trans-svc2', 'trans-svc3'] - - for i in range(1000): - trans_link.telemetry.update(float(i), float(i), related_service_ids=related_service_ids) - trans_node_site1.telemetry.update(float(i), related_service_ids=related_service_ids) - trans_node_site2.telemetry.update(float(i), related_service_ids=related_service_ids) - - print('trans link telemetry =', json.dumps(trans_link.telemetry.get())) - print('trans site1 telemetry =', json.dumps(trans_node_site1.telemetry.get())) - print('trans site2 telemetry =', json.dumps(trans_node_site2.telemetry.get())) - - time.sleep(10) - - -if __name__ == '__main__': - main() diff --git a/src/tests/tools/test_tools_p4.py b/src/tests/tools/test_tools_p4.py index e770037caad109ba3ad45b68fff91b02997c84c3..781e7caf4e32f15ea8a7b4ce65a7cf8c2b4d741b 100644 --- a/src/tests/tools/test_tools_p4.py +++ b/src/tests/tools/test_tools_p4.py @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. @@ -12,7 +12,6 @@ # 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,\ DeviceDriverEnum, ServiceTypeEnum, ServiceStatusEnum @@ -25,89 +24,12 @@ ADMIN_CONTEXT_ID = ContextId(**json_context_id(CONTEXT_NAME_P4)) # Device and rule cardinality variables DEV_NB = 4 P4_DEV_NB = 1 -CONNECTION_RULES = 3 -ENDPOINT_RULES = 3 -INT_RULES = 19 -L2_RULES = 10 -L3_RULES = 4 -ACL_RULES = 1 - -DATAPLANE_RULES_NB_INT_B1 = 5 -DATAPLANE_RULES_NB_INT_B2 = 6 -DATAPLANE_RULES_NB_INT_B3 = 8 -DATAPLANE_RULES_NB_RT_WEST = 7 -DATAPLANE_RULES_NB_RT_EAST = 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_WEST +\ - DATAPLANE_RULES_NB_RT_EAST +\ - DATAPLANE_RULES_NB_ACL # Service-related variables SVC_NB = 1 NO_SERVICES = 0 NO_SLICES = 0 -TEST_PATH = os.path.join( - os.path.dirname(os.path.dirname( - os.path.abspath(__file__) - )) + '/p4-fabric-tna/descriptors') -assert os.path.exists(TEST_PATH), "Invalid path to P4 SD-Fabric tests" - -# Topology descriptor -DESC_TOPO = os.path.join(TEST_PATH, 'topology.json') -assert os.path.exists(DESC_TOPO), "Invalid path to the SD-Fabric topology descriptor" - -# SBI descriptors -# The switch cannot digest all rules at once, hence we insert in batches -DESC_FILE_RULES_INSERT_INT_B1 = os.path.join(TEST_PATH, 'sbi-rules-insert-int-b1.json') -assert os.path.exists(DESC_FILE_RULES_INSERT_INT_B1),\ - "Invalid path to the SD-Fabric INT SBI descriptor (batch #1)" - -DESC_FILE_RULES_INSERT_INT_B2 = os.path.join(TEST_PATH, 'sbi-rules-insert-int-b2.json') -assert os.path.exists(DESC_FILE_RULES_INSERT_INT_B2),\ - "Invalid path to the SD-Fabric INT SBI descriptor (batch #2)" - -DESC_FILE_RULES_INSERT_INT_B3 = os.path.join(TEST_PATH, 'sbi-rules-insert-int-b3.json') -assert os.path.exists(DESC_FILE_RULES_INSERT_INT_B3),\ - "Invalid path to the SD-Fabric INT SBI descriptor (batch #3)" - -DESC_FILE_RULES_INSERT_ROUTING_WEST = os.path.join(TEST_PATH, 'sbi-rules-insert-routing-west.json') -assert os.path.exists(DESC_FILE_RULES_INSERT_ROUTING_WEST),\ - "Invalid path to the SD-Fabric routing SBI descriptor (domain1-side)" - -DESC_FILE_RULES_INSERT_ROUTING_EAST = os.path.join(TEST_PATH, 'sbi-rules-insert-routing-east.json') -assert os.path.exists(DESC_FILE_RULES_INSERT_ROUTING_EAST),\ - "Invalid path to the SD-Fabric routing SBI descriptor (domain2-side)" - -DESC_FILE_RULES_INSERT_ACL = os.path.join(TEST_PATH, 'sbi-rules-insert-acl.json') -assert os.path.exists(DESC_FILE_RULES_INSERT_ACL),\ - "Invalid path to the SD-Fabric ACL SBI descriptor" - -DESC_FILE_RULES_DELETE_ALL = os.path.join(TEST_PATH, 'sbi-rules-remove.json') -assert os.path.exists(DESC_FILE_RULES_DELETE_ALL),\ - "Invalid path to the SD-Fabric rule removal SBI descriptor" - -# Service descriptors -DESC_FILE_SERVICE_P4_INT = os.path.join(TEST_PATH, 'service-p4-int.json') -assert os.path.exists(DESC_FILE_SERVICE_P4_INT),\ - "Invalid path to the SD-Fabric INT service descriptor" - -DESC_FILE_SERVICE_P4_L2_SIMPLE = os.path.join(TEST_PATH, 'service-p4-l2-simple.json') -assert os.path.exists(DESC_FILE_SERVICE_P4_L2_SIMPLE),\ - "Invalid path to the SD-Fabric L2 simple service descriptor" - -DESC_FILE_SERVICE_P4_L3 = os.path.join(TEST_PATH, 'service-p4-l3.json') -assert os.path.exists(DESC_FILE_SERVICE_P4_L3),\ - "Invalid path to the SD-Fabric L3 service descriptor" - -DESC_FILE_SERVICE_P4_ACL = os.path.join(TEST_PATH, 'service-p4-acl.json') -assert os.path.exists(DESC_FILE_SERVICE_P4_ACL),\ - "Invalid path to the SD-Fabric ACL service descriptor" - def identify_number_of_p4_devices(devices) -> int: p4_dev_no = 0 diff --git a/src/tests/tools/traffic_changer/Dockerfile b/src/tests/tools/traffic_changer/Dockerfile index 268a06684be392f9ff3653fab6fc62ebd434aff9..c57020241918501e5a7832ccc696e2640f9b2621 100644 --- a/src/tests/tools/traffic_changer/Dockerfile +++ b/src/tests/tools/traffic_changer/Dockerfile @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/traffic_changer/app.py b/src/tests/tools/traffic_changer/app.py index d3086ed224df7e37f7847afbc45779166dc19dbc..f25cb959b39f7d55a2805af804eaf0aaf8191bd0 100644 --- a/src/tests/tools/traffic_changer/app.py +++ b/src/tests/tools/traffic_changer/app.py @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/traffic_changer/build.sh b/src/tests/tools/traffic_changer/build.sh index ba7df243302bceccf2c8228235c528e28a9dd82b..062f472fd41c4eeaba9dfe278f2cba1ba508be85 100644 --- a/src/tests/tools/traffic_changer/build.sh +++ b/src/tests/tools/traffic_changer/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/traffic_changer/deploy.sh b/src/tests/tools/traffic_changer/deploy.sh index 8cc4ba3bd5e7e493b1827ac90ba3903d0375402a..ba12c72d8370bb78a0084b5c7c16ae067eb1d188 100644 --- a/src/tests/tools/traffic_changer/deploy.sh +++ b/src/tests/tools/traffic_changer/deploy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/traffic_changer/destroy.sh b/src/tests/tools/traffic_changer/destroy.sh index 2f6ac62aba52872df8bca4b165b76d9e2af8b4d2..67d0f5de425620190a23ae468b2f4d2763a66267 100644 --- a/src/tests/tools/traffic_changer/destroy.sh +++ b/src/tests/tools/traffic_changer/destroy.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/traffic_changer/requirements.in b/src/tests/tools/traffic_changer/requirements.in index c11cba15ea68d97d0d5797cf95792ef00ceeac28..6b88f4f2f52b3f30edaaf85c2415fc2f69116ff2 100644 --- a/src/tests/tools/traffic_changer/requirements.in +++ b/src/tests/tools/traffic_changer/requirements.in @@ -1,4 +1,4 @@ -# Copyright 2022-2025 ETSI SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) +# Copyright 2022-2026 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. diff --git a/src/tests/tools/traffic_changer/templates/affect_form.html b/src/tests/tools/traffic_changer/templates/affect_form.html index 204d6ebb2d35551323a7af954f775b1e90a02218..5bcb70d9bda0ea2a1dc2d24bca5d666542e7f891 100644 --- a/src/tests/tools/traffic_changer/templates/affect_form.html +++ b/src/tests/tools/traffic_changer/templates/affect_form.html @@ -1,6 +1,6 @@